From d1405138a28a661c7b3c00083272810ec325cb44 Mon Sep 17 00:00:00 2001 From: Martin Kersner Date: Sat, 4 Jul 2026 15:20:45 +0900 Subject: [PATCH] fix: error-handling hygiene (#156) - err.get("error", text) fallback, avoid KeyError masking real HTTP error - raise ... from None for JSONDecodeError chain - narrow bare except to ParameterRequiredError - ClientError/ServerError call super().__init__ so str(err) informative --- datamaxi/_dispatch.py | 4 ++-- datamaxi/error.py | 2 ++ datamaxi/lib/utils.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/datamaxi/_dispatch.py b/datamaxi/_dispatch.py index f43c2eb..b3b39cb 100644 --- a/datamaxi/_dispatch.py +++ b/datamaxi/_dispatch.py @@ -71,11 +71,11 @@ def raise_for_error(status_code, text, headers): try: err = json.loads(text) except JSONDecodeError: - raise ClientError(status_code, text, None, headers) + raise ClientError(status_code, text, None, headers) from None error_data = None if "data" in err: error_data = err["data"] - raise ClientError(status_code, err["error"], headers, error_data) + raise ClientError(status_code, err.get("error", text), headers, error_data) raise ServerError(status_code, text) diff --git a/datamaxi/error.py b/datamaxi/error.py index 357fefa..71e38ce 100644 --- a/datamaxi/error.py +++ b/datamaxi/error.py @@ -12,12 +12,14 @@ def __init__(self, status_code, error_message, header, error_data=None): self.header = header # return data if it's returned from server self.error_data = error_data + super().__init__(f"{status_code}: {error_message}") class ServerError(Error): def __init__(self, status_code, message): self.status_code = status_code self.message = message + super().__init__(f"{status_code}: {message}") class ParameterRequiredError(Error): diff --git a/datamaxi/lib/utils.py b/datamaxi/lib/utils.py index 3e71ffe..d51fd84 100644 --- a/datamaxi/lib/utils.py +++ b/datamaxi/lib/utils.py @@ -45,7 +45,7 @@ def check_at_least_one_set_parameters(params): check_required_parameter(p[0], p[1]) at_least_one_set = True break - except: # noqa: E722 + except ParameterRequiredError: pass if not at_least_one_set: