Skip to content

Serializers

serializers

Serializers for typed SHM resources.

Classes

ShmEntitySerializer

ShmEntitySerializer(record_model, *, json_fields=())

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
Functions
to_payload
to_payload(obj)

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}
from_mapping
from_mapping(mapping)

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)