Skip to content

Commit e1dfcc0

Browse files
committed
fix handling of error messages
1 parent cc5e9d5 commit e1dfcc0

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

mergin/client.py

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -228,25 +228,23 @@ def _do_request(self, request):
228228
try:
229229
return self.opener.open(request)
230230
except urllib.error.HTTPError as e:
231-
server_response = json.load(e)
232-
233-
err_detail = None
234-
server_code = None
235-
# Try to get error detail
236-
if isinstance(server_response, dict):
237-
server_code = server_response.get("code")
238-
err_detail = server_response.get("detail")
239-
if not err_detail:
240-
# Extract all field-specific errors and format them
241-
err_detail = "\n".join(
242-
f"{key}: {', '.join(map(str, value))}"
243-
for key, value in server_response.items()
244-
if isinstance(value, list)
245-
) or str(
246-
server_response
247-
) # Fallback to raw response if structure is unexpected
248-
else:
249-
err_detail = str(server_response)
231+
232+
server_code = e.code
233+
err_detail = "Unknown error"
234+
server_response = None
235+
236+
if e.fp:
237+
server_response = e.fp.read().decode("utf-8")
238+
if (
239+
e.headers.get("Content-Type", "") == "application/problem+json"
240+
or e.headers.get("Content-Type", "") == "application/json"
241+
):
242+
json_response = json.loads(server_response)
243+
err_detail = json_response.get("detail", None) # `detail` should be present in MM server response
244+
if err_detail is None:
245+
err_detail = server_response
246+
else:
247+
err_detail = server_response
250248

251249
raise ClientError(
252250
detail=err_detail,
@@ -256,6 +254,7 @@ def _do_request(self, request):
256254
http_error=e.code,
257255
http_method=request.get_method(),
258256
)
257+
259258
except urllib.error.URLError as e:
260259
# e.g. when DNS resolution fails (no internet connection?)
261260
raise ClientError("Error requesting " + request.full_url + ": " + str(e))

0 commit comments

Comments
 (0)