From 65dcc184b40f7983ec908f3bb31a0b7d05a459ad Mon Sep 17 00:00:00 2001 From: alallema Date: Tue, 5 Jul 2022 15:17:04 +0200 Subject: [PATCH 1/5] Add pagination parameters to get_document --- meilisearch/index.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/meilisearch/index.py b/meilisearch/index.py index 840618db..e7deb591 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -249,7 +249,7 @@ def search(self, query: str, opt_params: Optional[Dict[str, Any]] = None) -> Dic body=body ) - def get_document(self, document_id: str) -> Dict[str, Any]: + def get_document(self, document_id: str, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: """Get one document with given document identifier. Parameters @@ -267,8 +267,10 @@ def get_document(self, document_id: str) -> Dict[str, Any]: MeiliSearchApiError 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 """ + if parameters is None: + parameters = {} return self.http.get( - f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}/{document_id}' + f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}/{document_id}?{parse.urlencode(parameters)}' ) def get_documents(self, parameters: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]: From 8672f4d0dde86139c7ac7f5bbf74175033a97501 Mon Sep 17 00:00:00 2001 From: alallema Date: Tue, 5 Jul 2022 19:30:28 +0200 Subject: [PATCH 2/5] Add fields list and string in get_document parameters --- meilisearch/index.py | 8 ++++++-- meilisearch/task.py | 7 ++++--- tests/index/test_index_document_meilisearch.py | 8 ++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/meilisearch/index.py b/meilisearch/index.py index e7deb591..fa8d8b93 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -249,7 +249,7 @@ def search(self, query: str, opt_params: Optional[Dict[str, Any]] = None) -> Dic body=body ) - def get_document(self, document_id: str, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + def get_document(self, document_id: str, fields: Optional[List[str]] = None) -> Dict[str, Any]: """Get one document with given document identifier. Parameters @@ -267,8 +267,10 @@ def get_document(self, document_id: str, parameters: Optional[Dict[str, Any]] = MeiliSearchApiError 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 """ - if parameters is None: + if fields is None: parameters = {} + else: + parameters = {'fields': ",".join(fields)} return self.http.get( f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}/{document_id}?{parse.urlencode(parameters)}' ) @@ -293,6 +295,8 @@ def get_documents(self, parameters: Optional[Dict[str, Any]] = None) -> List[Dic """ if parameters is None: parameters = {} + elif 'fields' in parameters and isinstance(parameters, list): + parameters['fields'] = ",".join(parameters['fields']) return self.http.get( f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}?{parse.urlencode(parameters)}' ) diff --git a/meilisearch/task.py b/meilisearch/task.py index 91cc7c0a..2d304996 100644 --- a/meilisearch/task.py +++ b/meilisearch/task.py @@ -29,10 +29,11 @@ def get_tasks(config: Config, parameters: Optional[Dict[str, Any]] = None) -> Di 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 """ http = HttpRequests(config) - if parameters is None or parameters == {}: + if parameters is None: parameters = {} - elif 'indexUid' in parameters: - parameters['indexUid'] = ",".join(parameters['indexUid']) + for param in parameters: + if isinstance(parameters[param], list): + parameters[param] = ",".join(parameters[param]) return http.get( f"{config.paths.task}?{parse.urlencode(parameters)}" ) diff --git a/tests/index/test_index_document_meilisearch.py b/tests/index/test_index_document_meilisearch.py index 1852c7b2..f294f368 100644 --- a/tests/index/test_index_document_meilisearch.py +++ b/tests/index/test_index_document_meilisearch.py @@ -50,6 +50,14 @@ def test_get_document(index_with_documents): assert 'title' in response assert response['title'] == 'The Highwaymen' +def test_get_document_with_fields(index_with_documents): + """Tests getting one document from a populated index.""" + response = index_with_documents().get_document('500682', ['id', 'title']) + assert isinstance(response, dict) + assert 'title' in response + assert 'poster' not in response + assert response['title'] == 'The Highwaymen' + def test_get_document_inexistent(empty_index): """Tests getting one inexistent document from a populated index.""" with pytest.raises(Exception): From ad82f85c9ad37c91687d48d0c16f3462f41f9260 Mon Sep 17 00:00:00 2001 From: alallema Date: Tue, 5 Jul 2022 19:36:11 +0200 Subject: [PATCH 3/5] Fix test task --- tests/index/test_index_task_meilisearch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/index/test_index_task_meilisearch.py b/tests/index/test_index_task_meilisearch.py index 63a58169..96ba35f8 100644 --- a/tests/index/test_index_task_meilisearch.py +++ b/tests/index/test_index_task_meilisearch.py @@ -12,7 +12,7 @@ def test_get_tasks_default(index_with_documents): def test_get_tasks(empty_index, small_movies): """Tests getting the tasks list of a populated index.""" - index = empty_index() + index = empty_index("test_task") current_tasks = index.get_tasks() pre_count = len(current_tasks['results']) response = index.add_documents(small_movies) From f1cfc58a4530a049ef767888fba14e5fd970b211 Mon Sep 17 00:00:00 2001 From: alallema Date: Wed, 6 Jul 2022 14:41:04 +0200 Subject: [PATCH 4/5] Improve parameters for get_document method --- meilisearch/index.py | 10 +++++----- tests/index/test_index_document_meilisearch.py | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/meilisearch/index.py b/meilisearch/index.py index fa8d8b93..2cfb68e0 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -249,7 +249,7 @@ def search(self, query: str, opt_params: Optional[Dict[str, Any]] = None) -> Dic body=body ) - def get_document(self, document_id: str, fields: Optional[List[str]] = None) -> Dict[str, Any]: + def get_document(self, document_id: str, parameters: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: """Get one document with given document identifier. Parameters @@ -267,10 +267,10 @@ def get_document(self, document_id: str, fields: Optional[List[str]] = None) -> MeiliSearchApiError 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 """ - if fields is None: + if parameters is None: parameters = {} - else: - parameters = {'fields': ",".join(fields)} + elif 'fields' in parameters and isinstance(parameters['fields'], list): + parameters['fields'] = ",".join(parameters['fields']) return self.http.get( f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}/{document_id}?{parse.urlencode(parameters)}' ) @@ -295,7 +295,7 @@ def get_documents(self, parameters: Optional[Dict[str, Any]] = None) -> List[Dic """ if parameters is None: parameters = {} - elif 'fields' in parameters and isinstance(parameters, list): + elif 'fields' in parameters and isinstance(parameters['fields'], list): parameters['fields'] = ",".join(parameters['fields']) return self.http.get( f'{self.config.paths.index}/{self.uid}/{self.config.paths.document}?{parse.urlencode(parameters)}' diff --git a/tests/index/test_index_document_meilisearch.py b/tests/index/test_index_document_meilisearch.py index f294f368..68d8e9bd 100644 --- a/tests/index/test_index_document_meilisearch.py +++ b/tests/index/test_index_document_meilisearch.py @@ -52,7 +52,7 @@ def test_get_document(index_with_documents): def test_get_document_with_fields(index_with_documents): """Tests getting one document from a populated index.""" - response = index_with_documents().get_document('500682', ['id', 'title']) + response = index_with_documents().get_document('500682', {'fields' : ['id', 'title']}) assert isinstance(response, dict) assert 'title' in response assert 'poster' not in response @@ -81,6 +81,7 @@ def test_get_documents_offset_optional_params(index_with_documents): 'fields': 'title' }) assert len(response_offset_limit['results']) == 3 + assert 'title' in response_offset_limit['results'][0] assert response_offset_limit['results'][0]['title'] == response['results'][1]['title'] def test_update_documents(index_with_documents, small_movies): From ed982e2cc3c3d833e53afdf6a62af525638e78f2 Mon Sep 17 00:00:00 2001 From: alallema Date: Thu, 7 Jul 2022 09:56:12 +0200 Subject: [PATCH 5/5] Add parameters definition --- meilisearch/index.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meilisearch/index.py b/meilisearch/index.py index 2cfb68e0..30cfc2fe 100644 --- a/meilisearch/index.py +++ b/meilisearch/index.py @@ -256,6 +256,8 @@ def get_document(self, document_id: str, parameters: Optional[Dict[str, Any]] = ---------- document_id: Unique identifier of the document. + parameters (optional): + parameters accepted by the get document route: https://docs.meilisearch.com/reference/api/documents.html#get-one-document Returns -------