Skip to content

Commit f203bfb

Browse files
Support mapping payloads in transport error extraction
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 8c2c9a9 commit f203bfb

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

hyperbrowser/transport/error_utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
from numbers import Real
33
import re
4+
from collections.abc import Mapping
45
from typing import Any
56

67
import httpx
@@ -138,7 +139,7 @@ def _stringify_error_value(value: Any, *, _depth: int = 0) -> str:
138139
return _safe_to_string(value)
139140
if isinstance(value, str):
140141
return value
141-
if isinstance(value, dict):
142+
if isinstance(value, Mapping):
142143
for key in ("message", "error", "detail", "errors", "msg", "title", "reason"):
143144
try:
144145
nested_value = value.get(key)
@@ -195,7 +196,7 @@ def _fallback_message() -> str:
195196
return _fallback_message()
196197

197198
extracted_message: str
198-
if isinstance(error_data, dict):
199+
if isinstance(error_data, Mapping):
199200
for key in ("message", "error", "detail", "errors", "title", "reason"):
200201
try:
201202
message = error_data.get(key)

tests/test_transport_error_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import httpx
22
import pytest
3+
from types import MappingProxyType
34

45
from hyperbrowser.transport.error_utils import (
56
extract_error_message,
@@ -689,6 +690,15 @@ def test_extract_error_message_handles_unstringifiable_message_values():
689690
assert message == "<unstringifiable _UnstringifiableErrorValue>"
690691

691692

693+
def test_extract_error_message_supports_mapping_proxy_payloads():
694+
message = extract_error_message(
695+
_DummyResponse(MappingProxyType({"detail": "mapped detail"})),
696+
RuntimeError("fallback detail"),
697+
)
698+
699+
assert message == "mapped detail"
700+
701+
692702
def test_extract_error_message_handles_dict_get_failures():
693703
message = extract_error_message(
694704
_DummyResponse({"message": _BrokenGetErrorDict({"inner": object()})}),

0 commit comments

Comments
 (0)