Skip to content

Commit 336277e

Browse files
Validate individual extension items during list parsing
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 82f77fb commit 336277e

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

hyperbrowser/client/managers/extension_utils.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,17 @@ def parse_extension_list_response_data(response_data: Any) -> List[ExtensionResp
1515
raise HyperbrowserError(
1616
f"Expected list in 'extensions' key but got {type(response_data['extensions'])}"
1717
)
18-
return [ExtensionResponse(**extension) for extension in response_data["extensions"]]
18+
parsed_extensions: List[ExtensionResponse] = []
19+
for index, extension in enumerate(response_data["extensions"]):
20+
if not isinstance(extension, dict):
21+
raise HyperbrowserError(
22+
f"Expected extension object at index {index} but got {type(extension)}"
23+
)
24+
try:
25+
parsed_extensions.append(ExtensionResponse(**extension))
26+
except Exception as exc:
27+
raise HyperbrowserError(
28+
f"Failed to parse extension at index {index}",
29+
original_error=exc,
30+
) from exc
31+
return parsed_extensions

tests/test_extension_utils.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,22 @@ def test_parse_extension_list_response_data_rejects_missing_extensions_key():
3737
def test_parse_extension_list_response_data_rejects_non_list_extensions():
3838
with pytest.raises(HyperbrowserError, match="Expected list in 'extensions' key"):
3939
parse_extension_list_response_data({"extensions": "not-a-list"})
40+
41+
42+
def test_parse_extension_list_response_data_rejects_non_object_extension_items():
43+
with pytest.raises(HyperbrowserError, match="Expected extension object at index 0"):
44+
parse_extension_list_response_data({"extensions": ["not-an-object"]})
45+
46+
47+
def test_parse_extension_list_response_data_wraps_invalid_extension_payloads():
48+
with pytest.raises(HyperbrowserError, match="Failed to parse extension at index 0"):
49+
parse_extension_list_response_data(
50+
{
51+
"extensions": [
52+
{
53+
"id": "ext_123",
54+
# missing required fields: name/createdAt/updatedAt
55+
}
56+
]
57+
}
58+
)

0 commit comments

Comments
 (0)