Skip to content

Commit 4afda9d

Browse files
bors[bot]sanders41
andauthored
Merge #306
306: Fixing __str__ issues with MeiliSearchApiError r=alallema a=sanders41 Fixes #305 It may be possible to come up with a better error to return if we get more info on how to recreate the issue, but this should at least prevent the converting to string error and also keep other errors from happening in similar situations. Co-authored-by: Paul Sanders <[email protected]>
2 parents e8357a4 + d45a930 commit 4afda9d

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

meilisearch/errors.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,23 @@ class MeiliSearchApiError(MeiliSearchError):
1717

1818
def __init__(self, error: str, request: Response) -> None:
1919
self.status_code = request.status_code
20+
self.error_code = None
21+
self.error_link = None
22+
2023
if request.text:
21-
self.message = f'{json.loads(request.text)["message"]}'
22-
self.error_code = f'{json.loads(request.text)["errorCode"]}'
23-
self.error_link = f'{json.loads(request.text)["errorLink"]}'
24+
json_data = json.loads(request.text)
25+
self.message = json_data.get('message')
26+
self.error_code = json_data.get('errorCode')
27+
self.error_link = json_data.get('errorLink')
2428
else:
2529
self.message = error
2630
super().__init__(self.message)
2731

2832
def __str__(self) -> str:
29-
return f'MeiliSearchApiError. Error code: {self.error_code}. Error message: {self.message}. Error documentation: {self.error_link}'
33+
if self.error_code and self.error_link:
34+
return f'MeiliSearchApiError. Error code: {self.error_code}. Error message: {self.message}. Error documentation: {self.error_link}'
35+
36+
return f'MeiliSearchApiError. {self.message}'
3037

3138
class MeiliSearchCommunicationError(MeiliSearchError):
3239
"""Error when connecting to MeiliSearch"""

meilisearch/tests/errors/test_api_error_meilisearch.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# pylint: disable=invalid-name
22

3+
from unittest.mock import patch
34
import pytest
5+
import requests
46
import meilisearch
57
from meilisearch.errors import MeiliSearchApiError
68
from meilisearch.tests import BASE_URL, MASTER_KEY
@@ -14,3 +16,15 @@ def test_meilisearch_api_error_wrong_master_key():
1416
client = meilisearch.Client(BASE_URL, MASTER_KEY + '123')
1517
with pytest.raises(MeiliSearchApiError):
1618
client.create_index("some_index")
19+
20+
@patch('requests.post')
21+
def test_meilisearch_api_error_no_error_code(mock_post):
22+
"""Here to test for regressions related to https://github.com/meilisearch/meilisearch-python/issues/305."""
23+
24+
mock_response = requests.models.Response()
25+
mock_response.status_code = 408
26+
mock_post.return_value = mock_response
27+
28+
with pytest.raises(MeiliSearchApiError):
29+
client = meilisearch.Client(BASE_URL, MASTER_KEY + '123')
30+
client.create_index('some_index')

0 commit comments

Comments
 (0)