Skip to content

Commit e801443

Browse files
Consolidate session parsing through request helpers
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 0753ab9 commit e801443

File tree

6 files changed

+338
-125
lines changed

6 files changed

+338
-125
lines changed

hyperbrowser/client/managers/async_manager/session.py

Lines changed: 18 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
)
99
from ..session_profile_update_utils import resolve_update_profile_params
1010
from ..session_request_utils import (
11-
get_session_resource_async,
12-
post_session_resource_async,
13-
put_session_resource_async,
11+
get_session_model_async,
12+
get_session_recordings_async,
13+
post_session_model_async,
14+
put_session_model_async,
1415
)
1516
from ..session_upload_utils import open_upload_files_from_input
1617
from ..session_operation_metadata import SESSION_OPERATION_METADATA
@@ -27,10 +28,6 @@
2728
SESSION_VIDEO_RECORDING_URL_ROUTE_SUFFIX,
2829
SESSIONS_ROUTE_PATH,
2930
)
30-
from ..session_utils import (
31-
parse_session_recordings_response_data,
32-
parse_session_response_model,
33-
)
3431
from ....models.session import (
3532
BasicResponse,
3633
CreateSessionParams,
@@ -66,13 +63,10 @@ async def list(
6663
default_factory=SessionEventLogListParams,
6764
error_message="Failed to serialize session event log params",
6865
)
69-
response_data = await get_session_resource_async(
66+
return await get_session_model_async(
7067
client=self._client,
7168
route_path=f"{self._ROUTE_PREFIX}/{session_id}{SESSION_EVENT_LOGS_ROUTE_SUFFIX}",
7269
params=query_params,
73-
)
74-
return parse_session_response_model(
75-
response_data,
7670
model=SessionEventLogListResponse,
7771
operation_name=self._OPERATION_METADATA.event_logs_operation_name,
7872
)
@@ -95,13 +89,10 @@ async def create(
9589
params,
9690
error_message="Failed to serialize session create params",
9791
)
98-
response_data = await post_session_resource_async(
92+
return await post_session_model_async(
9993
client=self._client,
10094
route_path=self._ROUTE_PREFIX,
10195
data=payload,
102-
)
103-
return parse_session_response_model(
104-
response_data,
10596
model=SessionDetail,
10697
operation_name=self._OPERATION_METADATA.detail_operation_name,
10798
)
@@ -114,24 +105,18 @@ async def get(
114105
default_factory=SessionGetParams,
115106
error_message="Failed to serialize session get params",
116107
)
117-
response_data = await get_session_resource_async(
108+
return await get_session_model_async(
118109
client=self._client,
119110
route_path=f"{self._ROUTE_PREFIX}/{id}",
120111
params=query_params,
121-
)
122-
return parse_session_response_model(
123-
response_data,
124112
model=SessionDetail,
125113
operation_name=self._OPERATION_METADATA.detail_operation_name,
126114
)
127115

128116
async def stop(self, id: str) -> BasicResponse:
129-
response_data = await put_session_resource_async(
117+
return await put_session_model_async(
130118
client=self._client,
131119
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_STOP_ROUTE_SUFFIX}",
132-
)
133-
return parse_session_response_model(
134-
response_data,
135120
model=BasicResponse,
136121
operation_name=self._OPERATION_METADATA.stop_operation_name,
137122
)
@@ -144,56 +129,42 @@ async def list(
144129
default_factory=SessionListParams,
145130
error_message="Failed to serialize session list params",
146131
)
147-
response_data = await get_session_resource_async(
132+
return await get_session_model_async(
148133
client=self._client,
149134
route_path=self._LIST_ROUTE_PATH,
150135
params=query_params,
151-
)
152-
return parse_session_response_model(
153-
response_data,
154136
model=SessionListResponse,
155137
operation_name=self._OPERATION_METADATA.list_operation_name,
156138
)
157139

158140
async def get_recording(self, id: str) -> List[SessionRecording]:
159-
response_data = await get_session_resource_async(
141+
return await get_session_recordings_async(
160142
client=self._client,
161143
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_RECORDING_ROUTE_SUFFIX}",
162-
follow_redirects=True,
163144
)
164-
return parse_session_recordings_response_data(response_data)
165145

166146
async def get_recording_url(self, id: str) -> GetSessionRecordingUrlResponse:
167-
response_data = await get_session_resource_async(
147+
return await get_session_model_async(
168148
client=self._client,
169149
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_RECORDING_URL_ROUTE_SUFFIX}",
170-
)
171-
return parse_session_response_model(
172-
response_data,
173150
model=GetSessionRecordingUrlResponse,
174151
operation_name=self._OPERATION_METADATA.recording_url_operation_name,
175152
)
176153

177154
async def get_video_recording_url(
178155
self, id: str
179156
) -> GetSessionVideoRecordingUrlResponse:
180-
response_data = await get_session_resource_async(
157+
return await get_session_model_async(
181158
client=self._client,
182159
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_VIDEO_RECORDING_URL_ROUTE_SUFFIX}",
183-
)
184-
return parse_session_response_model(
185-
response_data,
186160
model=GetSessionVideoRecordingUrlResponse,
187161
operation_name=self._OPERATION_METADATA.video_recording_url_operation_name,
188162
)
189163

190164
async def get_downloads_url(self, id: str) -> GetSessionDownloadsUrlResponse:
191-
response_data = await get_session_resource_async(
165+
return await get_session_model_async(
192166
client=self._client,
193167
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_DOWNLOADS_URL_ROUTE_SUFFIX}",
194-
)
195-
return parse_session_response_model(
196-
response_data,
197168
model=GetSessionDownloadsUrlResponse,
198169
operation_name=self._OPERATION_METADATA.downloads_url_operation_name,
199170
)
@@ -202,26 +173,19 @@ async def upload_file(
202173
self, id: str, file_input: Union[str, PathLike[str], IO]
203174
) -> UploadFileResponse:
204175
with open_upload_files_from_input(file_input) as files:
205-
response_data = await post_session_resource_async(
176+
return await post_session_model_async(
206177
client=self._client,
207178
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_UPLOADS_ROUTE_SUFFIX}",
208179
files=files,
180+
model=UploadFileResponse,
181+
operation_name=self._OPERATION_METADATA.upload_file_operation_name,
209182
)
210183

211-
return parse_session_response_model(
212-
response_data,
213-
model=UploadFileResponse,
214-
operation_name=self._OPERATION_METADATA.upload_file_operation_name,
215-
)
216-
217184
async def extend_session(self, id: str, duration_minutes: int) -> BasicResponse:
218-
response_data = await put_session_resource_async(
185+
return await put_session_model_async(
219186
client=self._client,
220187
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_EXTEND_ROUTE_SUFFIX}",
221188
data={"durationMinutes": duration_minutes},
222-
)
223-
return parse_session_response_model(
224-
response_data,
225189
model=BasicResponse,
226190
operation_name=self._OPERATION_METADATA.extend_operation_name,
227191
)
@@ -254,16 +218,13 @@ async def update_profile_params(
254218
error_message="Failed to serialize update_profile_params payload",
255219
)
256220

257-
response_data = await put_session_resource_async(
221+
return await put_session_model_async(
258222
client=self._client,
259223
route_path=f"{self._ROUTE_PREFIX}/{id}{SESSION_UPDATE_ROUTE_SUFFIX}",
260224
data={
261225
"type": "profile",
262226
"params": serialized_params,
263227
},
264-
)
265-
return parse_session_response_model(
266-
response_data,
267228
model=BasicResponse,
268229
operation_name=self._OPERATION_METADATA.update_profile_operation_name,
269230
)

hyperbrowser/client/managers/session_request_utils.py

Lines changed: 158 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
from typing import Any, Dict, Optional
1+
from typing import Any, Dict, Optional, Type, TypeVar
2+
3+
from .session_utils import (
4+
parse_session_recordings_response_data,
5+
parse_session_response_model,
6+
)
7+
8+
T = TypeVar("T")
29

310

411
def post_session_resource(
@@ -109,3 +116,153 @@ async def put_session_resource_async(
109116
data=data,
110117
)
111118
return response.data
119+
120+
121+
def post_session_model(
122+
*,
123+
client: Any,
124+
route_path: str,
125+
data: Optional[Dict[str, Any]] = None,
126+
files: Optional[Dict[str, Any]] = None,
127+
model: Type[T],
128+
operation_name: str,
129+
) -> T:
130+
response_data = post_session_resource(
131+
client=client,
132+
route_path=route_path,
133+
data=data,
134+
files=files,
135+
)
136+
return parse_session_response_model(
137+
response_data,
138+
model=model,
139+
operation_name=operation_name,
140+
)
141+
142+
143+
def get_session_model(
144+
*,
145+
client: Any,
146+
route_path: str,
147+
params: Optional[Dict[str, Any]] = None,
148+
model: Type[T],
149+
operation_name: str,
150+
) -> T:
151+
response_data = get_session_resource(
152+
client=client,
153+
route_path=route_path,
154+
params=params,
155+
)
156+
return parse_session_response_model(
157+
response_data,
158+
model=model,
159+
operation_name=operation_name,
160+
)
161+
162+
163+
def put_session_model(
164+
*,
165+
client: Any,
166+
route_path: str,
167+
data: Optional[Dict[str, Any]] = None,
168+
model: Type[T],
169+
operation_name: str,
170+
) -> T:
171+
response_data = put_session_resource(
172+
client=client,
173+
route_path=route_path,
174+
data=data,
175+
)
176+
return parse_session_response_model(
177+
response_data,
178+
model=model,
179+
operation_name=operation_name,
180+
)
181+
182+
183+
def get_session_recordings(
184+
*,
185+
client: Any,
186+
route_path: str,
187+
) -> Any:
188+
response_data = get_session_resource(
189+
client=client,
190+
route_path=route_path,
191+
follow_redirects=True,
192+
)
193+
return parse_session_recordings_response_data(response_data)
194+
195+
196+
async def post_session_model_async(
197+
*,
198+
client: Any,
199+
route_path: str,
200+
data: Optional[Dict[str, Any]] = None,
201+
files: Optional[Dict[str, Any]] = None,
202+
model: Type[T],
203+
operation_name: str,
204+
) -> T:
205+
response_data = await post_session_resource_async(
206+
client=client,
207+
route_path=route_path,
208+
data=data,
209+
files=files,
210+
)
211+
return parse_session_response_model(
212+
response_data,
213+
model=model,
214+
operation_name=operation_name,
215+
)
216+
217+
218+
async def get_session_model_async(
219+
*,
220+
client: Any,
221+
route_path: str,
222+
params: Optional[Dict[str, Any]] = None,
223+
model: Type[T],
224+
operation_name: str,
225+
) -> T:
226+
response_data = await get_session_resource_async(
227+
client=client,
228+
route_path=route_path,
229+
params=params,
230+
)
231+
return parse_session_response_model(
232+
response_data,
233+
model=model,
234+
operation_name=operation_name,
235+
)
236+
237+
238+
async def put_session_model_async(
239+
*,
240+
client: Any,
241+
route_path: str,
242+
data: Optional[Dict[str, Any]] = None,
243+
model: Type[T],
244+
operation_name: str,
245+
) -> T:
246+
response_data = await put_session_resource_async(
247+
client=client,
248+
route_path=route_path,
249+
data=data,
250+
)
251+
return parse_session_response_model(
252+
response_data,
253+
model=model,
254+
operation_name=operation_name,
255+
)
256+
257+
258+
async def get_session_recordings_async(
259+
*,
260+
client: Any,
261+
route_path: str,
262+
) -> Any:
263+
response_data = await get_session_resource_async(
264+
client=client,
265+
route_path=route_path,
266+
follow_redirects=True,
267+
)
268+
return parse_session_recordings_response_data(response_data)

0 commit comments

Comments
 (0)