Skip to content

Commit ff7ae5f

Browse files
Share mapping key display fallback helper across parsers
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 2e166c1 commit ff7ae5f

File tree

3 files changed

+8
-23
lines changed

3 files changed

+8
-23
lines changed

hyperbrowser/client/managers/list_parsing_utils.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,11 @@
11
from typing import Any, Callable, List, TypeVar
22

33
from hyperbrowser.exceptions import HyperbrowserError
4-
from hyperbrowser.mapping_utils import read_string_key_mapping
5-
from hyperbrowser.type_utils import is_plain_string
4+
from hyperbrowser.mapping_utils import read_string_key_mapping, safe_key_display_for_error
65

76
T = TypeVar("T")
87

98

10-
def _safe_key_display_for_error(
11-
key: str,
12-
*,
13-
key_display: Callable[[str], str],
14-
) -> str:
15-
try:
16-
key_text = key_display(key)
17-
if not is_plain_string(key_text):
18-
raise TypeError("key display must be a string")
19-
return key_text
20-
except Exception:
21-
return "<unreadable key>"
22-
23-
249
def parse_mapping_list_items(
2510
items: List[Any],
2611
*,
@@ -42,7 +27,7 @@ def parse_mapping_list_items(
4227
read_value_error_builder=lambda key_text: (
4328
f"Failed to read {item_label} object value for key '{key_text}' at index {index}"
4429
),
45-
key_display=lambda key: _safe_key_display_for_error(
30+
key_display=lambda key: safe_key_display_for_error(
4631
key, key_display=key_display
4732
),
4833
)

hyperbrowser/mapping_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from hyperbrowser.type_utils import is_plain_string
66

77

8-
def _safe_key_display_for_error(
8+
def safe_key_display_for_error(
99
key: str, *, key_display: Callable[[str], str]
1010
) -> str:
1111
try:
@@ -66,7 +66,7 @@ def read_string_key_mapping(
6666
except HyperbrowserError:
6767
raise
6868
except Exception as exc:
69-
key_text = _safe_key_display_for_error(key, key_display=key_display)
69+
key_text = safe_key_display_for_error(key, key_display=key_display)
7070
raise HyperbrowserError(
7171
read_value_error_builder(key_text),
7272
original_error=exc,
@@ -90,7 +90,7 @@ def copy_mapping_values_by_string_keys(
9090
except HyperbrowserError:
9191
raise
9292
except Exception as exc:
93-
key_text = _safe_key_display_for_error(key, key_display=key_display)
93+
key_text = safe_key_display_for_error(key, key_display=key_display)
9494
raise HyperbrowserError(
9595
read_value_error_builder(key_text),
9696
original_error=exc,

tests/test_mapping_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
from hyperbrowser.exceptions import HyperbrowserError
66
from hyperbrowser.mapping_utils import (
7-
_safe_key_display_for_error,
87
copy_mapping_values_by_string_keys,
98
read_string_mapping_keys,
109
read_string_key_mapping,
10+
safe_key_display_for_error,
1111
)
1212

1313

@@ -135,14 +135,14 @@ def test_read_string_key_mapping_falls_back_for_unreadable_key_display():
135135

136136
def test_safe_key_display_for_error_returns_display_value():
137137
assert (
138-
_safe_key_display_for_error("field", key_display=lambda key: f"<{key}>")
138+
safe_key_display_for_error("field", key_display=lambda key: f"<{key}>")
139139
== "<field>"
140140
)
141141

142142

143143
def test_safe_key_display_for_error_returns_unreadable_key_on_failures():
144144
assert (
145-
_safe_key_display_for_error(
145+
safe_key_display_for_error(
146146
"field",
147147
key_display=lambda key: key.encode("utf-8"),
148148
)

0 commit comments

Comments
 (0)