Bases: Generic[TShmRecord]
Generic serializer for a single SHM entity type.
Source code in src/owi/metadatabase/shm/serializers.py
| def __init__(self, record_model: type[TShmRecord], *, json_fields: tuple[str, ...] = ()) -> None:
self.record_model = record_model
self.json_fields = json_fields
|
Serialize a resource model or mapping into a backend payload.
Source code in src/owi/metadatabase/shm/serializers.py
| def to_payload(self, obj: TShmRecord | BaseModel | Mapping[str, Any]) -> dict[str, Any]:
"""Serialize a resource model or mapping into a backend payload."""
if isinstance(obj, BaseModel):
return obj.model_dump(mode="json", exclude_none=True)
return {key: value for key, value in _normalize_mapping(dict(obj)).items() if value is not None}
|
Deserialize a backend row into a typed resource model.
Source code in src/owi/metadatabase/shm/serializers.py
| def from_mapping(self, mapping: Mapping[str, Any]) -> TShmRecord:
"""Deserialize a backend row into a typed resource model."""
normalized = _normalize_mapping(dict(mapping))
for field_name in self.json_fields:
normalized[field_name] = _normalize_json_field(normalized.get(field_name))
return self.record_model.model_validate(normalized)
|