From 908498933e24c43958b621c0c8e74615c607cfd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bedna=C5=99=C3=ADk?= <jan.bednarik@gmail.com> Date: Sat, 10 Nov 2018 21:44:39 +0100 Subject: [PATCH] Search of reports into one parametrized function --- openlobby/core/api/schema.py | 2 +- openlobby/core/api/types.py | 2 +- openlobby/core/search.py | 20 +++++++++----------- tests/test_search.py | 22 +++++++++++----------- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/openlobby/core/api/schema.py b/openlobby/core/api/schema.py index 9aab7ee..4864d20 100644 --- a/openlobby/core/api/schema.py +++ b/openlobby/core/api/schema.py @@ -87,7 +87,7 @@ class Query: query = kwargs.get("query", "") query = extract_text(query) params = {"highlight": kwargs.get("highlight")} - response = search.query_reports(query, paginator, **params) + response = search.search_reports(paginator, query=query, **params) total = response.hits.total page_info = paginator.get_page_info(total) diff --git a/openlobby/core/api/types.py b/openlobby/core/api/types.py index d0644aa..722a3bc 100644 --- a/openlobby/core/api/types.py +++ b/openlobby/core/api/types.py @@ -171,7 +171,7 @@ class Author(graphene.ObjectType): def resolve_reports(self, info, **kwargs): paginator = Paginator(**kwargs) - response = search.reports_by_author(self.id, paginator) + response = search.search_reports(paginator, author_id=self.id) total = response.hits.total page_info = paginator.get_page_info(total) diff --git a/openlobby/core/search.py b/openlobby/core/search.py index c72d581..b9b2df0 100644 --- a/openlobby/core/search.py +++ b/openlobby/core/search.py @@ -8,7 +8,7 @@ HIGHLIGHT_PARAMS = { } -def query_reports(query, paginator, *, highlight=False): +def search_reports(paginator, *, query=None, highlight=False, author_id=None): fields = [ "title", "body", @@ -18,22 +18,20 @@ def query_reports(query, paginator, *, highlight=False): "other_participants", ] s = ReportDoc.search() + s = s.exclude("term", is_draft=True) s = s.exclude("exists", field="superseded_by_id") - if query != "": + + if author_id: + s = s.filter("term", author_id=author_id) + + if query: s = s.query("multi_match", query=query, fields=fields) + if highlight: s = s.highlight(*fields, **HIGHLIGHT_PARAMS) - s = s.sort("-published") - s = s[paginator.slice_from : paginator.slice_to] - return s.execute() - -def reports_by_author(author_id, paginator): - s = ReportDoc.search() - s = s.exclude("term", is_draft=True) - s = s.exclude("exists", field="superseded_by_id") - s = s.filter("term", author_id=author_id) s = s.sort("-published") + s = s[paginator.slice_from : paginator.slice_to] return s.execute() diff --git a/tests/test_search.py b/tests/test_search.py index 27c7770..aadd37d 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -1,7 +1,7 @@ import pytest from openlobby.core.api.paginator import Paginator, encode_cursor -from openlobby.core.search import query_reports, reports_by_author +from openlobby.core.search import search_reports from .dummy import prepare_reports @@ -13,18 +13,18 @@ pytestmark = [pytest.mark.django_db, pytest.mark.usefixtures("django_es")] "query, expected_ids", [("", [3, 2, 1]), ("sauron", [3, 2]), ("towers", [2]), ("Aragorn Gandalf", [3, 1])], ) -def test_query_reports(query, expected_ids): +def test_search_reports(query, expected_ids): prepare_reports() paginator = Paginator() - response = query_reports(query, paginator) + response = search_reports(paginator, query=query) assert expected_ids == [int(r.meta.id) for r in response] -def test_query_reports__highlight(): +def test_search_reports__highlight(): prepare_reports() paginator = Paginator() query = "King" - response = query_reports(query, paginator, highlight=True) + response = search_reports(paginator, query=query, highlight=True) doc = response.hits[0] assert "<mark>King</mark>" in doc.meta.highlight.title[0] assert "<mark>King</mark>" in doc.meta.highlight.body[0] @@ -33,28 +33,28 @@ def test_query_reports__highlight(): @pytest.mark.parametrize( "first, after, expected_ids", [(2, None, [3, 2]), (2, encode_cursor(1), [2, 1])] ) -def test_query_reports__pagination(first, after, expected_ids): +def test_search_reports__pagination(first, after, expected_ids): prepare_reports() query = "" paginator = Paginator(first=first, after=after) - response = query_reports(query, paginator) + response = search_reports(paginator, query=query) assert expected_ids == [int(r.meta.id) for r in response] -def test_reports_by_author(): +def test_search_reports__by_author(): prepare_reports() author_id = 1 paginator = Paginator() - response = reports_by_author(author_id, paginator) + response = search_reports(paginator, author_id=author_id) assert [3, 1] == [int(r.meta.id) for r in response] @pytest.mark.parametrize( "first, after, expected_ids", [(1, None, [3]), (1, encode_cursor(1), [1])] ) -def test_reports_by_author__pagination(first, after, expected_ids): +def test_search_reports__by_author__pagination(first, after, expected_ids): prepare_reports() author_id = 1 paginator = Paginator(first=first, after=after) - response = reports_by_author(author_id, paginator) + response = search_reports(paginator, author_id=author_id) assert expected_ids == [int(r.meta.id) for r in response] -- GitLab