Skip to content

Commit ddd7691

Browse files
Unify optional query serialization with default helper
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 8f128d4 commit ddd7691

File tree

14 files changed

+151
-50
lines changed

14 files changed

+151
-50
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ This runs lint, format checks, compile checks, tests, and package build.
8181
- `tests/test_computer_action_endpoint_helper_usage.py` (computer-action endpoint-normalization helper usage enforcement),
8282
- `tests/test_contributing_architecture_guard_listing.py` (`CONTRIBUTING.md` architecture-guard inventory completeness enforcement),
8383
- `tests/test_core_type_helper_usage.py` (core transport/config/header/file/polling/session/error/parsing manager+tool module enforcement of shared plain-type helper usage),
84+
- `tests/test_default_serialization_helper_usage.py` (default optional-query serialization helper usage enforcement),
8485
- `tests/test_display_helper_usage.py` (display/key-format helper usage),
8586
- `tests/test_docs_python3_commands.py` (`README`/`CONTRIBUTING`/examples python3 command consistency enforcement),
8687
- `tests/test_example_run_instructions.py` (example run-instruction consistency enforcement),

hyperbrowser/client/managers/async_manager/crawl.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
poll_until_terminal_status_async,
1010
retry_operation_async,
1111
)
12-
from ..serialization_utils import serialize_model_dump_to_dict
12+
from ..serialization_utils import (
13+
serialize_model_dump_or_default,
14+
serialize_model_dump_to_dict,
15+
)
1316
from ..response_utils import parse_response_model
1417
from ....models.crawl import (
1518
CrawlJobResponse,
@@ -52,9 +55,9 @@ async def get_status(self, job_id: str) -> CrawlJobStatusResponse:
5255
async def get(
5356
self, job_id: str, params: Optional[GetCrawlJobParams] = None
5457
) -> CrawlJobResponse:
55-
params_obj = params or GetCrawlJobParams()
56-
query_params = serialize_model_dump_to_dict(
57-
params_obj,
58+
query_params = serialize_model_dump_or_default(
59+
params,
60+
default_factory=GetCrawlJobParams,
5861
error_message="Failed to serialize crawl get params",
5962
)
6063
response = await self._client.transport.get(

hyperbrowser/client/managers/async_manager/profile.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
)
1010
from hyperbrowser.models.session import BasicResponse
1111
from ..serialization_utils import (
12-
serialize_model_dump_to_dict,
12+
serialize_model_dump_or_default,
1313
serialize_optional_model_dump_to_dict,
1414
)
1515
from ..response_utils import parse_response_model
@@ -59,9 +59,9 @@ async def delete(self, id: str) -> BasicResponse:
5959
async def list(
6060
self, params: Optional[ProfileListParams] = None
6161
) -> ProfileListResponse:
62-
params_obj = params or ProfileListParams()
63-
query_params = serialize_model_dump_to_dict(
64-
params_obj,
62+
query_params = serialize_model_dump_or_default(
63+
params,
64+
default_factory=ProfileListParams,
6565
error_message="Failed to serialize profile list params",
6666
)
6767
response = await self._client.transport.get(

hyperbrowser/client/managers/async_manager/scrape.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
retry_operation_async,
1111
wait_for_job_result_async,
1212
)
13-
from ..serialization_utils import serialize_model_dump_to_dict
13+
from ..serialization_utils import (
14+
serialize_model_dump_or_default,
15+
serialize_model_dump_to_dict,
16+
)
1417
from ..response_utils import parse_response_model
1518
from ....models.scrape import (
1619
BatchScrapeJobResponse,
@@ -59,9 +62,9 @@ async def get_status(self, job_id: str) -> BatchScrapeJobStatusResponse:
5962
async def get(
6063
self, job_id: str, params: Optional[GetBatchScrapeJobParams] = None
6164
) -> BatchScrapeJobResponse:
62-
params_obj = params or GetBatchScrapeJobParams()
63-
query_params = serialize_model_dump_to_dict(
64-
params_obj,
65+
query_params = serialize_model_dump_or_default(
66+
params,
67+
default_factory=GetBatchScrapeJobParams,
6568
error_message="Failed to serialize batch scrape get params",
6669
)
6770
response = await self._client.transport.get(

hyperbrowser/client/managers/async_manager/session.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import warnings
44
from hyperbrowser.exceptions import HyperbrowserError
55
from ..serialization_utils import (
6+
serialize_model_dump_or_default,
67
serialize_model_dump_to_dict,
78
serialize_optional_model_dump_to_dict,
89
)
@@ -38,9 +39,9 @@ async def list(
3839
session_id: str,
3940
params: Optional[SessionEventLogListParams] = None,
4041
) -> SessionEventLogListResponse:
41-
params_obj = params or SessionEventLogListParams()
42-
query_params = serialize_model_dump_to_dict(
43-
params_obj,
42+
query_params = serialize_model_dump_or_default(
43+
params,
44+
default_factory=SessionEventLogListParams,
4445
error_message="Failed to serialize session event log params",
4546
)
4647
response = await self._client.transport.get(
@@ -81,9 +82,9 @@ async def create(
8182
async def get(
8283
self, id: str, params: Optional[SessionGetParams] = None
8384
) -> SessionDetail:
84-
params_obj = params or SessionGetParams()
85-
query_params = serialize_model_dump_to_dict(
86-
params_obj,
85+
query_params = serialize_model_dump_or_default(
86+
params,
87+
default_factory=SessionGetParams,
8788
error_message="Failed to serialize session get params",
8889
)
8990
response = await self._client.transport.get(
@@ -109,9 +110,9 @@ async def stop(self, id: str) -> BasicResponse:
109110
async def list(
110111
self, params: Optional[SessionListParams] = None
111112
) -> SessionListResponse:
112-
params_obj = params or SessionListParams()
113-
query_params = serialize_model_dump_to_dict(
114-
params_obj,
113+
query_params = serialize_model_dump_or_default(
114+
params,
115+
default_factory=SessionListParams,
115116
error_message="Failed to serialize session list params",
116117
)
117118
response = await self._client.transport.get(

hyperbrowser/client/managers/serialization_utils.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
from typing import Any, Dict
1+
from typing import Any, Callable, Dict, Optional, TypeVar
22

33
from hyperbrowser.exceptions import HyperbrowserError
44

5+
T = TypeVar("T")
6+
57

68
def serialize_model_dump_to_dict(
79
model: Any,
@@ -39,3 +41,20 @@ def serialize_optional_model_dump_to_dict(
3941
exclude_none=exclude_none,
4042
by_alias=by_alias,
4143
)
44+
45+
46+
def serialize_model_dump_or_default(
47+
model: Optional[T],
48+
*,
49+
default_factory: Callable[[], T],
50+
error_message: str,
51+
exclude_none: bool = True,
52+
by_alias: bool = True,
53+
) -> Dict[str, Any]:
54+
model_obj = model if model is not None else default_factory()
55+
return serialize_model_dump_to_dict(
56+
model_obj,
57+
error_message=error_message,
58+
exclude_none=exclude_none,
59+
by_alias=by_alias,
60+
)

hyperbrowser/client/managers/sync_manager/crawl.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
poll_until_terminal_status,
1010
retry_operation,
1111
)
12-
from ..serialization_utils import serialize_model_dump_to_dict
12+
from ..serialization_utils import (
13+
serialize_model_dump_or_default,
14+
serialize_model_dump_to_dict,
15+
)
1316
from ..response_utils import parse_response_model
1417
from ....models.crawl import (
1518
CrawlJobResponse,
@@ -52,9 +55,9 @@ def get_status(self, job_id: str) -> CrawlJobStatusResponse:
5255
def get(
5356
self, job_id: str, params: Optional[GetCrawlJobParams] = None
5457
) -> CrawlJobResponse:
55-
params_obj = params or GetCrawlJobParams()
56-
query_params = serialize_model_dump_to_dict(
57-
params_obj,
58+
query_params = serialize_model_dump_or_default(
59+
params,
60+
default_factory=GetCrawlJobParams,
5861
error_message="Failed to serialize crawl get params",
5962
)
6063
response = self._client.transport.get(

hyperbrowser/client/managers/sync_manager/profile.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
)
1010
from hyperbrowser.models.session import BasicResponse
1111
from ..serialization_utils import (
12-
serialize_model_dump_to_dict,
12+
serialize_model_dump_or_default,
1313
serialize_optional_model_dump_to_dict,
1414
)
1515
from ..response_utils import parse_response_model
@@ -57,9 +57,9 @@ def delete(self, id: str) -> BasicResponse:
5757
)
5858

5959
def list(self, params: Optional[ProfileListParams] = None) -> ProfileListResponse:
60-
params_obj = params or ProfileListParams()
61-
query_params = serialize_model_dump_to_dict(
62-
params_obj,
60+
query_params = serialize_model_dump_or_default(
61+
params,
62+
default_factory=ProfileListParams,
6363
error_message="Failed to serialize profile list params",
6464
)
6565
response = self._client.transport.get(

hyperbrowser/client/managers/sync_manager/scrape.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
retry_operation,
1111
wait_for_job_result,
1212
)
13-
from ..serialization_utils import serialize_model_dump_to_dict
13+
from ..serialization_utils import (
14+
serialize_model_dump_or_default,
15+
serialize_model_dump_to_dict,
16+
)
1417
from ..response_utils import parse_response_model
1518
from ....models.scrape import (
1619
BatchScrapeJobResponse,
@@ -57,9 +60,9 @@ def get_status(self, job_id: str) -> BatchScrapeJobStatusResponse:
5760
def get(
5861
self, job_id: str, params: Optional[GetBatchScrapeJobParams] = None
5962
) -> BatchScrapeJobResponse:
60-
params_obj = params or GetBatchScrapeJobParams()
61-
query_params = serialize_model_dump_to_dict(
62-
params_obj,
63+
query_params = serialize_model_dump_or_default(
64+
params,
65+
default_factory=GetBatchScrapeJobParams,
6366
error_message="Failed to serialize batch scrape get params",
6467
)
6568
response = self._client.transport.get(

hyperbrowser/client/managers/sync_manager/session.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import warnings
44
from hyperbrowser.exceptions import HyperbrowserError
55
from ..serialization_utils import (
6+
serialize_model_dump_or_default,
67
serialize_model_dump_to_dict,
78
serialize_optional_model_dump_to_dict,
89
)
@@ -38,9 +39,9 @@ def list(
3839
session_id: str,
3940
params: Optional[SessionEventLogListParams] = None,
4041
) -> SessionEventLogListResponse:
41-
params_obj = params or SessionEventLogListParams()
42-
query_params = serialize_model_dump_to_dict(
43-
params_obj,
42+
query_params = serialize_model_dump_or_default(
43+
params,
44+
default_factory=SessionEventLogListParams,
4445
error_message="Failed to serialize session event log params",
4546
)
4647
response = self._client.transport.get(
@@ -77,9 +78,9 @@ def create(self, params: Optional[CreateSessionParams] = None) -> SessionDetail:
7778
)
7879

7980
def get(self, id: str, params: Optional[SessionGetParams] = None) -> SessionDetail:
80-
params_obj = params or SessionGetParams()
81-
query_params = serialize_model_dump_to_dict(
82-
params_obj,
81+
query_params = serialize_model_dump_or_default(
82+
params,
83+
default_factory=SessionGetParams,
8384
error_message="Failed to serialize session get params",
8485
)
8586
response = self._client.transport.get(
@@ -103,9 +104,9 @@ def stop(self, id: str) -> BasicResponse:
103104
)
104105

105106
def list(self, params: Optional[SessionListParams] = None) -> SessionListResponse:
106-
params_obj = params or SessionListParams()
107-
query_params = serialize_model_dump_to_dict(
108-
params_obj,
107+
query_params = serialize_model_dump_or_default(
108+
params,
109+
default_factory=SessionListParams,
109110
error_message="Failed to serialize session list params",
110111
)
111112
response = self._client.transport.get(

0 commit comments

Comments
 (0)