Skip to content

Commit e6ff900

Browse files
Introduce shared manager serialization helper
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent bf2aa7c commit e6ff900

File tree

7 files changed

+110
-224
lines changed

7 files changed

+110
-224
lines changed

hyperbrowser/client/managers/async_manager/crawl.py

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

3-
from hyperbrowser.exceptions import HyperbrowserError
43
from hyperbrowser.models.consts import POLLING_ATTEMPTS
54
from ...polling import (
65
build_fetch_operation_name,
@@ -10,6 +9,7 @@
109
poll_until_terminal_status_async,
1110
retry_operation_async,
1211
)
12+
from ..serialization_utils import serialize_model_dump_to_dict
1313
from ..response_utils import parse_response_model
1414
from ....models.crawl import (
1515
CrawlJobResponse,
@@ -25,17 +25,10 @@ def __init__(self, client):
2525
self._client = client
2626

2727
async def start(self, params: StartCrawlJobParams) -> StartCrawlJobResponse:
28-
try:
29-
payload = params.model_dump(exclude_none=True, by_alias=True)
30-
except HyperbrowserError:
31-
raise
32-
except Exception as exc:
33-
raise HyperbrowserError(
34-
"Failed to serialize crawl start params",
35-
original_error=exc,
36-
) from exc
37-
if type(payload) is not dict:
38-
raise HyperbrowserError("Failed to serialize crawl start params")
28+
payload = serialize_model_dump_to_dict(
29+
params,
30+
error_message="Failed to serialize crawl start params",
31+
)
3932
response = await self._client.transport.post(
4033
self._client._build_url("/crawl"),
4134
data=payload,
@@ -60,17 +53,10 @@ async def get(
6053
self, job_id: str, params: Optional[GetCrawlJobParams] = None
6154
) -> CrawlJobResponse:
6255
params_obj = params or GetCrawlJobParams()
63-
try:
64-
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
65-
except HyperbrowserError:
66-
raise
67-
except Exception as exc:
68-
raise HyperbrowserError(
69-
"Failed to serialize crawl get params",
70-
original_error=exc,
71-
) from exc
72-
if type(query_params) is not dict:
73-
raise HyperbrowserError("Failed to serialize crawl get params")
56+
query_params = serialize_model_dump_to_dict(
57+
params_obj,
58+
error_message="Failed to serialize crawl get params",
59+
)
7460
response = await self._client.transport.get(
7561
self._client._build_url(f"/crawl/{job_id}"),
7662
params=query_params,

hyperbrowser/client/managers/async_manager/scrape.py

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

3-
from hyperbrowser.exceptions import HyperbrowserError
43
from hyperbrowser.models.consts import POLLING_ATTEMPTS
54
from ...polling import (
65
build_fetch_operation_name,
@@ -11,6 +10,7 @@
1110
retry_operation_async,
1211
wait_for_job_result_async,
1312
)
13+
from ..serialization_utils import serialize_model_dump_to_dict
1414
from ..response_utils import parse_response_model
1515
from ....models.scrape import (
1616
BatchScrapeJobResponse,
@@ -32,17 +32,10 @@ def __init__(self, client):
3232
async def start(
3333
self, params: StartBatchScrapeJobParams
3434
) -> StartBatchScrapeJobResponse:
35-
try:
36-
payload = params.model_dump(exclude_none=True, by_alias=True)
37-
except HyperbrowserError:
38-
raise
39-
except Exception as exc:
40-
raise HyperbrowserError(
41-
"Failed to serialize batch scrape start params",
42-
original_error=exc,
43-
) from exc
44-
if type(payload) is not dict:
45-
raise HyperbrowserError("Failed to serialize batch scrape start params")
35+
payload = serialize_model_dump_to_dict(
36+
params,
37+
error_message="Failed to serialize batch scrape start params",
38+
)
4639
response = await self._client.transport.post(
4740
self._client._build_url("/scrape/batch"),
4841
data=payload,
@@ -67,17 +60,10 @@ async def get(
6760
self, job_id: str, params: Optional[GetBatchScrapeJobParams] = None
6861
) -> BatchScrapeJobResponse:
6962
params_obj = params or GetBatchScrapeJobParams()
70-
try:
71-
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
72-
except HyperbrowserError:
73-
raise
74-
except Exception as exc:
75-
raise HyperbrowserError(
76-
"Failed to serialize batch scrape get params",
77-
original_error=exc,
78-
) from exc
79-
if type(query_params) is not dict:
80-
raise HyperbrowserError("Failed to serialize batch scrape get params")
63+
query_params = serialize_model_dump_to_dict(
64+
params_obj,
65+
error_message="Failed to serialize batch scrape get params",
66+
)
8167
response = await self._client.transport.get(
8268
self._client._build_url(f"/scrape/batch/{job_id}"),
8369
params=query_params,
@@ -166,17 +152,10 @@ def __init__(self, client):
166152
self.batch = BatchScrapeManager(client)
167153

168154
async def start(self, params: StartScrapeJobParams) -> StartScrapeJobResponse:
169-
try:
170-
payload = params.model_dump(exclude_none=True, by_alias=True)
171-
except HyperbrowserError:
172-
raise
173-
except Exception as exc:
174-
raise HyperbrowserError(
175-
"Failed to serialize scrape start params",
176-
original_error=exc,
177-
) from exc
178-
if type(payload) is not dict:
179-
raise HyperbrowserError("Failed to serialize scrape start params")
155+
payload = serialize_model_dump_to_dict(
156+
params,
157+
error_message="Failed to serialize scrape start params",
158+
)
180159
response = await self._client.transport.post(
181160
self._client._build_url("/scrape"),
182161
data=payload,

hyperbrowser/client/managers/async_manager/session.py

Lines changed: 21 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import warnings
55
from hyperbrowser.exceptions import HyperbrowserError
66
from ...file_utils import ensure_existing_file_path
7+
from ..serialization_utils import serialize_model_dump_to_dict
78
from ..session_utils import (
89
parse_session_recordings_response_data,
910
parse_session_response_model,
@@ -36,17 +37,10 @@ async def list(
3637
params: Optional[SessionEventLogListParams] = None,
3738
) -> SessionEventLogListResponse:
3839
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")
40+
query_params = serialize_model_dump_to_dict(
41+
params_obj,
42+
error_message="Failed to serialize session event log params",
43+
)
5044
response = await self._client.transport.get(
5145
self._client._build_url(f"/session/{session_id}/event-logs"),
5246
params=query_params,
@@ -70,17 +64,10 @@ async def create(
7064
) -> SessionDetail:
7165
payload = {}
7266
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")
67+
payload = serialize_model_dump_to_dict(
68+
params,
69+
error_message="Failed to serialize session create params",
70+
)
8471
response = await self._client.transport.post(
8572
self._client._build_url("/session"),
8673
data=payload,
@@ -95,17 +82,10 @@ async def get(
9582
self, id: str, params: Optional[SessionGetParams] = None
9683
) -> SessionDetail:
9784
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")
85+
query_params = serialize_model_dump_to_dict(
86+
params_obj,
87+
error_message="Failed to serialize session get params",
88+
)
10989
response = await self._client.transport.get(
11090
self._client._build_url(f"/session/{id}"),
11191
params=query_params,
@@ -130,17 +110,10 @@ async def list(
130110
self, params: Optional[SessionListParams] = None
131111
) -> SessionListResponse:
132112
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")
113+
query_params = serialize_model_dump_to_dict(
114+
params_obj,
115+
error_message="Failed to serialize session list params",
116+
)
144117
response = await self._client.transport.get(
145118
self._client._build_url("/sessions"),
146119
params=query_params,
@@ -318,17 +291,10 @@ async def update_profile_params(
318291
"update_profile_params() requires either UpdateSessionProfileParams or a boolean persist_changes."
319292
)
320293

321-
try:
322-
serialized_params = params_obj.model_dump(exclude_none=True, by_alias=True)
323-
except HyperbrowserError:
324-
raise
325-
except Exception as exc:
326-
raise HyperbrowserError(
327-
"Failed to serialize update_profile_params payload",
328-
original_error=exc,
329-
) from exc
330-
if type(serialized_params) is not dict:
331-
raise HyperbrowserError("Failed to serialize update_profile_params payload")
294+
serialized_params = serialize_model_dump_to_dict(
295+
params_obj,
296+
error_message="Failed to serialize update_profile_params payload",
297+
)
332298

333299
response = await self._client.transport.put(
334300
self._client._build_url(f"/session/{id}/update"),
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from typing import Any, Dict
2+
3+
from hyperbrowser.exceptions import HyperbrowserError
4+
5+
6+
def serialize_model_dump_to_dict(
7+
model: Any,
8+
*,
9+
error_message: str,
10+
exclude_none: bool = True,
11+
by_alias: bool = True,
12+
) -> Dict[str, Any]:
13+
try:
14+
payload = model.model_dump(exclude_none=exclude_none, by_alias=by_alias)
15+
except HyperbrowserError:
16+
raise
17+
except Exception as exc:
18+
raise HyperbrowserError(
19+
error_message,
20+
original_error=exc,
21+
) from exc
22+
if type(payload) is not dict:
23+
raise HyperbrowserError(error_message)
24+
return payload

hyperbrowser/client/managers/sync_manager/crawl.py

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

3-
from hyperbrowser.exceptions import HyperbrowserError
43
from hyperbrowser.models.consts import POLLING_ATTEMPTS
54
from ...polling import (
65
build_fetch_operation_name,
@@ -10,6 +9,7 @@
109
poll_until_terminal_status,
1110
retry_operation,
1211
)
12+
from ..serialization_utils import serialize_model_dump_to_dict
1313
from ..response_utils import parse_response_model
1414
from ....models.crawl import (
1515
CrawlJobResponse,
@@ -25,17 +25,10 @@ def __init__(self, client):
2525
self._client = client
2626

2727
def start(self, params: StartCrawlJobParams) -> StartCrawlJobResponse:
28-
try:
29-
payload = params.model_dump(exclude_none=True, by_alias=True)
30-
except HyperbrowserError:
31-
raise
32-
except Exception as exc:
33-
raise HyperbrowserError(
34-
"Failed to serialize crawl start params",
35-
original_error=exc,
36-
) from exc
37-
if type(payload) is not dict:
38-
raise HyperbrowserError("Failed to serialize crawl start params")
28+
payload = serialize_model_dump_to_dict(
29+
params,
30+
error_message="Failed to serialize crawl start params",
31+
)
3932
response = self._client.transport.post(
4033
self._client._build_url("/crawl"),
4134
data=payload,
@@ -60,17 +53,10 @@ def get(
6053
self, job_id: str, params: Optional[GetCrawlJobParams] = None
6154
) -> CrawlJobResponse:
6255
params_obj = params or GetCrawlJobParams()
63-
try:
64-
query_params = params_obj.model_dump(exclude_none=True, by_alias=True)
65-
except HyperbrowserError:
66-
raise
67-
except Exception as exc:
68-
raise HyperbrowserError(
69-
"Failed to serialize crawl get params",
70-
original_error=exc,
71-
) from exc
72-
if type(query_params) is not dict:
73-
raise HyperbrowserError("Failed to serialize crawl get params")
56+
query_params = serialize_model_dump_to_dict(
57+
params_obj,
58+
error_message="Failed to serialize crawl get params",
59+
)
7460
response = self._client.transport.get(
7561
self._client._build_url(f"/crawl/{job_id}"),
7662
params=query_params,

0 commit comments

Comments
 (0)