Skip to content

Commit 02ac62a

Browse files
Centralize session route and operation metadata constants
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 3745eba commit 02ac62a

11 files changed

+264
-46
lines changed

CONTRIBUTING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ This runs lint, format checks, compile checks, tests, and package build.
132132
- `tests/test_pyproject_architecture_marker.py` (pytest marker registration enforcement),
133133
- `tests/test_readme_examples_listing.py` (README example-listing consistency enforcement),
134134
- `tests/test_schema_injection_helper_usage.py` (shared schema injection helper usage enforcement in payload builders),
135+
- `tests/test_session_operation_metadata_usage.py` (session manager operation-metadata usage enforcement),
135136
- `tests/test_session_profile_update_helper_usage.py` (session profile-update parameter helper usage enforcement),
137+
- `tests/test_session_route_constants_usage.py` (session manager route-constant usage enforcement),
136138
- `tests/test_session_upload_helper_usage.py` (session upload-input normalization helper usage enforcement),
137139
- `tests/test_start_and_wait_default_constants_usage.py` (shared start-and-wait default-constant usage enforcement),
138140
- `tests/test_start_job_context_helper_usage.py` (shared started-job context helper usage enforcement),

hyperbrowser/client/managers/async_manager/session.py

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@
88
)
99
from ..session_profile_update_utils import resolve_update_profile_params
1010
from ..session_upload_utils import open_upload_files_from_input
11+
from ..session_operation_metadata import SESSION_OPERATION_METADATA
12+
from ..session_route_constants import (
13+
SESSION_DOWNLOADS_URL_ROUTE_SUFFIX,
14+
SESSION_EVENT_LOGS_ROUTE_SUFFIX,
15+
SESSION_EXTEND_ROUTE_SUFFIX,
16+
SESSION_RECORDING_ROUTE_SUFFIX,
17+
SESSION_RECORDING_URL_ROUTE_SUFFIX,
18+
SESSION_ROUTE_PREFIX,
19+
SESSION_STOP_ROUTE_SUFFIX,
20+
SESSION_UPDATE_ROUTE_SUFFIX,
21+
SESSION_UPLOADS_ROUTE_SUFFIX,
22+
SESSION_VIDEO_RECORDING_URL_ROUTE_SUFFIX,
23+
SESSIONS_ROUTE_PATH,
24+
)
1125
from ..session_utils import (
1226
parse_session_recordings_response_data,
1327
parse_session_response_model,
@@ -31,6 +45,9 @@
3145

3246

3347
class SessionEventLogsManager:
48+
_OPERATION_METADATA = SESSION_OPERATION_METADATA
49+
_ROUTE_PREFIX = SESSION_ROUTE_PREFIX
50+
3451
def __init__(self, client):
3552
self._client = client
3653

@@ -45,18 +62,23 @@ async def list(
4562
error_message="Failed to serialize session event log params",
4663
)
4764
response = await self._client.transport.get(
48-
self._client._build_url(f"/session/{session_id}/event-logs"),
65+
self._client._build_url(
66+
f"{self._ROUTE_PREFIX}/{session_id}{SESSION_EVENT_LOGS_ROUTE_SUFFIX}"
67+
),
4968
params=query_params,
5069
)
5170
return parse_session_response_model(
5271
response.data,
5372
model=SessionEventLogListResponse,
54-
operation_name="session event logs",
73+
operation_name=self._OPERATION_METADATA.event_logs_operation_name,
5574
)
5675

5776

5877
class SessionManager:
5978
_has_warned_update_profile_params_boolean_deprecated: bool = False
79+
_OPERATION_METADATA = SESSION_OPERATION_METADATA
80+
_ROUTE_PREFIX = SESSION_ROUTE_PREFIX
81+
_LIST_ROUTE_PATH = SESSIONS_ROUTE_PATH
6082

6183
def __init__(self, client):
6284
self._client = client
@@ -70,13 +92,13 @@ async def create(
7092
error_message="Failed to serialize session create params",
7193
)
7294
response = await self._client.transport.post(
73-
self._client._build_url("/session"),
95+
self._client._build_url(self._ROUTE_PREFIX),
7496
data=payload,
7597
)
7698
return parse_session_response_model(
7799
response.data,
78100
model=SessionDetail,
79-
operation_name="session detail",
101+
operation_name=self._OPERATION_METADATA.detail_operation_name,
80102
)
81103

82104
async def get(
@@ -88,23 +110,23 @@ async def get(
88110
error_message="Failed to serialize session get params",
89111
)
90112
response = await self._client.transport.get(
91-
self._client._build_url(f"/session/{id}"),
113+
self._client._build_url(f"{self._ROUTE_PREFIX}/{id}"),
92114
params=query_params,
93115
)
94116
return parse_session_response_model(
95117
response.data,
96118
model=SessionDetail,
97-
operation_name="session detail",
119+
operation_name=self._OPERATION_METADATA.detail_operation_name,
98120
)
99121

100122
async def stop(self, id: str) -> BasicResponse:
101123
response = await self._client.transport.put(
102-
self._client._build_url(f"/session/{id}/stop")
124+
self._client._build_url(f"{self._ROUTE_PREFIX}/{id}{SESSION_STOP_ROUTE_SUFFIX}")
103125
)
104126
return parse_session_response_model(
105127
response.data,
106128
model=BasicResponse,
107-
operation_name="session stop",
129+
operation_name=self._OPERATION_METADATA.stop_operation_name,
108130
)
109131

110132
async def list(
@@ -116,77 +138,91 @@ async def list(
116138
error_message="Failed to serialize session list params",
117139
)
118140
response = await self._client.transport.get(
119-
self._client._build_url("/sessions"),
141+
self._client._build_url(self._LIST_ROUTE_PATH),
120142
params=query_params,
121143
)
122144
return parse_session_response_model(
123145
response.data,
124146
model=SessionListResponse,
125-
operation_name="session list",
147+
operation_name=self._OPERATION_METADATA.list_operation_name,
126148
)
127149

128150
async def get_recording(self, id: str) -> List[SessionRecording]:
129151
response = await self._client.transport.get(
130-
self._client._build_url(f"/session/{id}/recording"), None, True
152+
self._client._build_url(
153+
f"{self._ROUTE_PREFIX}/{id}{SESSION_RECORDING_ROUTE_SUFFIX}"
154+
),
155+
None,
156+
True,
131157
)
132158
return parse_session_recordings_response_data(response.data)
133159

134160
async def get_recording_url(self, id: str) -> GetSessionRecordingUrlResponse:
135161
response = await self._client.transport.get(
136-
self._client._build_url(f"/session/{id}/recording-url")
162+
self._client._build_url(
163+
f"{self._ROUTE_PREFIX}/{id}{SESSION_RECORDING_URL_ROUTE_SUFFIX}"
164+
)
137165
)
138166
return parse_session_response_model(
139167
response.data,
140168
model=GetSessionRecordingUrlResponse,
141-
operation_name="session recording url",
169+
operation_name=self._OPERATION_METADATA.recording_url_operation_name,
142170
)
143171

144172
async def get_video_recording_url(
145173
self, id: str
146174
) -> GetSessionVideoRecordingUrlResponse:
147175
response = await self._client.transport.get(
148-
self._client._build_url(f"/session/{id}/video-recording-url")
176+
self._client._build_url(
177+
f"{self._ROUTE_PREFIX}/{id}{SESSION_VIDEO_RECORDING_URL_ROUTE_SUFFIX}"
178+
)
149179
)
150180
return parse_session_response_model(
151181
response.data,
152182
model=GetSessionVideoRecordingUrlResponse,
153-
operation_name="session video recording url",
183+
operation_name=self._OPERATION_METADATA.video_recording_url_operation_name,
154184
)
155185

156186
async def get_downloads_url(self, id: str) -> GetSessionDownloadsUrlResponse:
157187
response = await self._client.transport.get(
158-
self._client._build_url(f"/session/{id}/downloads-url")
188+
self._client._build_url(
189+
f"{self._ROUTE_PREFIX}/{id}{SESSION_DOWNLOADS_URL_ROUTE_SUFFIX}"
190+
)
159191
)
160192
return parse_session_response_model(
161193
response.data,
162194
model=GetSessionDownloadsUrlResponse,
163-
operation_name="session downloads url",
195+
operation_name=self._OPERATION_METADATA.downloads_url_operation_name,
164196
)
165197

166198
async def upload_file(
167199
self, id: str, file_input: Union[str, PathLike[str], IO]
168200
) -> UploadFileResponse:
169201
with open_upload_files_from_input(file_input) as files:
170202
response = await self._client.transport.post(
171-
self._client._build_url(f"/session/{id}/uploads"),
203+
self._client._build_url(
204+
f"{self._ROUTE_PREFIX}/{id}{SESSION_UPLOADS_ROUTE_SUFFIX}"
205+
),
172206
files=files,
173207
)
174208

175209
return parse_session_response_model(
176210
response.data,
177211
model=UploadFileResponse,
178-
operation_name="session upload file",
212+
operation_name=self._OPERATION_METADATA.upload_file_operation_name,
179213
)
180214

181215
async def extend_session(self, id: str, duration_minutes: int) -> BasicResponse:
182216
response = await self._client.transport.put(
183-
self._client._build_url(f"/session/{id}/extend-session"),
217+
self._client._build_url(
218+
f"{self._ROUTE_PREFIX}/{id}{SESSION_EXTEND_ROUTE_SUFFIX}"
219+
),
184220
data={"durationMinutes": duration_minutes},
185221
)
186222
return parse_session_response_model(
187223
response.data,
188224
model=BasicResponse,
189-
operation_name="session extend",
225+
operation_name=self._OPERATION_METADATA.extend_operation_name,
190226
)
191227

192228
@overload
@@ -218,7 +254,9 @@ async def update_profile_params(
218254
)
219255

220256
response = await self._client.transport.put(
221-
self._client._build_url(f"/session/{id}/update"),
257+
self._client._build_url(
258+
f"{self._ROUTE_PREFIX}/{id}{SESSION_UPDATE_ROUTE_SUFFIX}"
259+
),
222260
data={
223261
"type": "profile",
224262
"params": serialized_params,
@@ -227,7 +265,7 @@ async def update_profile_params(
227265
return parse_session_response_model(
228266
response.data,
229267
model=BasicResponse,
230-
operation_name="session update profile",
268+
operation_name=self._OPERATION_METADATA.update_profile_operation_name,
231269
)
232270

233271
def _warn_update_profile_params_boolean_deprecated(self) -> None:
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from dataclasses import dataclass
2+
3+
4+
@dataclass(frozen=True)
5+
class SessionOperationMetadata:
6+
event_logs_operation_name: str
7+
detail_operation_name: str
8+
stop_operation_name: str
9+
list_operation_name: str
10+
recording_url_operation_name: str
11+
video_recording_url_operation_name: str
12+
downloads_url_operation_name: str
13+
upload_file_operation_name: str
14+
extend_operation_name: str
15+
update_profile_operation_name: str
16+
17+
18+
SESSION_OPERATION_METADATA = SessionOperationMetadata(
19+
event_logs_operation_name="session event logs",
20+
detail_operation_name="session detail",
21+
stop_operation_name="session stop",
22+
list_operation_name="session list",
23+
recording_url_operation_name="session recording url",
24+
video_recording_url_operation_name="session video recording url",
25+
downloads_url_operation_name="session downloads url",
26+
upload_file_operation_name="session upload file",
27+
extend_operation_name="session extend",
28+
update_profile_operation_name="session update profile",
29+
)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
SESSION_ROUTE_PREFIX = "/session"
2+
SESSIONS_ROUTE_PATH = "/sessions"
3+
4+
SESSION_EVENT_LOGS_ROUTE_SUFFIX = "/event-logs"
5+
SESSION_STOP_ROUTE_SUFFIX = "/stop"
6+
SESSION_RECORDING_ROUTE_SUFFIX = "/recording"
7+
SESSION_RECORDING_URL_ROUTE_SUFFIX = "/recording-url"
8+
SESSION_VIDEO_RECORDING_URL_ROUTE_SUFFIX = "/video-recording-url"
9+
SESSION_DOWNLOADS_URL_ROUTE_SUFFIX = "/downloads-url"
10+
SESSION_UPLOADS_ROUTE_SUFFIX = "/uploads"
11+
SESSION_EXTEND_ROUTE_SUFFIX = "/extend-session"
12+
SESSION_UPDATE_ROUTE_SUFFIX = "/update"

0 commit comments

Comments
 (0)