Skip to content

Commit f679dc8

Browse files
Harden profile manager param serialization
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent fd3129f commit f679dc8

3 files changed

Lines changed: 436 additions & 12 deletions

File tree

hyperbrowser/client/managers/async_manager/profile.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Optional
22

3+
from hyperbrowser.exceptions import HyperbrowserError
34
from hyperbrowser.models.profile import (
45
CreateProfileParams,
56
CreateProfileResponse,
@@ -18,13 +19,22 @@ def __init__(self, client):
1819
async def create(
1920
self, params: Optional[CreateProfileParams] = None
2021
) -> CreateProfileResponse:
22+
payload = {}
23+
if params is not None:
24+
try:
25+
payload = params.model_dump(exclude_none=True, by_alias=True)
26+
except HyperbrowserError:
27+
raise
28+
except Exception as exc:
29+
raise HyperbrowserError(
30+
"Failed to serialize profile create params",
31+
original_error=exc,
32+
) from exc
33+
if type(payload) is not dict:
34+
raise HyperbrowserError("Failed to serialize profile create params")
2135
response = await self._client.transport.post(
2236
self._client._build_url("/profile"),
23-
data=(
24-
{}
25-
if params is None
26-
else params.model_dump(exclude_none=True, by_alias=True)
27-
),
37+
data=payload,
2838
)
2939
return parse_response_model(
3040
response.data,
@@ -56,9 +66,20 @@ async def list(
5666
self, params: Optional[ProfileListParams] = None
5767
) -> ProfileListResponse:
5868
params_obj = params or ProfileListParams()
69+
try:
70+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
71+
except HyperbrowserError:
72+
raise
73+
except Exception as exc:
74+
raise HyperbrowserError(
75+
"Failed to serialize profile list params",
76+
original_error=exc,
77+
) from exc
78+
if type(query_params) is not dict:
79+
raise HyperbrowserError("Failed to serialize profile list params")
5980
response = await self._client.transport.get(
6081
self._client._build_url("/profiles"),
61-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
82+
params=query_params,
6283
)
6384
return parse_response_model(
6485
response.data,

hyperbrowser/client/managers/sync_manager/profile.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from typing import Optional
22

3+
from hyperbrowser.exceptions import HyperbrowserError
34
from hyperbrowser.models.profile import (
45
CreateProfileParams,
56
CreateProfileResponse,
@@ -18,13 +19,22 @@ def __init__(self, client):
1819
def create(
1920
self, params: Optional[CreateProfileParams] = None
2021
) -> CreateProfileResponse:
22+
payload = {}
23+
if params is not None:
24+
try:
25+
payload = params.model_dump(exclude_none=True, by_alias=True)
26+
except HyperbrowserError:
27+
raise
28+
except Exception as exc:
29+
raise HyperbrowserError(
30+
"Failed to serialize profile create params",
31+
original_error=exc,
32+
) from exc
33+
if type(payload) is not dict:
34+
raise HyperbrowserError("Failed to serialize profile create params")
2135
response = self._client.transport.post(
2236
self._client._build_url("/profile"),
23-
data=(
24-
{}
25-
if params is None
26-
else params.model_dump(exclude_none=True, by_alias=True)
27-
),
37+
data=payload,
2838
)
2939
return parse_response_model(
3040
response.data,
@@ -54,9 +64,20 @@ def delete(self, id: str) -> BasicResponse:
5464

5565
def list(self, params: Optional[ProfileListParams] = None) -> ProfileListResponse:
5666
params_obj = params or ProfileListParams()
67+
try:
68+
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
69+
except HyperbrowserError:
70+
raise
71+
except Exception as exc:
72+
raise HyperbrowserError(
73+
"Failed to serialize profile list params",
74+
original_error=exc,
75+
) from exc
76+
if type(query_params) is not dict:
77+
raise HyperbrowserError("Failed to serialize profile list params")
5778
response = self._client.transport.get(
5879
self._client._build_url("/profiles"),
59-
params=params_obj.model_dump(exclude_none=True, by_alias=True),
80+
params=query_params,
6081
)
6182
return parse_response_model(
6283
response.data,

0 commit comments

Comments
 (0)