Skip to content

Commit f1f09b9

Browse files
Reuse model request helpers in job request utilities
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 62c443b commit f1f09b9

6 files changed

Lines changed: 170 additions & 232 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ This runs lint, format checks, compile checks, tests, and package build.
118118
- `tests/test_job_poll_helper_usage.py` (shared terminal-status polling helper usage enforcement),
119119
- `tests/test_job_query_params_helper_usage.py` (shared scrape/crawl query-param helper usage enforcement),
120120
- `tests/test_job_request_helper_usage.py` (shared scrape/crawl/extract request-helper usage enforcement),
121+
- `tests/test_job_request_internal_reuse.py` (shared job request helper internal reuse of shared model request helpers),
121122
- `tests/test_job_route_builder_usage.py` (shared job/web request-helper route-builder usage enforcement),
122123
- `tests/test_job_route_constants_usage.py` (shared scrape/crawl/extract route-constant usage enforcement),
123124
- `tests/test_job_start_payload_helper_usage.py` (shared scrape/crawl start-payload helper usage enforcement),

hyperbrowser/client/managers/job_request_utils.py

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@
55
build_job_route,
66
build_job_status_route,
77
)
8-
from .response_utils import parse_response_model
8+
from .model_request_utils import (
9+
get_model_request,
10+
get_model_request_async,
11+
post_model_request,
12+
post_model_request_async,
13+
put_model_request,
14+
put_model_request_async,
15+
)
916

1017
T = TypeVar("T")
1118

