Skip to content

Commit 1002107

Browse files
Centralize shared job route builder helpers
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 89bbfd0 commit 1002107

File tree

8 files changed

+63
-8
lines changed

8 files changed

+63
-8
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ This runs lint, format checks, compile checks, tests, and package build.
116116
- `tests/test_job_poll_helper_usage.py` (shared terminal-status polling helper usage enforcement),
117117
- `tests/test_job_query_params_helper_usage.py` (shared scrape/crawl query-param helper usage enforcement),
118118
- `tests/test_job_request_helper_usage.py` (shared scrape/crawl/extract request-helper usage enforcement),
119+
- `tests/test_job_route_builder_usage.py` (shared job/web request-helper route-builder usage enforcement),
119120
- `tests/test_job_route_constants_usage.py` (shared scrape/crawl/extract route-constant usage enforcement),
120121
- `tests/test_job_start_payload_helper_usage.py` (shared scrape/crawl start-payload helper usage enforcement),
121122
- `tests/test_job_wait_helper_boundary.py` (centralization boundary enforcement for wait-for-job helper primitives),

hyperbrowser/client/managers/job_request_utils.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Any, Dict, Optional, Type, TypeVar
22

3+
from .job_route_builders import build_job_route, build_job_status_route
34
from .response_utils import parse_response_model
45

56
T = TypeVar("T")
@@ -33,7 +34,7 @@ def get_job_status(
3334
operation_name: str,
3435
) -> T:
3536
response = client.transport.get(
36-
client._build_url(f"{route_prefix}/{job_id}/status"),
37+
client._build_url(build_job_status_route(route_prefix, job_id)),
3738
)
3839
return parse_response_model(
3940
response.data,
@@ -52,7 +53,7 @@ def get_job(
5253
operation_name: str,
5354
) -> T:
5455
response = client.transport.get(
55-
client._build_url(f"{route_prefix}/{job_id}"),
56+
client._build_url(build_job_route(route_prefix, job_id)),
5657
params=params,
5758
)
5859
return parse_response_model(
@@ -90,7 +91,7 @@ async def get_job_status_async(
9091
operation_name: str,
9192
) -> T:
9293
response = await client.transport.get(
93-
client._build_url(f"{route_prefix}/{job_id}/status"),
94+
client._build_url(build_job_status_route(route_prefix, job_id)),
9495
)
9596
return parse_response_model(
9697
response.data,
@@ -109,7 +110,7 @@ async def get_job_async(
109110
operation_name: str,
110111
) -> T:
111112
response = await client.transport.get(
112-
client._build_url(f"{route_prefix}/{job_id}"),
113+
client._build_url(build_job_route(route_prefix, job_id)),
113114
params=params,
114115
)
115116
return parse_response_model(
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def build_job_route(
2+
route_prefix: str,
3+
job_id: str,
4+
) -> str:
5+
return f"{route_prefix}/{job_id}"
6+
7+
8+
def build_job_status_route(
9+
route_prefix: str,
10+
job_id: str,
11+
) -> str:
12+
return f"{route_prefix}/{job_id}/status"

hyperbrowser/client/managers/web_request_utils.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Any, Dict, Optional, Type, TypeVar
22

3+
from .job_route_builders import build_job_route, build_job_status_route
34
from .response_utils import parse_response_model
45

56
T = TypeVar("T")
@@ -33,7 +34,7 @@ def get_web_job_status(
3334
operation_name: str,
3435
) -> T:
3536
response = client.transport.get(
36-
client._build_url(f"{route_prefix}/{job_id}/status"),
37+
client._build_url(build_job_status_route(route_prefix, job_id)),
3738
)
3839
return parse_response_model(
3940
response.data,
@@ -52,7 +53,7 @@ def get_web_job(
5253
operation_name: str,
5354
) -> T:
5455
response = client.transport.get(
55-
client._build_url(f"{route_prefix}/{job_id}"),
56+
client._build_url(build_job_route(route_prefix, job_id)),
5657
params=params,
5758
)
5859
return parse_response_model(
@@ -90,7 +91,7 @@ async def get_web_job_status_async(
9091
operation_name: str,
9192
) -> T:
9293
response = await client.transport.get(
93-
client._build_url(f"{route_prefix}/{job_id}/status"),
94+
client._build_url(build_job_status_route(route_prefix, job_id)),
9495
)
9596
return parse_response_model(
9697
response.data,
@@ -109,7 +110,7 @@ async def get_web_job_async(
109110
operation_name: str,
110111
) -> T:
111112
response = await client.transport.get(
112-
client._build_url(f"{route_prefix}/{job_id}"),
113+
client._build_url(build_job_route(route_prefix, job_id)),
113114
params=params,
114115
)
115116
return parse_response_model(

tests/test_architecture_marker_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"tests/test_job_operation_metadata_usage.py",
6161
"tests/test_job_poll_helper_boundary.py",
6262
"tests/test_job_poll_helper_usage.py",
63+
"tests/test_job_route_builder_usage.py",
6364
"tests/test_job_route_constants_usage.py",
6465
"tests/test_job_request_helper_usage.py",
6566
"tests/test_job_start_payload_helper_usage.py",

tests/test_core_type_helper_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"hyperbrowser/client/managers/job_pagination_utils.py",
5050
"hyperbrowser/client/managers/job_query_params_utils.py",
5151
"hyperbrowser/client/managers/job_request_utils.py",
52+
"hyperbrowser/client/managers/job_route_builders.py",
5253
"hyperbrowser/client/managers/job_route_constants.py",
5354
"hyperbrowser/client/managers/job_start_payload_utils.py",
5455
"hyperbrowser/client/managers/page_params_utils.py",
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
5+
pytestmark = pytest.mark.architecture
6+
7+
8+
MODULES = (
9+
"hyperbrowser/client/managers/job_request_utils.py",
10+
"hyperbrowser/client/managers/web_request_utils.py",
11+
)
12+
13+
14+
def test_job_and_web_request_helpers_use_route_builders():
15+
for module_path in MODULES:
16+
module_text = Path(module_path).read_text(encoding="utf-8")
17+
assert "job_route_builders import build_job_route, build_job_status_route" in module_text
18+
assert "build_job_route(route_prefix, job_id)" in module_text
19+
assert "build_job_status_route(route_prefix, job_id)" in module_text
20+
assert 'f"{route_prefix}/{job_id}"' not in module_text
21+
assert 'f"{route_prefix}/{job_id}/status"' not in module_text

tests/test_job_route_builders.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from hyperbrowser.client.managers.job_route_builders import (
2+
build_job_route,
3+
build_job_status_route,
4+
)
5+
6+
7+
def test_build_job_route_composes_job_route_path():
8+
assert build_job_route("/scrape", "job_123") == "/scrape/job_123"
9+
assert build_job_route("/web/crawl", "job_456") == "/web/crawl/job_456"
10+
11+
12+
def test_build_job_status_route_composes_job_status_route_path():
13+
assert build_job_status_route("/scrape", "job_123") == "/scrape/job_123/status"
14+
assert (
15+
build_job_status_route("/web/crawl", "job_456")
16+
== "/web/crawl/job_456/status"
17+
)

0 commit comments

Comments
 (0)