Skip to content

Commit 451449d

Browse files
committed
Improve error handling - show custom details
1 parent 93971bd commit 451449d

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

mergin/client.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,20 @@ def _do_request(self, request):
210210
except urllib.error.HTTPError as e:
211211
server_response = json.load(e)
212212

213-
# We first to try to get the value from the response otherwise we set a default value
214-
err_detail = server_response.get("detail", e.read().decode("utf-8"))
215213
server_code = server_response.get("code", None)
214+
# Try to get error detail
215+
if isinstance(server_response, dict):
216+
if "detail" in server_response:
217+
err_detail = server_response["detail"]
218+
else:
219+
# Extract all field-specific errors and format them
220+
err_detail = "\n".join(
221+
f"{key}: {', '.join(map(str, value))}"
222+
for key, value in server_response.items()
223+
if isinstance(value, list)
224+
) or str(server_response) # Fallback to raw response if structure is unexpected
225+
else:
226+
err_detail = str(server_response)
216227

217228
raise ClientError(
218229
detail=err_detail,

mergin/test/test_client.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2746,11 +2746,16 @@ def test_workspace_requests(mc2: MerginClient):
27462746

27472747

27482748
def test_access_management(mc: MerginClient, mc2: MerginClient):
2749-
# create a user in the workspace
2749+
# create a user in the workspace -
27502750
workspace_id = next((w["id"] for w in mc.workspaces_list() if w["name"] == mc.username()))
2751+
ws_role = WorkspaceRole.WRITER
27512752
email = "create_user" + str(random.randint(1000, 9999)) + "@client.py"
2753+
# returning meaningful error when requirements are not met
2754+
password = "1234"
2755+
with pytest.raises(ClientError, match=f"Passwords must be at least 8 characters long."):
2756+
mc.create_user(email, password, workspace_id, ws_role)
2757+
# strong password
27522758
password = "Il0vemergin"
2753-
ws_role = WorkspaceRole.WRITER
27542759
user_info = mc.create_user(email, password, workspace_id, ws_role)
27552760
assert user_info["email"] == email
27562761
assert user_info["receive_notifications"] is False

0 commit comments

Comments
 (0)