44from hyperbrowser .exceptions import HyperbrowserError
55from hyperbrowser .models .extension import ExtensionResponse
66
7+ _MAX_DISPLAYED_MISSING_KEYS = 20
8+
79
810def _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+
1933def 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 (
0 commit comments