Skip to content

Commit 1dd3c65

Browse files
Preserve explicit extension parsing errors
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent d4a25a0 commit 1dd3c65

2 files changed

Lines changed: 34 additions & 3 deletions

File tree

hyperbrowser/client/managers/extension_utils.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,35 @@
44
from hyperbrowser.models.extension import ExtensionResponse
55

66

7+
def _get_type_name(value: Any) -> str:
8+
return type(value).__name__
9+
10+
711
def parse_extension_list_response_data(response_data: Any) -> List[ExtensionResponse]:
812
if not isinstance(response_data, dict):
9-
raise HyperbrowserError(f"Expected dict response but got {type(response_data)}")
13+
raise HyperbrowserError(
14+
f"Expected dict response but got {_get_type_name(response_data)}"
15+
)
1016
if "extensions" not in response_data:
1117
raise HyperbrowserError(
1218
f"Expected 'extensions' key in response but got {response_data.keys()}"
1319
)
1420
if not isinstance(response_data["extensions"], list):
1521
raise HyperbrowserError(
16-
f"Expected list in 'extensions' key but got {type(response_data['extensions'])}"
22+
"Expected list in 'extensions' key but got "
23+
f"{_get_type_name(response_data['extensions'])}"
1724
)
1825
parsed_extensions: List[ExtensionResponse] = []
1926
for index, extension in enumerate(response_data["extensions"]):
2027
if not isinstance(extension, dict):
2128
raise HyperbrowserError(
22-
f"Expected extension object at index {index} but got {type(extension)}"
29+
"Expected extension object at index "
30+
f"{index} but got {_get_type_name(extension)}"
2331
)
2432
try:
2533
parsed_extensions.append(ExtensionResponse(**extension))
34+
except HyperbrowserError:
35+
raise
2636
except Exception as exc:
2737
raise HyperbrowserError(
2838
f"Failed to parse extension at index {index}",

tests/test_extension_utils.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pytest
22

3+
from hyperbrowser.client.managers import extension_utils
34
from hyperbrowser.client.managers.extension_utils import (
45
parse_extension_list_response_data,
56
)
@@ -56,3 +57,23 @@ def test_parse_extension_list_response_data_wraps_invalid_extension_payloads():
5657
]
5758
}
5859
)
60+
61+
62+
def test_parse_extension_list_response_data_preserves_hyperbrowser_errors(
63+
monkeypatch: pytest.MonkeyPatch,
64+
):
65+
class _RaisingExtensionResponse:
66+
def __init__(self, **kwargs):
67+
_ = kwargs
68+
raise HyperbrowserError("extension parse failed")
69+
70+
monkeypatch.setattr(
71+
extension_utils,
72+
"ExtensionResponse",
73+
_RaisingExtensionResponse,
74+
)
75+
76+
with pytest.raises(HyperbrowserError, match="extension parse failed") as exc_info:
77+
parse_extension_list_response_data({"extensions": [{"id": "ext_1"}]})
78+
79+
assert exc_info.value.original_error is None

0 commit comments

Comments
 (0)