Skip to content

Commit b389ac3

Browse files
Refactor extension key display through safe helper
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent cd263cb commit b389ac3

3 files changed

Lines changed: 30 additions & 9 deletions

File tree

hyperbrowser/client/managers/extension_utils.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from hyperbrowser.display_utils import format_string_key_for_error
55
from hyperbrowser.exceptions import HyperbrowserError
6+
from hyperbrowser.mapping_utils import safe_key_display_for_error
67
from hyperbrowser.models.extension import ExtensionResponse
78
from hyperbrowser.type_utils import is_plain_string
89
from .list_parsing_utils import parse_mapping_list_items, read_plain_list_items
@@ -20,20 +21,30 @@ def _safe_stringify_key(value: object) -> str:
2021
normalized_key = str(value)
2122
if not is_plain_string(normalized_key):
2223
raise TypeError("normalized key must be a string")
23-
return normalized_key
24+
sanitized_key = "".join(
25+
"?" if ord(character) < 32 or ord(character) == 127 else character
26+
for character in normalized_key
27+
)
28+
if not is_plain_string(sanitized_key):
29+
raise TypeError("sanitized key must be a string")
30+
return sanitized_key
2431
except Exception:
2532
return f"<unprintable {_get_type_name(value)}>"
2633

2734

2835
def _format_key_display(value: object) -> str:
29-
try:
30-
normalized_key = _safe_stringify_key(value)
31-
if not is_plain_string(normalized_key):
32-
raise TypeError("normalized key display must be a string")
33-
except Exception:
34-
return "<unreadable key>"
35-
return format_string_key_for_error(
36+
normalized_key = _safe_stringify_key(value)
37+
if not normalized_key.strip():
38+
return format_string_key_for_error(
39+
"",
40+
max_length=_MAX_DISPLAYED_MISSING_KEY_LENGTH,
41+
)
42+
safe_key_text = safe_key_display_for_error(
3643
normalized_key,
44+
key_display=lambda key: key,
45+
)
46+
return format_string_key_for_error(
47+
safe_key_text,
3748
max_length=_MAX_DISPLAYED_MISSING_KEY_LENGTH,
3849
)
3950

tests/test_mapping_utils_import_boundary.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import pytest
55

6+
from tests.test_safe_key_display_helper_usage import ALLOWED_SAFE_KEY_DISPLAY_CALL_FILES
67
from tests.test_mapping_reader_usage import MAPPING_READER_TARGET_FILES
78
from tests.test_tool_mapping_reader_usage import TOOLS_MODULE
89

@@ -37,7 +38,15 @@ def test_mapping_utils_imports_are_centralized():
3738
discovered_modules.append(module_path.as_posix())
3839

3940
expected_runtime_modules = sorted(
40-
[*(path.as_posix() for path in MAPPING_READER_TARGET_FILES), TOOLS_MODULE.as_posix()]
41+
{
42+
*(path.as_posix() for path in MAPPING_READER_TARGET_FILES),
43+
TOOLS_MODULE.as_posix(),
44+
*(
45+
f"hyperbrowser/{path.as_posix()}"
46+
for path in ALLOWED_SAFE_KEY_DISPLAY_CALL_FILES
47+
if path != Path("mapping_utils.py")
48+
),
49+
}
4150
)
4251
expected_modules = sorted([*expected_runtime_modules, *EXPECTED_MAPPING_EXTRA_IMPORTERS])
4352
assert discovered_modules == expected_modules

tests/test_safe_key_display_helper_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
HYPERBROWSER_ROOT = Path(__file__).resolve().parents[1] / "hyperbrowser"
1010
ALLOWED_SAFE_KEY_DISPLAY_CALL_FILES = {
1111
Path("mapping_utils.py"),
12+
Path("client/managers/extension_utils.py"),
1213
Path("client/managers/list_parsing_utils.py"),
1314
}
1415

0 commit comments

Comments
 (0)