Skip to content

Commit 3ded9a5

Browse files
bidoubiwaeskombro
authored andcommitted
Simple error handler
1 parent a816019 commit 3ded9a5

File tree

3 files changed

+60
-28
lines changed

3 files changed

+60
-28
lines changed

meilisearch/_httprequests.py

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import requests
2+
from meilisearch.meilisearch_api_error import MeiliSearchApiError
3+
from meilisearch.meilisearch_communication_error import MeiliSearchCommunicationError
24

35
class HttpRequests:
46

@@ -14,41 +16,52 @@ def __init__(self, config):
1416

1517

1618
def get(self, path):
17-
request = requests.get(
18-
self.config.url + '/' + path,
19-
headers=self.headers,
20-
)
21-
return self.__validate(request)
19+
try:
20+
request = requests.get(
21+
self.config.url + '/' + path,
22+
headers=self.headers,
23+
)
24+
return self.__validate(request)
25+
except requests.exceptions.ConnectionError as err:
26+
raise MeiliSearchCommunicationError(err) from None
2227

2328
def post(self, path, body=None):
2429
if body is None:
2530
body = {}
26-
request = requests.post(
27-
self.config.url + '/' + path,
28-
headers=self.headers,
29-
json=body
30-
)
31-
return self.__validate(request)
32-
31+
try:
32+
request = requests.post(
33+
self.config.url + '/' + path,
34+
headers=self.headers,
35+
json=body
36+
)
37+
return self.__validate(request)
38+
except requests.exceptions.ConnectionError as err:
39+
raise MeiliSearchCommunicationError(err) from None
3340
def put(self, path, body=None):
3441
if body is None:
3542
body = {}
36-
request = requests.put(
37-
self.config.url + '/' + path,
38-
headers=self.headers,
39-
json=body
40-
)
41-
return self.__validate(request)
43+
try:
44+
request = requests.put(
45+
self.config.url + '/' + path,
46+
headers=self.headers,
47+
json=body
48+
)
49+
return self.__validate(request)
50+
except requests.exceptions.ConnectionError as err:
51+
raise MeiliSearchCommunicationError(err) from None
4252

4353
def delete(self, path, body=None):
4454
if body is None:
4555
body = {}
46-
request = requests.delete(
47-
self.config.url + '/' + path,
48-
headers=self.headers,
49-
json=body
50-
)
51-
return self.__validate(request)
56+
try:
57+
request = requests.delete(
58+
self.config.url + '/' + path,
59+
headers=self.headers,
60+
json=body
61+
)
62+
return self.__validate(request)
63+
except requests.exceptions.ConnectionError as err:
64+
raise MeiliSearchCommunicationError(err) from None
5265

5366
@staticmethod
5467
def __to_json(request):
@@ -61,7 +74,5 @@ def __validate(request):
6174
try:
6275
request.raise_for_status()
6376
return HttpRequests.__to_json(request)
64-
except requests.exceptions.HTTPError as err:
65-
raise Exception(err)
66-
except requests.exceptions.ConnectionError as err:
67-
raise Exception(err)
77+
except requests.exceptions.HTTPError:
78+
raise MeiliSearchApiError(request.status_code, request.text) from None

meilisearch/meilisearch_api_error.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import json
2+
3+
class MeiliSearchApiError(Exception):
4+
"""Error from MeiliSearch API"""
5+
def __init__(self, status_code, text):
6+
self.status_code = status_code
7+
try:
8+
self.message = json.loads(text)["message"]
9+
except:
10+
self.message = None
11+
super().__init__(self.message)
12+
13+
def __str__(self):
14+
if self.message is not None:
15+
message = f'-> {self.message}'
16+
return f'HTTP status: {self.status_code} {message}'
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class MeiliSearchCommunicationError(Exception):
2+
"""Error when communicating with MeiliSearch"""
3+
def __init__(self, message):
4+
self.message = message
5+
super().__init__(self.message)

0 commit comments

Comments
 (0)