From f9b8cdfae5a51e98ce0ff683c580a7c7ddec91ca Mon Sep 17 00:00:00 2001 From: Hyrudotcom <57811253+Hyrudotcom@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:21:10 +0200 Subject: [PATCH] Improve API error messages --- hyperliquid/utils/error.py | 5 +++++ tests/error_test.py | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/error_test.py diff --git a/hyperliquid/utils/error.py b/hyperliquid/utils/error.py index 9c818efb..3b4f13aa 100644 --- a/hyperliquid/utils/error.py +++ b/hyperliquid/utils/error.py @@ -4,6 +4,10 @@ class Error(Exception): class ClientError(Error): def __init__(self, status_code, error_code, error_message, header, error_data=None): + if error_code is None: + super().__init__(f"({status_code}) {error_message}") + else: + super().__init__(f"({status_code}, {error_code}) {error_message}") self.status_code = status_code self.error_code = error_code self.error_message = error_message @@ -13,5 +17,6 @@ def __init__(self, status_code, error_code, error_message, header, error_data=No class ServerError(Error): def __init__(self, status_code, message): + super().__init__(f"({status_code}) {message}") self.status_code = status_code self.message = message diff --git a/tests/error_test.py b/tests/error_test.py new file mode 100644 index 00000000..48f2edd4 --- /dev/null +++ b/tests/error_test.py @@ -0,0 +1,27 @@ +from hyperliquid.utils.error import ClientError, ServerError + + +def test_client_error_string_includes_api_message(): + error = ClientError(400, "BadRequest", "invalid order", {"x-request-id": "abc"}, {"field": "coin"}) + + assert str(error) == "(400, BadRequest) invalid order" + assert error.status_code == 400 + assert error.error_code == "BadRequest" + assert error.error_message == "invalid order" + assert error.header == {"x-request-id": "abc"} + assert error.error_data == {"field": "coin"} + + +def test_client_error_string_handles_missing_error_code(): + error = ClientError(429, None, "rate limited", {}) + + assert str(error) == "(429) rate limited" + assert error.error_code is None + + +def test_server_error_string_includes_status_code_and_message(): + error = ServerError(503, "temporarily unavailable") + + assert str(error) == "(503) temporarily unavailable" + assert error.status_code == 503 + assert error.message == "temporarily unavailable"