@@ -43,6 +43,7 @@ def __check_health(self, retries=3, delay=5):
43
43
return True
44
44
except requests .exceptions .ConnectionError :
45
45
print (f"Connection not available. Attempt { str (i + 1 )} out of { str (retries )} " )
46
+ time .sleep (delay )
46
47
47
48
raise ConnectionUnavailableError (
48
49
message = 'Specified server unavailable'
@@ -64,28 +65,25 @@ def get(self, endpoint, params=None):
64
65
except requests .exceptions .HTTPError as e :
65
66
if e .response .status_code == 404 :
66
67
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
70
70
) from None
71
71
else :
72
72
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
76
75
) from None
77
76
except (requests .ConnectionError , requests .Timeout ) as e :
78
77
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
82
80
) from None
83
81
try :
84
82
return {
85
83
"data" : response .json (),
86
84
"status" : response .status_code
87
85
}
88
- except json . decoder . JSONDecodeError :
86
+ except ValueError :
89
87
return {
90
88
"status" : response .status_code
91
89
}
@@ -108,21 +106,18 @@ def post(self, endpoint, body=None, params=None):
108
106
except requests .exceptions .HTTPError as e :
109
107
if e .response .status_code == 400 :
110
108
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
114
111
) from None
115
112
elif e .response .status_code == 401 :
116
113
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
120
116
) from None
121
117
else :
122
118
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
126
121
) from None
127
122
except (requests .ConnectionError , requests .Timeout ) as e :
128
123
raise ConnectionUnavailableError (e ) from None
@@ -131,7 +126,7 @@ def post(self, endpoint, body=None, params=None):
131
126
"data" : response .json (),
132
127
"status" : response .status_code
133
128
}
134
- except json . decoder . JSONDecodeError :
129
+ except ValueError :
135
130
return {
136
131
"status" : response .status_code
137
132
}
@@ -154,21 +149,18 @@ def put(self, endpoint, body=None, params=None):
154
149
except requests .exceptions .HTTPError as e :
155
150
if e .response .status_code == 400 :
156
151
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
160
154
) from None
161
155
elif e .response .status_code == 401 :
162
156
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
166
159
) from None
167
160
else :
168
161
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
172
164
) from None
173
165
except (requests .ConnectionError , requests .Timeout ) as e :
174
166
raise ConnectionUnavailableError (e ) from None
@@ -177,7 +169,7 @@ def put(self, endpoint, body=None, params=None):
177
169
"data" : response .json (),
178
170
"status" : response .status_code
179
171
}
180
- except json . decoder . JSONDecodeError :
172
+ except ValueError :
181
173
return {
182
174
"status" : response .status_code
183
175
}
@@ -198,21 +190,18 @@ def delete(self, endpoint, params=None):
198
190
except requests .exceptions .HTTPError as e :
199
191
if e .response .status_code == 401 :
200
192
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
204
195
) from None
205
196
elif e .response .status_code == 404 :
206
197
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
210
200
) from None
211
201
else :
212
202
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
216
205
) from None
217
206
except (requests .ConnectionError , requests .Timeout ) as e :
218
207
raise ConnectionUnavailableError (e ) from None
@@ -221,7 +210,7 @@ def delete(self, endpoint, params=None):
221
210
"data" : response .json (),
222
211
"status" : response .status_code
223
212
}
224
- except json . decoder . JSONDecodeError :
213
+ except ValueError :
225
214
return {
226
215
"status" : response .status_code
227
216
}
@@ -239,3 +228,15 @@ def is_json(input_object):
239
228
return True
240
229
except ValueError :
241
230
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