Skip to content

Serializers

serializers

Serializers for Django-compatible result payloads.

Classes

DjangoAnalysisSerializer

Convert between analysis metadata and Django payloads.

Functions
to_payload
to_payload(obj)

Serialize a validated analysis definition.

Source code in src/owi/metadatabase/results/serializers.py
def to_payload(self, obj: AnalysisDefinition) -> dict[str, Any]:
    """Serialize a validated analysis definition."""
    payload = AnalysisRecordPayload(
        name=obj.name,
        model_definition_id=obj.model_definition_id,
        location_id=obj.location_id,
        source_type=obj.source_type,
        source=obj.source,
        description=obj.description,
        user=obj.user,
        timestamp=obj.timestamp,
        additional_data=obj.additional_data,
    )
    return payload.model_dump(exclude_none=True)
from_mapping
from_mapping(mapping)

Deserialize an analysis mapping.

Source code in src/owi/metadatabase/results/serializers.py
def from_mapping(self, mapping: Mapping[str, Any]) -> AnalysisDefinition:
    """Deserialize an analysis mapping."""
    additional_data = _optional_mapping(mapping.get("additional_data") or mapping.get("data_additional"))
    return AnalysisDefinition(
        name=str(mapping["name"]),
        model_definition_id=int(mapping["model_definition_id"]),
        location_id=_optional_int(mapping.get("location_id")),
        source_type=_optional_str(mapping.get("source_type")),
        source=_optional_str(mapping.get("source")),
        description=_optional_str(mapping.get("description")),
        user=_optional_str(mapping.get("user")),
        timestamp=mapping.get("timestamp"),
        additional_data=additional_data,
    )

DjangoResultSerializer

Convert between validated result series and Django payloads.

Functions
to_payload
to_payload(obj, analysis_id)

Serialize a validated result series.

Source code in src/owi/metadatabase/results/serializers.py
def to_payload(self, obj: ResultSeries, analysis_id: int) -> dict[str, Any]:
    """Serialize a validated result series."""
    payload = ResultRecordPayload(**obj.to_record_payload(analysis_id))
    return payload.model_dump(exclude_none=True)
from_mapping
from_mapping(mapping)

Deserialize a backend result row.

Source code in src/owi/metadatabase/results/serializers.py
def from_mapping(self, mapping: Mapping[str, Any]) -> ResultSeries:
    """Deserialize a backend result row."""
    vectors: list[ResultVector] = [
        ResultVector(
            name=str(mapping["name_col1"]),
            unit=str(mapping["units_col1"]),
            values=[float(value) for value in mapping["value_col1"]],
        ),
        ResultVector(
            name=str(mapping["name_col2"]),
            unit=str(mapping["units_col2"]),
            values=[float(value) for value in mapping["value_col2"]],
        ),
    ]
    value_col3 = mapping.get("value_col3")
    if value_col3 not in (None, []):
        vectors.append(
            ResultVector(
                name=str(mapping["name_col3"]),
                unit=str(mapping["units_col3"]),
                values=[float(value) for value in value_col3],
            )
        )
    data_additional = _optional_mapping(mapping.get("additional_data") or mapping.get("data_additional"))
    return ResultSeries(
        analysis_name=str(data_additional.get("analysis_name", mapping.get("analysis_name", "unknown"))),
        analysis_kind=AnalysisKind(data_additional.get("analysis_kind", "comparison")),
        result_scope=ResultScope(data_additional.get("result_scope", "site")),
        short_description=str(mapping["short_description"]),
        description=_optional_str(mapping.get("description")),
        site_id=_optional_int(mapping.get("site")),
        location_id=_optional_int(mapping.get("location")),
        related_object=(
            RelatedObject.model_validate(mapping["related_object"])
            if mapping.get("related_object") is not None
            else None
        ),
        data_additional=data_additional,
        vectors=vectors,
    )