Skip to content

Commit a17703f

Browse files
Reuse shared raw request helpers in session request utilities
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 5b80104 commit a17703f

File tree

7 files changed

+286
-91
lines changed

7 files changed

+286
-91
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ This runs lint, format checks, compile checks, tests, and package build.
155155
- `tests/test_session_parse_usage_boundary.py` (centralized session parse-helper usage boundary enforcement),
156156
- `tests/test_session_profile_update_helper_usage.py` (session profile-update parameter helper usage enforcement),
157157
- `tests/test_session_request_helper_usage.py` (session manager request-helper usage enforcement),
158+
- `tests/test_session_request_internal_reuse.py` (session request-helper internal reuse of shared model raw request helpers),
158159
- `tests/test_session_route_constants_usage.py` (session manager route-constant usage enforcement),
159160
- `tests/test_session_upload_helper_usage.py` (session upload-input normalization helper usage enforcement),
160161
- `tests/test_start_and_wait_default_constants_usage.py` (shared start-and-wait default-constant usage enforcement),

hyperbrowser/client/managers/model_request_utils.py

Lines changed: 100 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,31 @@ def post_model_request(
99
*,
1010
client: Any,
1111
route_path: str,
12-
data: Dict[str, Any],
12+
data: Optional[Dict[str, Any]],
1313
files: Optional[Dict[str, Any]] = None,
1414
model: Type[T],
1515
operation_name: str,
1616
) -> T:
17+
response_data = post_model_response_data(
18+
client=client,
19+
route_path=route_path,
20+
data=data,
21+
files=files,
22+
)
23+
return parse_response_model(
24+
response_data,
25+
model=model,
26+
operation_name=operation_name,
27+
)
28+
29+
30+
def post_model_response_data(
31+
*,
32+
client: Any,
33+
route_path: str,
34+
data: Optional[Dict[str, Any]],
35+
files: Optional[Dict[str, Any]] = None,
36+
) -> Any:
1737
if files is None:
1838
response = client.transport.post(
1939
client._build_url(route_path),
@@ -25,11 +45,7 @@ def post_model_request(
2545
data=data,
2646
files=files,
2747
)
28-
return parse_response_model(
29-
response.data,
30-
model=model,
31-
operation_name=operation_name,
32-
)
48+
return response.data
3349

3450

3551
def get_model_request(
@@ -58,11 +74,17 @@ def get_model_response_data(
5874
params: Optional[Dict[str, Any]] = None,
5975
follow_redirects: bool = False,
6076
) -> Any:
61-
response = client.transport.get(
62-
client._build_url(route_path),
63-
params=params,
64-
follow_redirects=follow_redirects,
65-
)
77+
if follow_redirects:
78+
response = client.transport.get(
79+
client._build_url(route_path),
80+
params=params,
81+
follow_redirects=True,
82+
)
83+
else:
84+
response = client.transport.get(
85+
client._build_url(route_path),
86+
params=params,
87+
)
6688
return response.data
6789

6890

@@ -91,26 +113,60 @@ def put_model_request(
91113
model: Type[T],
92114
operation_name: str,
93115
) -> T:
94-
response = client.transport.put(
95-
client._build_url(route_path),
116+
response_data = put_model_response_data(
117+
client=client,
118+
route_path=route_path,
96119
data=data,
97120
)
98121
return parse_response_model(
99-
response.data,
122+
response_data,
100123
model=model,
101124
operation_name=operation_name,
102125
)
103126

104127

128+
def put_model_response_data(
129+
*,
130+
client: Any,
131+
route_path: str,
132+
data: Optional[Dict[str, Any]],
133+
) -> Any:
134+
response = client.transport.put(
135+
client._build_url(route_path),
136+
data=data,
137+
)
138+
return response.data
139+
140+
105141
async def post_model_request_async(
106142
*,
107143
client: Any,
108144
route_path: str,
109-
data: Dict[str, Any],
145+
data: Optional[Dict[str, Any]],
110146
files: Optional[Dict[str, Any]] = None,
111147
model: Type[T],
112148
operation_name: str,
113149
) -> T:
150+
response_data = await post_model_response_data_async(
151+
client=client,
152+
route_path=route_path,
153+
data=data,
154+
files=files,
155+
)
156+
return parse_response_model(
157+
response_data,
158+
model=model,
159+
operation_name=operation_name,
160+
)
161+
162+
163+
async def post_model_response_data_async(
164+
*,
165+
client: Any,
166+
route_path: str,
167+
data: Optional[Dict[str, Any]],
168+
files: Optional[Dict[str, Any]] = None,
169+
) -> Any:
114170
if files is None:
115171
response = await client.transport.post(
116172
client._build_url(route_path),
@@ -122,11 +178,7 @@ async def post_model_request_async(
122178
data=data,
123179
files=files,
124180
)
125-
return parse_response_model(
126-
response.data,
127-
model=model,
128-
operation_name=operation_name,
129-
)
181+
return response.data
130182

131183

132184
async def get_model_request_async(
@@ -155,11 +207,17 @@ async def get_model_response_data_async(
155207
params: Optional[Dict[str, Any]] = None,
156208
follow_redirects: bool = False,
157209
) -> Any:
158-
response = await client.transport.get(
159-
client._build_url(route_path),
160-
params=params,
161-
follow_redirects=follow_redirects,
162-
)
210+
if follow_redirects:
211+
response = await client.transport.get(
212+
client._build_url(route_path),
213+
params=params,
214+
follow_redirects=True,
215+
)
216+
else:
217+
response = await client.transport.get(
218+
client._build_url(route_path),
219+
params=params,
220+
)
163221
return response.data
164222

165223

@@ -188,17 +246,31 @@ async def put_model_request_async(
188246
model: Type[T],
189247
operation_name: str,
190248
) -> T:
191-
response = await client.transport.put(
192-
client._build_url(route_path),
249+
response_data = await put_model_response_data_async(
250+
client=client,
251+
route_path=route_path,
193252
data=data,
194253
)
195254
return parse_response_model(
196-
response.data,
255+
response_data,
197256
model=model,
198257
operation_name=operation_name,
199258
)
200259

201260

261+
async def put_model_response_data_async(
262+
*,
263+
client: Any,
264+
route_path: str,
265+
data: Optional[Dict[str, Any]],
266+
) -> Any:
267+
response = await client.transport.put(
268+
client._build_url(route_path),
269+
data=data,
270+
)
271+
return response.data
272+
273+
202274
def post_model_request_to_endpoint(
203275
*,
204276
client: Any,

hyperbrowser/client/managers/session_request_utils.py

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

3+
from .model_request_utils import (
4+
get_model_response_data,
5+
get_model_response_data_async,
6+
post_model_response_data,
7+
post_model_response_data_async,
8+
put_model_response_data,
9+
put_model_response_data_async,
10+
)
311
from .session_utils import (
412
parse_session_recordings_response_data,
513
parse_session_response_model,
@@ -15,18 +23,12 @@ def post_session_resource(
1523
data: Optional[Dict[str, Any]] = None,
1624
files: Optional[Dict[str, Any]] = None,
1725
) -> Any:
18-
if files is None:
19-
response = client.transport.post(
20-
client._build_url(route_path),
21-
data=data,
22-
)
23-
else:
24-
response = client.transport.post(
25-
client._build_url(route_path),
26-
data=data,
27-
files=files,
28-
)
29-
return response.data
26+
return post_model_response_data(
27+
client=client,
28+
route_path=route_path,
29+
data=data,
30+
files=files,
31+
)
3032

3133

3234
def get_session_resource(
@@ -36,18 +38,12 @@ def get_session_resource(
3638
params: Optional[Dict[str, Any]] = None,
3739
follow_redirects: bool = False,
3840
) -> Any:
39-
if follow_redirects:
40-
response = client.transport.get(
41-
client._build_url(route_path),
42-
params,
43-
True,
44-
)
45-
else:
46-
response = client.transport.get(
47-
client._build_url(route_path),
48-
params=params,
49-
)
50-
return response.data
41+
return get_model_response_data(
42+
client=client,
43+
route_path=route_path,
44+
params=params,
45+
follow_redirects=follow_redirects,
46+
)
5147

5248

5349
def put_session_resource(
@@ -56,11 +52,11 @@ def put_session_resource(
5652
route_path: str,
5753
data: Optional[Dict[str, Any]] = None,
5854
) -> Any:
59-
response = client.transport.put(
60-
client._build_url(route_path),
55+
return put_model_response_data(
56+
client=client,
57+
route_path=route_path,
6158
data=data,
6259
)
63-
return response.data
6460

6561

6662
async def post_session_resource_async(
@@ -70,18 +66,12 @@ async def post_session_resource_async(
7066
data: Optional[Dict[str, Any]] = None,
7167
files: Optional[Dict[str, Any]] = None,
7268
) -> Any:
73-
if files is None:
74-
response = await client.transport.post(
75-
client._build_url(route_path),
76-
data=data,
77-
)
78-
else:
79-
response = await client.transport.post(
80-
client._build_url(route_path),
81-
data=data,
82-
files=files,
83-
)
84-
return response.data
69+
return await post_model_response_data_async(
70+
client=client,
71+
route_path=route_path,
72+
data=data,
73+
files=files,
74+
)
8575

8676

8777
async def get_session_resource_async(
@@ -91,18 +81,12 @@ async def get_session_resource_async(
9181
params: Optional[Dict[str, Any]] = None,
9282
follow_redirects: bool = False,
9383
) -> Any:
94-
if follow_redirects:
95-
response = await client.transport.get(
96-
client._build_url(route_path),
97-
params,
98-
True,
99-
)
100-
else:
101-
response = await client.transport.get(
102-
client._build_url(route_path),
103-
params=params,
104-
)
105-
return response.data
84+
return await get_model_response_data_async(
85+
client=client,
86+
route_path=route_path,
87+
params=params,
88+
follow_redirects=follow_redirects,
89+
)
10690

10791

10892
async def put_session_resource_async(
@@ -111,11 +95,11 @@ async def put_session_resource_async(
11195
route_path: str,
11296
data: Optional[Dict[str, Any]] = None,
11397
) -> Any:
114-
response = await client.transport.put(
115-
client._build_url(route_path),
98+
return await put_model_response_data_async(
99+
client=client,
100+
route_path=route_path,
116101
data=data,
117102
)
118-
return response.data
119103

120104

121105
def post_session_model(

tests/test_architecture_marker_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"tests/test_schema_injection_helper_usage.py",
8686
"tests/test_session_operation_metadata_usage.py",
8787
"tests/test_session_parse_usage_boundary.py",
88+
"tests/test_session_request_internal_reuse.py",
8889
"tests/test_session_route_constants_usage.py",
8990
"tests/test_session_request_helper_usage.py",
9091
"tests/test_session_profile_update_helper_usage.py",

0 commit comments

Comments
 (0)