Skip to content

Commit 81070d0

Browse files
committed
✨(backend) adapt to Find new search pagination
Signed-off-by: Fabre Florian <[email protected]>
1 parent 3652732 commit 81070d0

File tree

4 files changed

+49
-12
lines changed

4 files changed

+49
-12
lines changed

src/backend/core/api/viewsets.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,8 +1105,6 @@ def _search_fulltext(self, indexer, request, params):
11051105
text=text,
11061106
token=access_token,
11071107
visited=get_visited_document_ids_of(queryset, user),
1108-
page=1,
1109-
page_size=100,
11101108
)
11111109

11121110
docs_by_uuid = {str(d.pk): d for d in queryset.filter(pk__in=results)}

src/backend/core/services/search_indexers.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ def __init__(self):
110110
self.indexer_url = settings.SEARCH_INDEXER_URL
111111
self.indexer_secret = settings.SEARCH_INDEXER_SECRET
112112
self.search_url = settings.SEARCH_INDEXER_QUERY_URL
113+
self.search_limit = settings.SEARCH_INDEXER_QUERY_LIMIT
113114

114115
if not self.indexer_url:
115116
raise ImproperlyConfigured(
@@ -184,7 +185,7 @@ def push(self, data):
184185
"""
185186

186187
# pylint: disable-next=too-many-arguments,too-many-positional-arguments
187-
def search(self, text, token, visited=(), page=1, page_size=50):
188+
def search(self, text, token, visited=(), nb_results=None):
188189
"""
189190
Search for documents in Find app.
190191
Ensure the same default ordering as "Docs" list : -updated_at
@@ -197,20 +198,17 @@ def search(self, text, token, visited=(), page=1, page_size=50):
197198
visited (list, optional):
198199
List of ids of active public documents with LinkTrace
199200
Defaults to settings.SEARCH_INDEXER_BATCH_SIZE.
200-
page (int, optional):
201-
The page number to retrieve.
202-
Defaults to 1 if not specified.
203-
page_size (int, optional):
204-
The number of results to return per page.
201+
nb_results (int, optional):
202+
The number of results to return.
205203
Defaults to 50 if not specified.
206204
"""
205+
nb_results = nb_results or self.search_limit
207206
response = self.search_query(
208207
data={
209208
"q": text,
210209
"visited": visited,
211210
"services": ["docs"],
212-
"page_number": page,
213-
"page_size": page_size,
211+
"nb_results": nb_results,
214212
"order_by": "updated_at",
215213
"order_direction": "desc",
216214
},

src/backend/core/tests/test_services_search_indexers.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,10 +588,48 @@ def test_services_search_indexers_search(mock_post, indexer_settings):
588588
assert query_data["q"] == "alpha"
589589
assert sorted(query_data["visited"]) == sorted([str(doc1.pk), str(doc2.pk)])
590590
assert query_data["services"] == ["docs"]
591-
assert query_data["page_number"] == 1
592-
assert query_data["page_size"] == 50
591+
assert query_data["nb_results"] == 50
593592
assert query_data["order_by"] == "updated_at"
594593
assert query_data["order_direction"] == "desc"
595594

596595
assert kwargs.get("headers") == {"Authorization": "Bearer mytoken"}
597596
assert kwargs.get("timeout") == 10
597+
598+
599+
@patch("requests.post")
600+
def test_services_search_indexers_search_nb_results(mock_post, indexer_settings):
601+
"""
602+
Find API call should have nb_results == SEARCH_INDEXER_QUERY_LIMIT
603+
or the given nb_results argument.
604+
"""
605+
indexer_settings.SEARCH_INDEXER_QUERY_LIMIT = 25
606+
607+
user = factories.UserFactory()
608+
indexer = SearchIndexer()
609+
610+
mock_response = mock_post.return_value
611+
mock_response.raise_for_status.return_value = None # No error
612+
613+
doc1, doc2, _ = factories.DocumentFactory.create_batch(3)
614+
615+
create_link = partial(models.LinkTrace.objects.create, user=user, is_masked=False)
616+
617+
create_link(document=doc1)
618+
create_link(document=doc2)
619+
620+
visited = get_visited_document_ids_of(models.Document.objects.all(), user)
621+
622+
indexer.search("alpha", visited=visited, token="mytoken")
623+
624+
args, kwargs = mock_post.call_args
625+
626+
assert args[0] == indexer_settings.SEARCH_INDEXER_QUERY_URL
627+
assert kwargs.get("json")["nb_results"] == 25
628+
629+
# The argument overrides the setting value
630+
indexer.search("alpha", visited=visited, token="mytoken", nb_results=109)
631+
632+
args, kwargs = mock_post.call_args
633+
634+
assert args[0] == indexer_settings.SEARCH_INDEXER_QUERY_URL
635+
assert kwargs.get("json")["nb_results"] == 109

src/backend/impress/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ class Base(Configuration):
120120
SEARCH_INDEXER_QUERY_URL = values.Value(
121121
default=None, environ_name="SEARCH_INDEXER_QUERY_URL", environ_prefix=None
122122
)
123+
SEARCH_INDEXER_QUERY_LIMIT = values.PositiveIntegerValue(
124+
default=50, environ_name="SEARCH_INDEXER_QUERY_LIMIT", environ_prefix=None
125+
)
123126

124127
# Static files (CSS, JavaScript, Images)
125128
STATIC_URL = "/static/"

0 commit comments

Comments
 (0)