"""
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)