Skip to content

Commit e677b44

Browse files
authored
Merge pull request #492 from meilisearch/documents_changes
Add pagination parameters to the `get_document()` method
2 parents e390899 + ed982e2 commit e677b44

File tree

4 files changed

+24
-6
lines changed

4 files changed

+24
-6
lines changed

meilisearch/index.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,13 +249,15 @@ def search(self, query: str, opt_params: Optional[Dict[str, Any]] = None) -> Dic
249249
body=body
250250
)
251251

252-
def get_document(self, document_id: str) -> Dict[str, Any]:
252+
def get_document(self, document_id: str, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, Any]:
253253
"""Get one document with given document identifier.
254254
255255
Parameters
256256
----------
257257
document_id:
258258
Unique identifier of the document.
259+
parameters (optional):
260+
parameters accepted by the get document route: https://docs.meilisearch.com/reference/api/documents.html#get-one-document
259261
260262
Returns
261263
-------
@@ -267,8 +269,12 @@ def get_document(self, document_id: str) -> Dict[str, Any]:
267269
MeiliSearchApiError
268270
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://docs.meilisearch.com/errors/#meilisearch-errors
269271
"""
272+
if parameters is None:
273+
parameters = {}
274+
elif 'fields' in parameters and isinstance(parameters['fields'], list):
275+
parameters['fields'] = ",".join(parameters['fields'])
270276
return self.http.get(
271-
f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}/{document_id}'
277+
f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}/{document_id}?{parse.urlencode(parameters)}'
272278
)
273279

274280
def get_documents(self, parameters: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]:
@@ -291,6 +297,8 @@ def get_documents(self, parameters: Optional[Dict[str, Any]] = None) -> List[Dic
291297
"""
292298
if parameters is None:
293299
parameters = {}
300+
elif 'fields' in parameters and isinstance(parameters['fields'], list):
301+
parameters['fields'] = ",".join(parameters['fields'])
294302
return self.http.get(
295303
f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}?{parse.urlencode(parameters)}'
296304
)

meilisearch/task.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ def get_tasks(config: Config, parameters: Optional[Dict[str, Any]] = None) -> Di
2929
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://docs.meilisearch.com/errors/#meilisearch-errors
3030
"""
3131
http = HttpRequests(config)
32-
if parameters is None or parameters == {}:
32+
if parameters is None:
3333
parameters = {}
34-
elif 'indexUid' in parameters:
35-
parameters['indexUid'] = ",".join(parameters['indexUid'])
34+
for param in parameters:
35+
if isinstance(parameters[param], list):
36+
parameters[param] = ",".join(parameters[param])
3637
return http.get(
3738
f"{config.paths.task}?{parse.urlencode(parameters)}"
3839
)

tests/index/test_index_document_meilisearch.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ def test_get_document(index_with_documents):
5050
assert 'title' in response
5151
assert response['title'] == 'The Highwaymen'
5252

53+
def test_get_document_with_fields(index_with_documents):
54+
"""Tests getting one document from a populated index."""
55+
response = index_with_documents().get_document('500682', {'fields' : ['id', 'title']})
56+
assert isinstance(response, dict)
57+
assert 'title' in response
58+
assert 'poster' not in response
59+
assert response['title'] == 'The Highwaymen'
60+
5361
def test_get_document_inexistent(empty_index):
5462
"""Tests getting one inexistent document from a populated index."""
5563
with pytest.raises(Exception):
@@ -73,6 +81,7 @@ def test_get_documents_offset_optional_params(index_with_documents):
7381
'fields': 'title'
7482
})
7583
assert len(response_offset_limit['results']) == 3
84+
assert 'title' in response_offset_limit['results'][0]
7685
assert response_offset_limit['results'][0]['title'] == response['results'][1]['title']
7786

7887
def test_update_documents(index_with_documents, small_movies):

tests/index/test_index_task_meilisearch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def test_get_tasks_default(index_with_documents):
1212

1313
def test_get_tasks(empty_index, small_movies):
1414
"""Tests getting the tasks list of a populated index."""
15-
index = empty_index()
15+
index = empty_index("test_task")
1616
current_tasks = index.get_tasks()
1717
pre_count = len(current_tasks['results'])
1818
response = index.add_documents(small_movies)

0 commit comments

Comments
 (0)