use more compact JSON repr

This commit is contained in:
ducklet 2021-08-18 20:08:09 +02:00
parent b676c9ddde
commit 18b95f91f9

View file

@ -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: