Source code for ska_oso_pdm.schemas.common.scan_definition

"""
The schemas.scan_definition_schema defines a Marshmallow schema that maps
The scan definition section of an SKA scheduling block  to/from a JSON representation.
"""
from marshmallow import Schema, fields, post_dump, post_load

from ska_oso_pdm.entities.common.scan_definition import ScanDefinition

__all__ = ["ScanDefinitionSchema"]


[docs]class ScanDefinitionSchema(Schema): """ The scan definition section of an SKA scheduling block """ scan_definition_id = fields.String(required=True) scan_duration = fields.TimeDelta( precision=fields.TimeDelta.MILLISECONDS, required=True ) field_configuration_id = fields.String( required=True, data_key="field_configuration" ) target_beam_configuration_ids = fields.List( fields.Str(), data_key="target_beam_configurations" ) dish_configuration_id = fields.String(data_key="dish_configuration") scan_type_id = fields.String(data_key="scan_type") csp_configuration_id = fields.String(data_key="csp_configuration")
[docs] @post_load def create_scan_definition(self, data, **_): # pylint: disable=no-self-use """ Convert parsed JSON back into a ScanDefinition :param data: dict containing parsed JSON values :param _: kwargs passed by Marshmallow :return: ScanDefinitions instance populated to match JSON """ # Note: The ScanDefinition constructor arguments have the # same name as the data keys, so we can pass in **data directly return ScanDefinition(**data)
[docs] @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 scan definition """ return {k: v for k, v in data.items() if v is not None}