Source code for ska_oso_pdm.schemas.sdp.scan_type

"""
The schemas.sdp.scan_type module defines Marshmallow schemas that convert
BeamMapping and ScanTypes SDP classes to/from JSON.
"""
from marshmallow import fields, post_dump, post_load

from ska_oso_pdm.entities.sdp.scan_type import BeamMapping, ScanType
from ska_oso_pdm.schemas.oso_marshmallow_schema import OSOSchema

__all__ = ["BeamMappingSchema", "ScanTypeSchema"]


[docs]class BeamMappingSchema(OSOSchema): """ Marshmallow schema to convert a BeamMapping instance to/from JSON. """ beam_id = fields.String(required=True) field_id = fields.String(allow_none=True) channels_id = fields.String(allow_none=True) polarisations_id = fields.String(allow_none=True) @post_dump def filter_nulls(self, data, **_): # pylint: disable=no-self-use """ Filter out null values from JSON. :param data: Marshmallow-provided dict containing parsed object values :param _: kwargs passed by Marshmallow :return: dict suitable for BeamMapping """ return {k: v for k, v in data.items() if v is not None} @post_load def create_channel(self, data, **_): # pylint: disable=no-self-use """ Convert parsed JSON back into a BeamMapping object. :param data: Marshmallow-provided dict containing parsed JSON values :param _: kwargs passed by Marshmallow :return: BeamMapping object populated from data """ return BeamMapping(**data)
[docs]class ScanTypeSchema(OSOSchema): """ Marshmallow schema for the ScanType class. """ scan_type_id = fields.String(required=True) derive_from = fields.String(allow_none=True) beams = fields.Nested(BeamMappingSchema, many=True, allow_none=True) @post_dump def filter_nulls(self, data, **_): # pylint: disable=no-self-use """ Filter out null values from JSON. :param data: Marshmallow-provided dict containing parsed object values :param _: kwargs passed by Marshmallow :return: dict suitable for PB configuration """ return {k: v for k, v in data.items() if v is not None} @post_load def create_scan_type(self, data, **_): # pylint: disable=no-self-use """ Convert parsed JSON back into a ScanType object. :param data: Marshmallow-provided dict containing parsed JSON values :param _: kwargs passed by Marshmallow :return: ScanType object populated from data """ return ScanType(**data)