mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
fix: treat all keywords as lowercase when updating
In addition, treat package search by keywords as lowercase. Closes #296, #297, #298, #301 Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
8387f325f6
commit
14347232fd
2 changed files with 19 additions and 14 deletions
|
@ -124,6 +124,7 @@ class PackageSearch:
|
|||
def _search_by_keywords(self, keywords: Set[str]) -> orm.Query:
|
||||
self._join_user()
|
||||
self._join_keywords()
|
||||
keywords = set(k.lower() for k in keywords)
|
||||
self.query = self.query.filter(PackageKeyword.Keyword.in_(keywords))
|
||||
return self
|
||||
|
||||
|
|
|
@ -95,24 +95,28 @@ async def pkgbase_flag_comment(request: Request, name: str):
|
|||
async def pkgbase_keywords(request: Request, name: str,
|
||||
keywords: str = Form(default=str())):
|
||||
pkgbase = get_pkg_or_base(name, PackageBase)
|
||||
keywords = set(keywords.split(" "))
|
||||
|
||||
# Lowercase all keywords. Our database table is case insensitive,
|
||||
# and providing CI duplicates of keywords is erroneous.
|
||||
keywords = set(k.lower() for k in keywords.split(" "))
|
||||
|
||||
# Delete all keywords which are not supplied by the user.
|
||||
with db.begin():
|
||||
other_keywords = pkgbase.keywords.filter(
|
||||
~PackageKeyword.Keyword.in_(keywords))
|
||||
other_keyword_strings = [kwd.Keyword for kwd in other_keywords]
|
||||
other_keyword_strings = set(
|
||||
kwd.Keyword.lower() for kwd in other_keywords)
|
||||
|
||||
existing_keywords = set(
|
||||
kwd.Keyword for kwd in
|
||||
kwd.Keyword.lower() for kwd in
|
||||
pkgbase.keywords.filter(
|
||||
~PackageKeyword.Keyword.in_(other_keyword_strings))
|
||||
)
|
||||
with db.begin():
|
||||
|
||||
db.delete_all(other_keywords)
|
||||
for keyword in keywords.difference(existing_keywords):
|
||||
db.create(PackageKeyword,
|
||||
PackageBase=pkgbase,
|
||||
Keyword=keyword)
|
||||
new_keywords = keywords.difference(existing_keywords)
|
||||
for keyword in new_keywords:
|
||||
db.create(PackageKeyword, PackageBase=pkgbase, Keyword=keyword)
|
||||
|
||||
return RedirectResponse(f"/pkgbase/{name}",
|
||||
status_code=HTTPStatus.SEE_OTHER)
|
||||
|
|
Loading…
Add table
Reference in a new issue