diff --git a/unwind/models.py b/unwind/models.py index 5944363..d85547d 100644 --- a/unwind/models.py +++ b/unwind/models.py @@ -2,6 +2,7 @@ import json from dataclasses import dataclass, field from dataclasses import fields as _fields from datetime import datetime, timezone +from functools import partial from typing import ( Annotated, Any, @@ -72,6 +73,9 @@ def optional_fields(o): yield f +json_dump = partial(json.dumps, separators=(",", ":")) + + def asplain(o, *, fields_: set = None) -> dict[str, Any]: validate(o) @@ -94,9 +98,9 @@ def asplain(o, *, fields_: set = None) -> dict[str, Any]: elif target in {datetime}: d[f.name] = v.isoformat() elif target in {set}: - d[f.name] = json.dumps(list(sorted(v))) + d[f.name] = json_dump(list(sorted(v))) elif target in {list}: - d[f.name] = json.dumps(list(v)) + d[f.name] = json_dump(list(v)) elif target in {bool, str, int, float, None}: d[f.name] = v else: @@ -165,7 +169,7 @@ class Progress: @_state.setter def _state(self, state: dict): - self.state = json.dumps(state, separators=(",", ":")) + self.state = json_dump(state) @property def percent(self) -> float: