File tree Expand file tree Collapse file tree
hyperbrowser/client/managers Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -55,13 +55,22 @@ def parse_extension_list_response_data(response_data: Any) -> List[ExtensionResp
5555 "Expected 'extensions' key in response but got "
5656 f"{ _summarize_mapping_keys (response_data )} keys"
5757 )
58- if not isinstance (response_data ["extensions" ], list ):
58+ try :
59+ extensions_value = response_data ["extensions" ]
60+ except HyperbrowserError :
61+ raise
62+ except Exception as exc :
63+ raise HyperbrowserError (
64+ "Failed to read 'extensions' value from response" ,
65+ original_error = exc ,
66+ ) from exc
67+ if not isinstance (extensions_value , list ):
5968 raise HyperbrowserError (
6069 "Expected list in 'extensions' key but got "
61- f"{ _get_type_name (response_data [ 'extensions' ] )} "
70+ f"{ _get_type_name (extensions_value )} "
6271 )
6372 parsed_extensions : List [ExtensionResponse ] = []
64- for index , extension in enumerate (response_data [ "extensions" ] ):
73+ for index , extension in enumerate (extensions_value ):
6574 if not isinstance (extension , Mapping ):
6675 raise HyperbrowserError (
6776 "Expected extension object at index "
Original file line number Diff line number Diff line change @@ -169,3 +169,23 @@ def keys(self):
169169 match = "Expected 'extensions' key in response but got \\ [<unavailable keys>\\ ] keys" ,
170170 ):
171171 parse_extension_list_response_data (_BrokenKeysMapping ({"id" : "ext_1" }))
172+
173+
174+ def test_parse_extension_list_response_data_wraps_unreadable_extensions_value ():
175+ class _BrokenExtensionsLookupMapping (dict ):
176+ def __contains__ (self , key : object ) -> bool :
177+ return key == "extensions"
178+
179+ def __getitem__ (self , key : object ):
180+ if key == "extensions" :
181+ raise RuntimeError ("cannot read extensions value" )
182+ return super ().__getitem__ (key )
183+
184+ with pytest .raises (
185+ HyperbrowserError , match = "Failed to read 'extensions' value from response"
186+ ) as exc_info :
187+ parse_extension_list_response_data (
188+ _BrokenExtensionsLookupMapping ({"extensions" : []})
189+ )
190+
191+ assert exc_info .value .original_error is not None
You can’t perform that action at this time.
0 commit comments