schema clean up and refactor

This commit is contained in:
2026-03-26 05:14:33 -03:00
parent 08c58a6a9d
commit d58a90157a
17 changed files with 930 additions and 287 deletions

View File

@@ -0,0 +1,38 @@
"""Common serialization utilities."""
from __future__ import annotations
import dataclasses
import logging
logger = logging.getLogger(__name__)
def safe_construct(cls, data: dict):
"""
Construct a dataclass from a dict, tolerant of schema changes.
- Ignores keys not in the dataclass (field was removed)
- Uses defaults for missing keys (field was added)
- Logs at debug level for mismatches
"""
field_names = {f.name for f in dataclasses.fields(cls)}
known = {}
for k, v in data.items():
if k in field_names:
known[k] = v
else:
logger.debug("Ignoring unknown field %s.%s", cls.__name__, k)
return cls(**known)
def serialize_dataclass(obj) -> dict:
"""Serialize any dataclass to dict via dataclasses.asdict()."""
return dataclasses.asdict(obj)
def serialize_dataclass_list(items) -> list[dict]:
"""Serialize a list of dataclasses."""
return [dataclasses.asdict(item) for item in items]