Skip to content

Commit 62c443b

Browse files
Reuse shared model request helpers in profile and team
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent d496515 commit 62c443b

10 files changed

+534
-290
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ This runs lint, format checks, compile checks, tests, and package build.
141141
- `tests/test_profile_request_helper_usage.py` (profile manager request-helper usage enforcement),
142142
- `tests/test_profile_route_builder_usage.py` (profile request-helper route-builder usage enforcement),
143143
- `tests/test_profile_route_constants_usage.py` (profile manager route-constant usage enforcement),
144+
- `tests/test_profile_team_request_internal_reuse.py` (profile/team request-helper internal reuse of shared model request helpers),
144145
- `tests/test_pyproject_architecture_marker.py` (pytest marker registration enforcement),
145146
- `tests/test_readme_examples_listing.py` (README example-listing consistency enforcement),
146147
- `tests/test_schema_injection_helper_usage.py` (shared schema injection helper usage enforcement in payload builders),
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
from typing import Any, Dict, Optional, Type, TypeVar
2+
3+
from .response_utils import parse_response_model
4+
5+
T = TypeVar("T")
6+
7+
8+
def post_model_request(
9+
*,
10+
client: Any,
11+
route_path: str,
12+
data: Dict[str, Any],
13+
model: Type[T],
14+
operation_name: str,
15+
) -> T:
16+
response = client.transport.post(
17+
client._build_url(route_path),
18+
data=data,
19+
)
20+
return parse_response_model(
21+
response.data,
22+
model=model,
23+
operation_name=operation_name,
24+
)
25+
26+
27+
def get_model_request(
28+
*,
29+
client: Any,
30+
route_path: str,
31+
params: Optional[Dict[str, Any]],
32+
model: Type[T],
33+
operation_name: str,
34+
) -> T:
35+
response = client.transport.get(
36+
client._build_url(route_path),
37+
params=params,
38+
)
39+
return parse_response_model(
40+
response.data,
41+
model=model,
42+
operation_name=operation_name,
43+
)
44+
45+
46+
def delete_model_request(
47+
*,
48+
client: Any,
49+
route_path: str,
50+
model: Type[T],
51+
operation_name: str,
52+
) -> T:
53+
response = client.transport.delete(
54+
client._build_url(route_path),
55+
)
56+
return parse_response_model(
57+
response.data,
58+
model=model,
59+
operation_name=operation_name,
60+
)
61+
62+
63+
async def post_model_request_async(
64+
*,
65+
client: Any,
66+
route_path: str,
67+
data: Dict[str, Any],
68+
model: Type[T],
69+
operation_name: str,
70+
) -> T:
71+
response = await client.transport.post(
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+
82+
async def get_model_request_async(
83+
*,
84+
client: Any,
85+
route_path: str,
86+
params: Optional[Dict[str, Any]],
87+
model: Type[T],
88+
operation_name: str,
89+
) -> T:
90+
response = await client.transport.get(
91+
client._build_url(route_path),
92+
params=params,
93+
)
94+
return parse_response_model(
95+
response.data,
96+
model=model,
97+
operation_name=operation_name,
98+
)
99+
100+
101+
async def delete_model_request_async(
102+
*,
103+
client: Any,
104+
route_path: str,
105+
model: Type[T],
106+
operation_name: str,
107+
) -> T:
108+
response = await client.transport.delete(
109+
client._build_url(route_path),
110+
)
111+
return parse_response_model(
112+
response.data,
113+
model=model,
114+
operation_name=operation_name,
115+
)

hyperbrowser/client/managers/profile_request_utils.py

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
from typing import Any, Dict, Optional, Type, TypeVar
22

3+
from .model_request_utils import (
4+
delete_model_request,
5+
delete_model_request_async,
6+
get_model_request,
7+
get_model_request_async,
8+
post_model_request,
9+
post_model_request_async,
10+
)
311
from .profile_route_constants import build_profile_route
4-
from .response_utils import parse_response_model
512

613
T = TypeVar("T")
714

@@ -14,12 +21,10 @@ def create_profile_resource(
1421
model: Type[T],
1522
operation_name: str,
1623
) -> T:
17-
response = client.transport.post(
18-
client._build_url(route_prefix),
24+
return post_model_request(
25+
client=client,
26+
route_path=route_prefix,
1927
data=payload,
20-
)
21-
return parse_response_model(
22-
response.data,
2328
model=model,
2429
operation_name=operation_name,
2530
)
@@ -32,11 +37,10 @@ def get_profile_resource(
3237
model: Type[T],
3338
operation_name: str,
3439
) -> T:
35-
response = client.transport.get(
36-
client._build_url(build_profile_route(profile_id)),
37-
)
38-
return parse_response_model(
39-
response.data,
40+
return get_model_request(
41+
client=client,
42+
route_path=build_profile_route(profile_id),
43+
params=None,
4044
model=model,
4145
operation_name=operation_name,
4246
)
@@ -49,11 +53,9 @@ def delete_profile_resource(
4953
model: Type[T],
5054
operation_name: str,
5155
) -> T:
52-
response = client.transport.delete(
53-
client._build_url(build_profile_route(profile_id)),
54-
)
55-
return parse_response_model(
56-
response.data,
56+
return delete_model_request(
57+
client=client,
58+
route_path=build_profile_route(profile_id),
5759
model=model,
5860
operation_name=operation_name,
5961
)
@@ -67,12 +69,10 @@ def list_profile_resources(
6769
model: Type[T],
6870
operation_name: str,
6971
) -> T:
70-
response = client.transport.get(
71-
client._build_url(list_route_path),
72+
return get_model_request(
73+
client=client,
74+
route_path=list_route_path,
7275
params=params,
73-
)
74-
return parse_response_model(
75-
response.data,
7676
model=model,
7777
operation_name=operation_name,
7878
)
@@ -86,12 +86,10 @@ async def create_profile_resource_async(
8686
model: Type[T],
8787
operation_name: str,
8888
) -> T:
89-
response = await client.transport.post(
90-
client._build_url(route_prefix),
89+
return await post_model_request_async(
90+
client=client,
91+
route_path=route_prefix,
9192
data=payload,
92-
)
93-
return parse_response_model(
94-
response.data,
9593
model=model,
9694
operation_name=operation_name,
9795
)
@@ -104,11 +102,10 @@ async def get_profile_resource_async(
104102
model: Type[T],
105103
operation_name: str,
106104
) -> T:
107-
response = await client.transport.get(
108-
client._build_url(build_profile_route(profile_id)),
109-
)
110-
return parse_response_model(
111-
response.data,
105+
return await get_model_request_async(
106+
client=client,
107+
route_path=build_profile_route(profile_id),
108+
params=None,
112109
model=model,
113110
operation_name=operation_name,
114111
)
@@ -121,11 +118,9 @@ async def delete_profile_resource_async(
121118
model: Type[T],
122119
operation_name: str,
123120
) -> T:
124-
response = await client.transport.delete(
125-
client._build_url(build_profile_route(profile_id)),
126-
)
127-
return parse_response_model(
128-
response.data,
121+
return await delete_model_request_async(
122+
client=client,
123+
route_path=build_profile_route(profile_id),
129124
model=model,
130125
operation_name=operation_name,
131126
)
@@ -139,12 +134,10 @@ async def list_profile_resources_async(
139134
model: Type[T],
140135
operation_name: str,
141136
) -> T:
142-
response = await client.transport.get(
143-
client._build_url(list_route_path),
137+
return await get_model_request_async(
138+
client=client,
139+
route_path=list_route_path,
144140
params=params,
145-
)
146-
return parse_response_model(
147-
response.data,
148141
model=model,
149142
operation_name=operation_name,
150143
)
Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Type, TypeVar
22

3-
from .response_utils import parse_response_model
3+
from .model_request_utils import get_model_request, get_model_request_async
44

55
T = TypeVar("T")
66

@@ -12,11 +12,10 @@ def get_team_resource(
1212
model: Type[T],
1313
operation_name: str,
1414
) -> T:
15-
response = client.transport.get(
16-
client._build_url(route_path),
17-
)
18-
return parse_response_model(
19-
response.data,
15+
return get_model_request(
16+
client=client,
17+
route_path=route_path,
18+
params=None,
2019
model=model,
2120
operation_name=operation_name,
2221
)
@@ -29,11 +28,10 @@ async def get_team_resource_async(
2928
model: Type[T],
3029
operation_name: str,
3130
) -> T:
32-
response = await client.transport.get(
33-
client._build_url(route_path),
34-
)
35-
return parse_response_model(
36-
response.data,
31+
return await get_model_request_async(
32+
client=client,
33+
route_path=route_path,
34+
params=None,
3735
model=model,
3836
operation_name=operation_name,
3937
)

tests/test_architecture_marker_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"tests/test_optional_serialization_helper_usage.py",
4242
"tests/test_profile_operation_metadata_usage.py",
4343
"tests/test_profile_request_helper_usage.py",
44+
"tests/test_profile_team_request_internal_reuse.py",
4445
"tests/test_profile_route_builder_usage.py",
4546
"tests/test_profile_route_constants_usage.py",
4647
"tests/test_type_utils_usage.py",

tests/test_core_type_helper_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"hyperbrowser/client/managers/job_route_builders.py",
5353
"hyperbrowser/client/managers/job_route_constants.py",
5454
"hyperbrowser/client/managers/job_start_payload_utils.py",
55+
"hyperbrowser/client/managers/model_request_utils.py",
5556
"hyperbrowser/client/managers/page_params_utils.py",
5657
"hyperbrowser/client/managers/job_wait_utils.py",
5758
"hyperbrowser/client/managers/polling_defaults.py",

0 commit comments

Comments
 (0)