schema clean up and refactor
This commit is contained in:
38
core/schema/serializers/_common.py
Normal file
38
core/schema/serializers/_common.py
Normal 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]
|
||||
Reference in New Issue
Block a user