Skip to content

Commit f7cfed4

Browse files
Refactor list parser to reuse mapping reader
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 7af01cb commit f7cfed4

File tree

1 file changed

+15
-30
lines changed

1 file changed

+15
-30
lines changed

hyperbrowser/client/managers/list_parsing_utils.py

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from collections.abc import Mapping
21
from typing import Any, Callable, List, TypeVar
32

43
from hyperbrowser.exceptions import HyperbrowserError
4+
from hyperbrowser.mapping_utils import read_string_key_mapping
55

66
T = TypeVar("T")
77

@@ -29,37 +29,22 @@ def parse_mapping_list_items(
2929
) -> List[T]:
3030
parsed_items: List[T] = []
3131
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=(
3435
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: (
4939
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+
)
6348
try:
6449
parsed_items.append(parse_item(item_payload))
6550
except HyperbrowserError:

0 commit comments

Comments
 (0)