@@ -18,12 +25,10 @@ def start_job(
1825
model: Type[T],
1926
operation_name: str,
2027
) -> T:
21-
response = client.transport.post(
22-
client._build_url(route_prefix),
28+
return post_model_request(
29+
client=client,
30+
route_path=route_prefix,
2331
data=payload,
24-
)
25-
return parse_response_model(
26-
response.data,
2732
model=model,
2833
operation_name=operation_name,
2934
)
@@ -37,11 +42,10 @@ def get_job_status(
3742
model: Type[T],
3843
operation_name: str,
3944
) -> T:
40-
response = client.transport.get(
41-
client._build_url(build_job_status_route(route_prefix, job_id)),
42-
)
43-
return parse_response_model(
44-
response.data,
45+
return get_model_request(
46+
client=client,
47+
route_path=build_job_status_route(route_prefix, job_id),
48+
params=None,
4549
model=model,
4650
operation_name=operation_name,
4751
)
@@ -56,12 +60,10 @@ def get_job(
5660
model: Type[T],
5761
operation_name: str,
5862
) -> T:
59-
response = client.transport.get(
60-
client._build_url(build_job_route(route_prefix, job_id)),
63+
return get_model_request(
64+
client=client,
65+
route_path=build_job_route(route_prefix, job_id),
6166
params=params,
62-
)
63-
return parse_response_model(
64-
response.data,
6567
model=model,
6668
operation_name=operation_name,
6769
)
@@ -75,12 +77,10 @@ async def start_job_async(
7577
model: Type[T],
7678
operation_name: str,
7779
) -> T:
78-
response = await client.transport.post(
79-
client._build_url(route_prefix),
80+
return await post_model_request_async(
81+
client=client,
82+
route_path=route_prefix,
8083
data=payload,
81-
)
82-
return parse_response_model(
83-
response.data,
8484
model=model,
8585
operation_name=operation_name,
8686
)
@@ -94,11 +94,10 @@ async def get_job_status_async(
9494
model: Type[T],
9595
operation_name: str,
9696
) -> T:
97-
response = await client.transport.get(
98-
client._build_url(build_job_status_route(route_prefix, job_id)),
99-
)
100-
return parse_response_model(
101-
response.data,
97+
return await get_model_request_async(
98+
client=client,
99+
route_path=build_job_status_route(route_prefix, job_id),
100+
params=None,
102101
model=model,
103102
operation_name=operation_name,
104103
)
@@ -113,12 +112,10 @@ async def get_job_async(
113112
model: Type[T],
114113
operation_name: str,
115114
) -> T:
116-
response = await client.transport.get(
117-
client._build_url(build_job_route(route_prefix, job_id)),
115+
return await get_model_request_async(
116+
client=client,
117+
route_path=build_job_route(route_prefix, job_id),
118118
params=params,
119-
)
120-
return parse_response_model(
121-
response.data,
122119
model=model,
123120
operation_name=operation_name,
124121
)
@@ -133,11 +130,10 @@ def put_job_action(
133130
model: Type[T],
134131
operation_name: str,
135132
) -> T:
136-
response = client.transport.put(
137-
client._build_url(build_job_action_route(route_prefix, job_id, action_suffix)),
138-
)
139-
return parse_response_model(
140-
response.data,
133+
return put_model_request(
134+
client=client,
135+
route_path=build_job_action_route(route_prefix, job_id, action_suffix),
136+
data=None,
141137
model=model,
142138
operation_name=operation_name,
143139
)
@@ -152,11 +148,10 @@ async def put_job_action_async(
152148
model: Type[T],
153149
operation_name: str,
154150
) -> T:
155-
response = await client.transport.put(
156-
client._build_url(build_job_action_route(route_prefix, job_id, action_suffix)),
157-
)
158-
return parse_response_model(
159-
response.data,
151+
return await put_model_request_async(
152+
client=client,
153+
route_path=build_job_action_route(route_prefix, job_id, action_suffix),
154+
data=None,
160155
model=model,
161156
operation_name=operation_name,
162157
)

hyperbrowser/client/managers/model_request_utils.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,25 @@ def delete_model_request(
6060
)
6161

6262

63+
def put_model_request(
64+
*,
65+
client: Any,
66+
route_path: str,
67+
data: Optional[Dict[str, Any]],
68+
model: Type[T],
69+
operation_name: str,
70+
) -> T:
71+
response = client.transport.put(
72+
client._build_url(route_path),
73+
data=data,
74+
)
75+
return parse_response_model(
76+
response.data,
77+
model=model,
78+
operation_name=operation_name,
79+
)
80+
81+
6382
async def post_model_request_async(
6483
*,
6584
client: Any,
@@ -113,3 +132,22 @@ async def delete_model_request_async(
113132
model=model,
114133
operation_name=operation_name,
115134
)
135+
136+
137+
async def put_model_request_async(
138+
*,
139+
client: Any,
140+
route_path: str,
141+
data: Optional[Dict[str, Any]],
142+
model: Type[T],
143+
operation_name: str,
144+
) -> T:
145+
response = await client.transport.put(
146+
client._build_url(route_path),
147+
data=data,
148+
)
149+
return parse_response_model(
150+
response.data,
151+
model=model,
152+
operation_name=operation_name,
153+
)

tests/test_architecture_marker_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
"tests/test_job_operation_metadata_usage.py",
6464
"tests/test_job_poll_helper_boundary.py",
6565
"tests/test_job_poll_helper_usage.py",
66+
"tests/test_job_request_internal_reuse.py",
6667
"tests/test_job_route_builder_usage.py",
6768
"tests/test_job_route_constants_usage.py",
6869
"tests/test_job_request_helper_usage.py",
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
5+
pytestmark = pytest.mark.architecture
6+
7+
8+
def test_job_request_utils_reuse_model_request_helpers():
9+
module_text = Path("hyperbrowser/client/managers/job_request_utils.py").read_text(
10+
encoding="utf-8"
11+
)
12+
assert "model_request_utils import" in module_text
13+
assert "post_model_request(" in module_text
14+
assert "get_model_request(" in module_text
15+
assert "put_model_request(" in module_text
16+
assert "post_model_request_async(" in module_text
17+
assert "get_model_request_async(" in module_text
18+
assert "put_model_request_async(" in module_text
19+
assert "client.transport." not in module_text
20+
assert "parse_response_model(" not in module_text

0 commit comments

Comments
 (0)