Skip to content

Commit 44141f5

Browse files
Require concrete transport model-name render outputs
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 99ce252 commit 44141f5

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

hyperbrowser/transport/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def _sanitize_display_text(value: str, *, max_length: int) -> str:
1818
"?" if ord(character) < 32 or ord(character) == 127 else character
1919
for character in value
2020
).strip()
21-
if not isinstance(sanitized_value, str):
21+
if type(sanitized_value) is not str:
2222
return ""
2323
if not sanitized_value:
2424
return ""
@@ -37,7 +37,7 @@ def _safe_model_name(model: object) -> str:
3737
model_name = getattr(model, "__name__", "response model")
3838
except Exception:
3939
return "response model"
40-
if not isinstance(model_name, str):
40+
if type(model_name) is not str:
4141
return "response model"
4242
try:
4343
normalized_model_name = _sanitize_display_text(

tests/test_transport_base.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,17 @@ def __call__(self, **kwargs):
114114
raise RuntimeError("call failed")
115115

116116

117+
class _StringSubclassModelNameCallableModel:
118+
class _ModelName(str):
119+
pass
120+
121+
__name__ = _ModelName("SubclassModelName")
122+
123+
def __call__(self, **kwargs):
124+
_ = kwargs
125+
raise RuntimeError("call failed")
126+
127+
117128
class _BrokenRenderedMappingKey(str):
118129
def __iter__(self):
119130
raise RuntimeError("cannot iterate rendered mapping key")
@@ -250,6 +261,17 @@ def test_api_response_from_json_falls_back_for_unreadable_model_name_text() -> N
250261
)
251262

252263

264+
def test_api_response_from_json_falls_back_for_string_subclass_model_names() -> None:
265+
with pytest.raises(
266+
HyperbrowserError,
267+
match="Failed to parse response data for response model",
268+
):
269+
APIResponse.from_json(
270+
{"name": "job-1"},
271+
cast("type[_SampleResponseModel]", _StringSubclassModelNameCallableModel()),
272+
)
273+
274+
253275
def test_api_response_from_json_uses_placeholder_for_blank_mapping_key_in_errors() -> (
254276
None
255277
):

0 commit comments

Comments
 (0)