Skip to content

Commit bf2aa7c

Browse files
Harden session manager parameter serialization
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 8d69197 commit bf2aa7c

File tree

3 files changed

+591
-16
lines changed

3 files changed

+591
-16
lines changed

hyperbrowser/client/managers/async_manager/session.py

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,20 @@ async def list(
3636
params: Optional[SessionEventLogListParams] = None,
3737
) -> SessionEventLogListResponse:
3838
params_obj = params or SessionEventLogListParams()
39+
try:
40+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
41+
except HyperbrowserError:
42+
raise
43+
except Exception as exc:
44+
raise HyperbrowserError(
45+
"Failed to serialize session event log params",
46+
original_error=exc,
47+
) from exc
48+
if type(query_params) is not dict:
49+
raise HyperbrowserError("Failed to serialize session event log params")
3950
response = await self._client.transport.get(
4051
self._client._build_url(f"/session/{session_id}/event-logs"),
41-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
52+
params=query_params,
4253
)
4354
return parse_session_response_model(
4455
response.data,
@@ -57,13 +68,22 @@ def __init__(self, client):
5768
async def create(
5869
self, params: Optional[CreateSessionParams] = None
5970
) -> SessionDetail:
71+
payload = {}
72+
if params is not None:
73+
try:
74+
payload = params.model_dump(exclude_none=True, by_alias=True)
75+
except HyperbrowserError:
76+
raise
77+
except Exception as exc:
78+
raise HyperbrowserError(
79+
"Failed to serialize session create params",
80+
original_error=exc,
81+
) from exc
82+
if type(payload) is not dict:
83+
raise HyperbrowserError("Failed to serialize session create params")
6084
response = await self._client.transport.post(
6185
self._client._build_url("/session"),
62-
data=(
63-
{}
64-
if params is None
65-
else params.model_dump(exclude_none=True, by_alias=True)
66-
),
86+
data=payload,
6787
)
6888
return parse_session_response_model(
6989
response.data,
@@ -75,9 +95,20 @@ async def get(
7595
self, id: str, params: Optional[SessionGetParams] = None
7696
) -> SessionDetail:
7797
params_obj = params or SessionGetParams()
98+
try:
99+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
100+
except HyperbrowserError:
101+
raise
102+
except Exception as exc:
103+
raise HyperbrowserError(
104+
"Failed to serialize session get params",
105+
original_error=exc,
106+
) from exc
107+
if type(query_params) is not dict:
108+
raise HyperbrowserError("Failed to serialize session get params")
78109
response = await self._client.transport.get(
79110
self._client._build_url(f"/session/{id}"),
80-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
111+
params=query_params,
81112
)
82113
return parse_session_response_model(
83114
response.data,
@@ -99,9 +130,20 @@ async def list(
99130
self, params: Optional[SessionListParams] = None
100131
) -> SessionListResponse:
101132
params_obj = params or SessionListParams()
133+
try:
134+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
135+
except HyperbrowserError:
136+
raise
137+
except Exception as exc:
138+
raise HyperbrowserError(
139+
"Failed to serialize session list params",
140+
original_error=exc,
141+
) from exc
142+
if type(query_params) is not dict:
143+
raise HyperbrowserError("Failed to serialize session list params")
102144
response = await self._client.transport.get(
103145
self._client._build_url("/sessions"),
104-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
146+
params=query_params,
105147
)
106148
return parse_session_response_model(
107149
response.data,

hyperbrowser/client/managers/sync_manager/session.py

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,20 @@ def list(
3636
params: Optional[SessionEventLogListParams] = None,
3737
) -> SessionEventLogListResponse:
3838
params_obj = params or SessionEventLogListParams()
39+
try:
40+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
41+
except HyperbrowserError:
42+
raise
43+
except Exception as exc:
44+
raise HyperbrowserError(
45+
"Failed to serialize session event log params",
46+
original_error=exc,
47+
) from exc
48+
if type(query_params) is not dict:
49+
raise HyperbrowserError("Failed to serialize session event log params")
3950
response = self._client.transport.get(
4051
self._client._build_url(f"/session/{session_id}/event-logs"),
41-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
52+
params=query_params,
4253
)
4354
return parse_session_response_model(
4455
response.data,
@@ -55,13 +66,22 @@ def __init__(self, client):
5566
self.event_logs = SessionEventLogsManager(client)
5667

5768
def create(self, params: Optional[CreateSessionParams] = None) -> SessionDetail:
69+
payload = {}
70+
if params is not None:
71+
try:
72+
payload = params.model_dump(exclude_none=True, by_alias=True)
73+
except HyperbrowserError:
74+
raise
75+
except Exception as exc:
76+
raise HyperbrowserError(
77+
"Failed to serialize session create params",
78+
original_error=exc,
79+
) from exc
80+
if type(payload) is not dict:
81+
raise HyperbrowserError("Failed to serialize session create params")
5882
response = self._client.transport.post(
5983
self._client._build_url("/session"),
60-
data=(
61-
{}
62-
if params is None
63-
else params.model_dump(exclude_none=True, by_alias=True)
64-
),
84+
data=payload,
6585
)
6686
return parse_session_response_model(
6787
response.data,
@@ -71,9 +91,20 @@ def create(self, params: Optional[CreateSessionParams] = None) -> SessionDetail:
7191

7292
def get(self, id: str, params: Optional[SessionGetParams] = None) -> SessionDetail:
7393
params_obj = params or SessionGetParams()
94+
try:
95+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
96+
except HyperbrowserError:
97+
raise
98+
except Exception as exc:
99+
raise HyperbrowserError(
100+
"Failed to serialize session get params",
101+
original_error=exc,
102+
) from exc
103+
if type(query_params) is not dict:
104+
raise HyperbrowserError("Failed to serialize session get params")
74105
response = self._client.transport.get(
75106
self._client._build_url(f"/session/{id}"),
76-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
107+
params=query_params,
77108
)
78109
return parse_session_response_model(
79110
response.data,
@@ -93,9 +124,20 @@ def stop(self, id: str) -> BasicResponse:
93124

94125
def list(self, params: Optional[SessionListParams] = None) -> SessionListResponse:
95126
params_obj = params or SessionListParams()
127+
try:
128+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
129+
except HyperbrowserError:
130+
raise
131+
except Exception as exc:
132+
raise HyperbrowserError(
133+
"Failed to serialize session list params",
134+
original_error=exc,
135+
) from exc
136+
if type(query_params) is not dict:
137+
raise HyperbrowserError("Failed to serialize session list params")
96138
response = self._client.transport.get(
97139
self._client._build_url("/sessions"),
98-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
140+
params=query_params,
99141
)
100142
return parse_session_response_model(
101143
response.data,

0 commit comments

Comments
 (0)