|
1 | | -from collections.abc import Mapping |
2 | 1 | from typing import Any, Callable, List, TypeVar |
3 | 2 |
|
4 | 3 | from hyperbrowser.exceptions import HyperbrowserError |
| 4 | +from hyperbrowser.mapping_utils import read_string_key_mapping |
5 | 5 |
|
6 | 6 | T = TypeVar("T") |
7 | 7 |
|
@@ -29,37 +29,22 @@ def parse_mapping_list_items( |
29 | 29 | ) -> List[T]: |
30 | 30 | parsed_items: List[T] = [] |
31 | 31 | for index, item in enumerate(items): |
32 | | - if not isinstance(item, Mapping): |
33 | | - raise HyperbrowserError( |
| 32 | + item_payload = read_string_key_mapping( |
| 33 | + item, |
| 34 | + expected_mapping_error=( |
34 | 35 | f"Expected {item_label} object at index {index} but got {type(item).__name__}" |
35 | | - ) |
36 | | - try: |
37 | | - item_keys = list(item.keys()) |
38 | | - except HyperbrowserError: |
39 | | - raise |
40 | | - except Exception as exc: |
41 | | - raise HyperbrowserError( |
42 | | - f"Failed to read {item_label} object at index {index}", |
43 | | - original_error=exc, |
44 | | - ) from exc |
45 | | - for key in item_keys: |
46 | | - if type(key) is str: |
47 | | - continue |
48 | | - raise HyperbrowserError( |
| 36 | + ), |
| 37 | + read_keys_error=f"Failed to read {item_label} object at index {index}", |
| 38 | + non_string_key_error_builder=lambda _key: ( |
49 | 39 | f"Expected {item_label} object keys to be strings at index {index}" |
50 | | - ) |
51 | | - item_payload: dict[str, object] = {} |
52 | | - for key in item_keys: |
53 | | - try: |
54 | | - item_payload[key] = item[key] |
55 | | - except HyperbrowserError: |
56 | | - raise |
57 | | - except Exception as exc: |
58 | | - key_text = _safe_key_display_for_error(key, key_display=key_display) |
59 | | - raise HyperbrowserError( |
60 | | - f"Failed to read {item_label} object value for key '{key_text}' at index {index}", |
61 | | - original_error=exc, |
62 | | - ) from exc |
| 40 | + ), |
| 41 | + read_value_error_builder=lambda key_text: ( |
| 42 | + f"Failed to read {item_label} object value for key '{key_text}' at index {index}" |
| 43 | + ), |
| 44 | + key_display=lambda key: _safe_key_display_for_error( |
| 45 | + key, key_display=key_display |
| 46 | + ), |
| 47 | + ) |
63 | 48 | try: |
64 | 49 | parsed_items.append(parse_item(item_payload)) |
65 | 50 | except HyperbrowserError: |
|
0 commit comments