Skip to content

Commit 714d044

Browse files
Reuse shared schema injection helper across payload builders
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent ad49f97 commit 714d044

File tree

6 files changed

+52
-12
lines changed

6 files changed

+52
-12
lines changed

hyperbrowser/client/managers/browser_use_payload_utils.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from hyperbrowser.models.agents.browser_use import StartBrowserUseTaskParams
44

5-
from ..schema_utils import resolve_schema_input
5+
from ..schema_utils import inject_resolved_schema
66
from .serialization_utils import serialize_model_dump_to_dict
77

88

@@ -11,6 +11,9 @@ def build_browser_use_start_payload(params: StartBrowserUseTaskParams) -> Dict[s
1111
params,
1212
error_message="Failed to serialize browser-use start params",
1313
)
14-
if params.output_model_schema:
15-
payload["outputModelSchema"] = resolve_schema_input(params.output_model_schema)
14+
inject_resolved_schema(
15+
payload,
16+
key="outputModelSchema",
17+
schema_input=params.output_model_schema,
18+
)
1619
return payload

hyperbrowser/client/managers/extract_payload_utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from hyperbrowser.exceptions import HyperbrowserError
44
from hyperbrowser.models.extract import StartExtractJobParams
55

6-
from ..schema_utils import resolve_schema_input
6+
from ..schema_utils import inject_resolved_schema
77
from .serialization_utils import serialize_model_dump_to_dict
88

99

@@ -15,6 +15,5 @@ def build_extract_start_payload(params: StartExtractJobParams) -> Dict[str, Any]
1515
params,
1616
error_message="Failed to serialize extract start params",
1717
)
18-
if params.schema_:
19-
payload["schema"] = resolve_schema_input(params.schema_)
18+
inject_resolved_schema(payload, key="schema", schema_input=params.schema_)
2019
return payload

hyperbrowser/client/schema_utils.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ def resolve_schema_input(schema_input: Any) -> Any:
1313
return schema_input
1414

1515

16+
def inject_resolved_schema(payload: dict, *, key: str, schema_input: Any) -> None:
17+
if schema_input is None:
18+
return
19+
payload[key] = resolve_schema_input(schema_input)
20+
21+
1622
def inject_web_output_schemas(payload: dict, formats: Optional[List[Any]]) -> None:
1723
if not formats:
1824
return
@@ -21,6 +27,8 @@ def inject_web_output_schemas(payload: dict, formats: Optional[List[Any]]) -> No
2127
schema_input = getattr(output_format, "schema_", None)
2228
if schema_input is None:
2329
continue
24-
payload["outputs"]["formats"][index]["schema"] = resolve_schema_input(
25-
schema_input
30+
inject_resolved_schema(
31+
payload["outputs"]["formats"][index],
32+
key="schema",
33+
schema_input=schema_input,
2634
)

tests/test_browser_use_payload_utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ class _SchemaModel(BaseModel):
2929

3030
monkeypatch.setattr(
3131
browser_use_payload_utils,
32-
"resolve_schema_input",
33-
lambda schema_input: {"resolvedSchema": schema_input.__name__},
32+
"inject_resolved_schema",
33+
lambda payload, *, key, schema_input: payload.__setitem__(
34+
key,
35+
{"resolvedSchema": schema_input.__name__},
36+
),
3437
)
3538

3639
payload = browser_use_payload_utils.build_browser_use_start_payload(params)

tests/test_extract_payload_utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ class _SchemaModel(BaseModel):
3838

3939
monkeypatch.setattr(
4040
extract_payload_utils,
41-
"resolve_schema_input",
42-
lambda schema_input: {"resolvedSchema": schema_input.__name__},
41+
"inject_resolved_schema",
42+
lambda payload, *, key, schema_input: payload.__setitem__(
43+
key,
44+
{"resolvedSchema": schema_input.__name__},
45+
),
4346
)
4447

4548
payload = extract_payload_utils.build_extract_start_payload(params)

tests/test_schema_utils.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from pydantic import BaseModel
2+
3+
from hyperbrowser.client.schema_utils import inject_resolved_schema
4+
5+
6+
class _SchemaModel(BaseModel):
7+
value: str
8+
9+
10+
def test_inject_resolved_schema_sets_resolved_schema_value():
11+
payload = {"a": 1}
12+
13+
inject_resolved_schema(payload, key="schema", schema_input=_SchemaModel)
14+
15+
assert payload["schema"]["type"] == "object"
16+
assert "value" in payload["schema"]["properties"]
17+
18+
19+
def test_inject_resolved_schema_ignores_none_schema_inputs():
20+
payload = {"a": 1}
21+
22+
inject_resolved_schema(payload, key="schema", schema_input=None)
23+
24+
assert payload == {"a": 1}

0 commit comments

Comments
 (0)