Skip to content

Commit cdefe70

Browse files
Fallback on blank extracted transport error messages
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 5a22201 commit cdefe70

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

hyperbrowser/transport/error_utils.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,29 @@ def _stringify_error_value(value: Any, *, _depth: int = 0) -> str:
3535

3636

3737
def extract_error_message(response: httpx.Response, fallback_error: Exception) -> str:
38+
def _fallback_message() -> str:
39+
return response.text or str(fallback_error)
40+
3841
try:
3942
error_data: Any = response.json()
4043
except Exception:
41-
return response.text or str(fallback_error)
44+
return _fallback_message()
4245

46+
extracted_message: str
4347
if isinstance(error_data, dict):
4448
for key in ("message", "error", "detail"):
4549
message = error_data.get(key)
4650
if message is not None:
47-
return _stringify_error_value(message)
48-
return _stringify_error_value(error_data)
49-
if isinstance(error_data, str):
50-
return error_data
51-
return _stringify_error_value(error_data)
51+
extracted_message = _stringify_error_value(message)
52+
break
53+
else:
54+
extracted_message = _stringify_error_value(error_data)
55+
elif isinstance(error_data, str):
56+
extracted_message = error_data
57+
else:
58+
extracted_message = _stringify_error_value(error_data)
59+
60+
return extracted_message if extracted_message.strip() else _fallback_message()
5261

5362

5463
def extract_request_error_context(error: httpx.RequestError) -> tuple[str, str]:

tests/test_transport_error_utils.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,20 @@ def test_extract_error_message_handles_recursive_dict_payloads():
134134

135135
assert isinstance(message, str)
136136
assert message
137+
138+
139+
def test_extract_error_message_uses_fallback_for_blank_dict_message():
140+
message = extract_error_message(
141+
_DummyResponse({"message": " "}), RuntimeError("fallback detail")
142+
)
143+
144+
assert message == "fallback detail"
145+
146+
147+
def test_extract_error_message_uses_response_text_for_blank_string_payload():
148+
message = extract_error_message(
149+
_DummyResponse(" ", text="raw error body"),
150+
RuntimeError("fallback detail"),
151+
)
152+
153+
assert message == "raw error body"

0 commit comments

Comments
 (0)