diff options
author | Johannes Löthberg <johannes@kyriasis.com> | 2019-11-17 14:05:30 +0100 |
---|---|---|
committer | jelle van der Waa <jelle@vdwaa.nl> | 2019-11-17 17:19:24 +0100 |
commit | a55ab7de7e05819534542d5298598563741d63f5 (patch) | |
tree | 1c6c26bce5f76d9c63be53fb7c8f02805b9c3b84 | |
parent | 4443a1c159df5ccdd379562d77e2aa115a0f7305 (diff) | |
download | archweb-a55ab7de7e05819534542d5298598563741d63f5.tar.gz archweb-a55ab7de7e05819534542d5298598563741d63f5.zip |
Add support for searching by package provides
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
-rw-r--r-- | packages/views/search.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/packages/views/search.py b/packages/views/search.py index be60e890..b8f18ed5 100644 --- a/packages/views/search.py +++ b/packages/views/search.py @@ -106,9 +106,17 @@ def parse_form(form, packages): (Q(pkgname__icontains=q) for q in query.split())) q_pkgdesc = reduce(operator.__and__, (Q(pkgdesc__icontains=q) for q in query.split())) - packages = packages.filter(q_pkgname | q_pkgdesc) + qs_provide = [] + for query_term in query.split(): + term_parts = query_term.rsplit('=', 2) + qs_provide.append(Q(provides__name__icontains=term_parts[0])) + if len(term_parts) == 2: + qs_provide.append(Q(provides__version__exact=term_parts[1])) + q_provides = reduce(operator.__and__, qs_provide) - return packages + packages = packages.filter(q_pkgname | q_pkgdesc | q_provides) + + return packages.distinct() class SearchListView(ListView): |