Skip to content

Commit eba041c

Browse files
Cap extension missing-key diagnostics length
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent da731d4 commit eba041c

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

hyperbrowser/client/managers/extension_utils.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from hyperbrowser.exceptions import HyperbrowserError
55
from hyperbrowser.models.extension import ExtensionResponse
66

7+
_MAX_DISPLAYED_MISSING_KEYS = 20
8+
79

810
def _get_type_name(value: Any) -> str:
911
return type(value).__name__
@@ -16,22 +18,27 @@ def _safe_stringify_key(value: object) -> str:
1618
return f"<unprintable {_get_type_name(value)}>"
1719

1820

21+
def _summarize_mapping_keys(mapping: Mapping[object, object]) -> str:
22+
key_names = sorted(_safe_stringify_key(key) for key in mapping.keys())
23+
if not key_names:
24+
return "[]"
25+
displayed_keys = key_names[:_MAX_DISPLAYED_MISSING_KEYS]
26+
key_summary = ", ".join(displayed_keys)
27+
remaining_key_count = len(key_names) - len(displayed_keys)
28+
if remaining_key_count > 0:
29+
key_summary = f"{key_summary}, ... (+{remaining_key_count} more)"
30+
return f"[{key_summary}]"
31+
32+
1933
def parse_extension_list_response_data(response_data: Any) -> List[ExtensionResponse]:
2034
if not isinstance(response_data, Mapping):
2135
raise HyperbrowserError(
2236
f"Expected mapping response but got {_get_type_name(response_data)}"
2337
)
2438
if "extensions" not in response_data:
25-
available_keys = ", ".join(
26-
sorted(_safe_stringify_key(key) for key in response_data.keys())
27-
)
28-
if available_keys:
29-
available_keys = f"[{available_keys}]"
30-
else:
31-
available_keys = "[]"
3239
raise HyperbrowserError(
3340
"Expected 'extensions' key in response but got "
34-
f"{available_keys} keys"
41+
f"{_summarize_mapping_keys(response_data)} keys"
3542
)
3643
if not isinstance(response_data["extensions"], list):
3744
raise HyperbrowserError(

tests/test_extension_utils.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,21 @@ def test_parse_extension_list_response_data_missing_key_lists_available_keys():
117117
)
118118

119119

120+
def test_parse_extension_list_response_data_missing_key_limits_key_list_size():
121+
payload = {f"key-{index:02d}": index for index in range(25)}
122+
123+
with pytest.raises(
124+
HyperbrowserError,
125+
match=(
126+
"Expected 'extensions' key in response but got "
127+
r"\[key-00, key-01, key-02, key-03, key-04, key-05, key-06, key-07,"
128+
r" key-08, key-09, key-10, key-11, key-12, key-13, key-14, key-15,"
129+
r" key-16, key-17, key-18, key-19, \.\.\. \(\+5 more\)\] keys"
130+
),
131+
):
132+
parse_extension_list_response_data(payload)
133+
134+
120135
def test_parse_extension_list_response_data_missing_key_handles_unprintable_keys():
121136
class _BrokenStringKey:
122137
def __str__(self) -> str:

0 commit comments

Comments
 (0)