Skip to content

Commit 54cf519

Browse files
Wrap default factory failures in serialization helper
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 9d3dc30 commit 54cf519

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

hyperbrowser/client/managers/serialization_utils.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,18 @@ def serialize_model_dump_or_default(
5151
exclude_none: bool = True,
5252
by_alias: bool = True,
5353
) -> Dict[str, Any]:
54-
model_obj = model if model is not None else default_factory()
54+
if model is not None:
55+
model_obj = model
56+
else:
57+
try:
58+
model_obj = default_factory()
59+
except HyperbrowserError:
60+
raise
61+
except Exception as exc:
62+
raise HyperbrowserError(
63+
error_message,
64+
original_error=exc,
65+
) from exc
5566
return serialize_model_dump_to_dict(
5667
model_obj,
5768
error_message=error_message,

tests/test_manager_serialization_utils.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,31 @@ def _default_factory():
137137
assert provided_model.calls == [(False, False)]
138138
assert default_model.calls == []
139139
assert default_factory_called is False
140+
141+
142+
def test_serialize_model_dump_or_default_wraps_default_factory_errors():
143+
def _broken_default_factory():
144+
raise RuntimeError("default factory failed")
145+
146+
with pytest.raises(HyperbrowserError, match="serialize failure") as exc_info:
147+
serialize_model_dump_or_default(
148+
None,
149+
default_factory=_broken_default_factory,
150+
error_message="serialize failure",
151+
)
152+
153+
assert isinstance(exc_info.value.original_error, RuntimeError)
154+
155+
156+
def test_serialize_model_dump_or_default_preserves_hyperbrowser_default_factory_errors():
157+
def _broken_default_factory():
158+
raise HyperbrowserError("custom default failure")
159+
160+
with pytest.raises(HyperbrowserError, match="custom default failure") as exc_info:
161+
serialize_model_dump_or_default(
162+
None,
163+
default_factory=_broken_default_factory,
164+
error_message="serialize failure",
165+
)
166+
167+
assert exc_info.value.original_error is None

0 commit comments

Comments
 (0)