Skip to content

Commit f502bc9

Browse files
Wrap unreadable extension list iteration failures
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent c01071d commit f502bc9

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

hyperbrowser/client/managers/extension_utils.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,17 @@ def parse_extension_list_response_data(response_data: Any) -> List[ExtensionResp
6969
"Expected list in 'extensions' key but got "
7070
f"{_get_type_name(extensions_value)}"
7171
)
72+
try:
73+
extension_items = list(extensions_value)
74+
except HyperbrowserError:
75+
raise
76+
except Exception as exc:
77+
raise HyperbrowserError(
78+
"Failed to iterate 'extensions' list from response",
79+
original_error=exc,
80+
) from exc
7281
parsed_extensions: List[ExtensionResponse] = []
73-
for index, extension in enumerate(extensions_value):
82+
for index, extension in enumerate(extension_items):
7483
if not isinstance(extension, Mapping):
7584
raise HyperbrowserError(
7685
"Expected extension object at index "

tests/test_extension_utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,16 @@ def __getitem__(self, key: object):
189189
)
190190

191191
assert exc_info.value.original_error is not None
192+
193+
194+
def test_parse_extension_list_response_data_wraps_unreadable_extensions_iteration():
195+
class _BrokenExtensionsList(list):
196+
def __iter__(self):
197+
raise RuntimeError("cannot iterate extensions list")
198+
199+
with pytest.raises(
200+
HyperbrowserError, match="Failed to iterate 'extensions' list from response"
201+
) as exc_info:
202+
parse_extension_list_response_data({"extensions": _BrokenExtensionsList([{}])})
203+
204+
assert exc_info.value.original_error is not None

0 commit comments

Comments
 (0)