Skip to content

Commit b486263

Browse files
Refine fetch-prefix idempotence for bare keyword cases
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 7f36685 commit b486263

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

hyperbrowser/client/polling.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
T = TypeVar("T")
1919
_MAX_OPERATION_NAME_LENGTH = 200
2020
_FETCH_OPERATION_NAME_PREFIX = "Fetching "
21+
_FETCH_PREFIX_KEYWORD = "fetching"
2122
_TRUNCATED_OPERATION_NAME_SUFFIX = "..."
2223
_CLIENT_ERROR_STATUS_MIN = 400
2324
_CLIENT_ERROR_STATUS_MAX = 500
@@ -130,10 +131,13 @@ def build_operation_name(prefix: object, identifier: object) -> str:
130131
def build_fetch_operation_name(operation_name: object) -> str:
131132
normalized_operation_name = build_operation_name("", operation_name)
132133
normalized_lower_operation_name = normalized_operation_name.lower()
133-
if normalized_lower_operation_name.startswith(
134-
_FETCH_OPERATION_NAME_PREFIX.lower()
135-
) or normalized_lower_operation_name.startswith("fetching?"):
136-
return normalized_operation_name
134+
if normalized_lower_operation_name.startswith(_FETCH_PREFIX_KEYWORD):
135+
next_character_index = len(_FETCH_PREFIX_KEYWORD)
136+
if next_character_index == len(normalized_lower_operation_name):
137+
return normalized_operation_name
138+
next_character = normalized_lower_operation_name[next_character_index]
139+
if next_character.isspace() or next_character == "?":
140+
return normalized_operation_name
137141
return build_operation_name(
138142
_FETCH_OPERATION_NAME_PREFIX,
139143
normalized_operation_name,

tests/test_polling.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ def test_build_fetch_operation_name_is_idempotent_case_insensitive():
5757
assert build_fetch_operation_name(operation_name) == operation_name
5858

5959

60+
def test_build_fetch_operation_name_is_idempotent_for_bare_fetching_keyword():
61+
operation_name = "Fetching"
62+
assert build_fetch_operation_name(operation_name) == operation_name
63+
64+
6065
def test_build_fetch_operation_name_is_idempotent_for_sanitized_fetch_separator():
6166
operation_name = "Fetching\tcrawl job 123"
6267
normalized_operation_name = build_fetch_operation_name(operation_name)
@@ -65,6 +70,13 @@ def test_build_fetch_operation_name_is_idempotent_for_sanitized_fetch_separator(
6570
assert normalized_operation_name.count("Fetching") == 1
6671

6772

73+
def test_build_fetch_operation_name_prefixes_non_separator_fetching_variants():
74+
operation_name = "FetchingTask"
75+
normalized_operation_name = build_fetch_operation_name(operation_name)
76+
77+
assert normalized_operation_name == "Fetching FetchingTask"
78+
79+
6880
def test_build_fetch_operation_name_truncates_to_preserve_fetch_prefix():
6981
operation_name = "x" * 200
7082
fetch_operation_name = build_fetch_operation_name(operation_name)

0 commit comments

Comments
 (0)