@@ -43,6 +43,7 @@ def __check_health(self, retries=3, delay=5):
4343 return True
4444 except requests .exceptions .ConnectionError :
4545 print (f"Connection not available. Attempt { str (i + 1 )} out of { str (retries )} " )
46+ time .sleep (delay )
4647
4748 raise ConnectionUnavailableError (
4849 message = 'Specified server unavailable'
@@ -64,28 +65,25 @@ def get(self, endpoint, params=None):
6465 except requests .exceptions .HTTPError as e :
6566 if e .response .status_code == 404 :
6667 raise NotFoundError (
67- message = 'Resource not found' ,
68- status = e .response .status_code ,
69- payload = e .response
68+ message = self .parse_response_message (e .response ),
69+ status = e .response .status_code
7070 ) from None
7171 else :
7272 raise HttpError (
73- message = 'An HTTP error occurred' ,
74- status = e .response .status_code ,
75- payload = e .response
73+ message = self .parse_response_message (e .response ),
74+ status = e .response .status_code
7675 ) from None
7776 except (requests .ConnectionError , requests .Timeout ) as e :
7877 raise ConnectionUnavailableError (
79- message = "Connection Unavailable" ,
80- status = e .response .status_code ,
81- payload = response
78+ message = self .parse_response_message (e .response ),
79+ status = e .response .status_code
8280 ) from None
8381 try :
8482 return {
8583 "data" : response .json (),
8684 "status" : response .status_code
8785 }
88- except json . decoder . JSONDecodeError :
86+ except ValueError :
8987 return {
9088 "status" : response .status_code
9189 }
@@ -108,21 +106,18 @@ def post(self, endpoint, body=None, params=None):
108106 except requests .exceptions .HTTPError as e :
109107 if e .response .status_code == 400 :
110108 raise InvalidJsonError (
111- message = 'Invalid JSON payload' ,
112- status = e .response .status_code ,
113- payload = e .response
109+ message = self .parse_response_message (e .response ),
110+ status = e .response .status_code
114111 ) from None
115112 elif e .response .status_code == 401 :
116113 raise UnauthorizedError (
117- message = 'The user is not authorized to make this request' ,
118- status = e .response .status_code ,
119- payload = e .response
114+ message = self .parse_response_message (e .response ),
115+ status = e .response .status_code
120116 ) from None
121117 else :
122118 raise HttpError (
123- message = 'An HTTP error occurred' ,
124- status = e .response .status_code ,
125- payload = e .response
119+ message = self .parse_response_message (e .response ),
120+ status = e .response .status_code
126121 ) from None
127122 except (requests .ConnectionError , requests .Timeout ) as e :
128123 raise ConnectionUnavailableError (e ) from None
@@ -131,7 +126,7 @@ def post(self, endpoint, body=None, params=None):
131126 "data" : response .json (),
132127 "status" : response .status_code
133128 }
134- except json . decoder . JSONDecodeError :
129+ except ValueError :
135130 return {
136131 "status" : response .status_code
137132 }
@@ -154,21 +149,18 @@ def put(self, endpoint, body=None, params=None):
154149 except requests .exceptions .HTTPError as e :
155150 if e .response .status_code == 400 :
156151 raise InvalidJsonError (
157- message = 'Invalid JSON payload' ,
158- status = e .response .status_code ,
159- payload = e .response
152+ message = self .parse_response_message (e .response ),
153+ status = e .response .status_code
160154 ) from None
161155 elif e .response .status_code == 401 :
162156 raise UnauthorizedError (
163- message = 'The user is not authorized to make this request' ,
164- status = e .response .status_code ,
165- payload = e .response
157+ message = self .parse_response_message (e .response ),
158+ status = e .response .status_code
166159 ) from None
167160 else :
168161 raise HttpError (
169- message = 'An HTTP error occurred' ,
170- status = e .response .status_code ,
171- payload = e .response
162+ message = self .parse_response_message (e .response ),
163+ status = e .response .status_code
172164 ) from None
173165 except (requests .ConnectionError , requests .Timeout ) as e :
174166 raise ConnectionUnavailableError (e ) from None
@@ -177,7 +169,7 @@ def put(self, endpoint, body=None, params=None):
177169 "data" : response .json (),
178170 "status" : response .status_code
179171 }
180- except json . decoder . JSONDecodeError :
172+ except ValueError :
181173 return {
182174 "status" : response .status_code
183175 }
@@ -198,21 +190,18 @@ def delete(self, endpoint, params=None):
198190 except requests .exceptions .HTTPError as e :
199191 if e .response .status_code == 401 :
200192 raise UnauthorizedError (
201- message = 'The user is not authorized to make this request' ,
202- status = e .response .status_code ,
203- payload = e .response
193+ message = self .parse_response_message (e .response ),
194+ status = e .response .status_code
204195 ) from None
205196 elif e .response .status_code == 404 :
206197 raise NotFoundError (
207- message = 'Resource not found' ,
208- status = e .response .status_code ,
209- payload = e .response
198+ message = self .parse_response_message (e .response ),
199+ status = e .response .status_code
210200 ) from None
211201 else :
212202 raise HttpError (
213- message = 'An HTTP error occurred' ,
214- status = e .response .status_code ,
215- payload = e .response
203+ message = self .parse_response_message (e .response ),
204+ status = e .response .status_code
216205 ) from None
217206 except (requests .ConnectionError , requests .Timeout ) as e :
218207 raise ConnectionUnavailableError (e ) from None
@@ -221,7 +210,7 @@ def delete(self, endpoint, params=None):
221210 "data" : response .json (),
222211 "status" : response .status_code
223212 }
224- except json . decoder . JSONDecodeError :
213+ except ValueError :
225214 return {
226215 "status" : response .status_code
227216 }
@@ -239,3 +228,15 @@ def is_json(input_object):
239228 return True
240229 except ValueError :
241230 return False
231+
232+ @staticmethod
233+ def parse_response_message (response ):
234+ """Method to determine the message body from a response object. Will return None if message cannot be parsed.
235+
236+ :param response: the Requests response object
237+ :returns: the response message if parsable, otherwise None
238+ """
239+ try :
240+ return json .loads (response .text )['message' ]
241+ except (ValueError , KeyError ):
242+ return None
0 commit comments