File tree Expand file tree Collapse file tree 2 files changed +38
-1
lines changed
hyperbrowser/client/managers Expand file tree Collapse file tree 2 files changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -32,6 +32,8 @@ def _format_key_display(value: object) -> str:
3232def _summarize_mapping_keys (mapping : Mapping [object , object ]) -> str :
3333 try :
3434 mapping_keys = list (mapping .keys ())
35+ except HyperbrowserError :
36+ raise
3537 except Exception :
3638 return "[<unavailable keys>]"
3739 key_names = sorted (_format_key_display (key ) for key in mapping_keys )
@@ -50,7 +52,16 @@ def parse_extension_list_response_data(response_data: Any) -> List[ExtensionResp
5052 raise HyperbrowserError (
5153 f"Expected mapping response but got { _get_type_name (response_data )} "
5254 )
53- if "extensions" not in response_data :
55+ try :
56+ has_extensions_key = "extensions" in response_data
57+ except HyperbrowserError :
58+ raise
59+ except Exception as exc :
60+ raise HyperbrowserError (
61+ "Failed to inspect response for 'extensions' key" ,
62+ original_error = exc ,
63+ ) from exc
64+ if not has_extensions_key :
5465 raise HyperbrowserError (
5566 "Expected 'extensions' key in response but got "
5667 f"{ _summarize_mapping_keys (response_data )} keys"
Original file line number Diff line number Diff line change @@ -171,6 +171,32 @@ def keys(self):
171171 parse_extension_list_response_data (_BrokenKeysMapping ({"id" : "ext_1" }))
172172
173173
174+ def test_parse_extension_list_response_data_wraps_unreadable_extensions_membership ():
175+ class _BrokenContainsMapping (dict ):
176+ def __contains__ (self , key : object ) -> bool :
177+ _ = key
178+ raise RuntimeError ("cannot inspect contains" )
179+
180+ with pytest .raises (
181+ HyperbrowserError , match = "Failed to inspect response for 'extensions' key"
182+ ) as exc_info :
183+ parse_extension_list_response_data (_BrokenContainsMapping ({"id" : "ext_1" }))
184+
185+ assert exc_info .value .original_error is not None
186+
187+
188+ def test_parse_extension_list_response_data_preserves_hyperbrowser_contains_errors ():
189+ class _BrokenContainsMapping (dict ):
190+ def __contains__ (self , key : object ) -> bool :
191+ _ = key
192+ raise HyperbrowserError ("custom contains failure" )
193+
194+ with pytest .raises (HyperbrowserError , match = "custom contains failure" ) as exc_info :
195+ parse_extension_list_response_data (_BrokenContainsMapping ({"id" : "ext_1" }))
196+
197+ assert exc_info .value .original_error is None
198+
199+
174200def test_parse_extension_list_response_data_wraps_unreadable_extensions_value ():
175201 class _BrokenExtensionsLookupMapping (dict ):
176202 def __contains__ (self , key : object ) -> bool :
You can’t perform that action at this time.
0 commit comments