Source code for ska_oso_pdm.schemas.sdp.scan_type

"""
The schemas.sdp.scan_type module defines Marshmallow schemas .
"""
from marshmallow import Schema, fields, post_load

from ska_oso_pdm.entities.sdp import Channel, ScanType

__all__ = ["ChannelSchema", "ScanTypeSchema"]


[docs]class ChannelSchema(Schema): """ Marshmallow schema for the Channel class. """ count = fields.Integer(data_key="count", required=True) start = fields.Integer(data_key="start", required=True) stride = fields.Integer(data_key="stride", required=True) freq_min = fields.Float(data_key="freq_min", required=True) freq_max = fields.Float(data_key="freq_max", required=True) link_map = fields.List( fields.Tuple((fields.Integer, fields.Integer)), data_key="link_map", required=True, )
[docs] @post_load def create_channel(self, data, **_): # pylint: disable=no-self-use """ Convert parsed JSON back into a Channel object. :param data: Marshmallow-provided dict containing parsed JSON values :param _: kwargs passed by Marshmallow :return: SubBand object populated from data """ count = data["count"] start = data["start"] stride = data["stride"] freq_min = data["freq_min"] freq_max = data["freq_max"] link_map = data["link_map"] return Channel(count, start, stride, freq_min, freq_max, link_map)
[docs]class ScanTypeSchema(Schema): """ Marshmallow schema for the ScanType class. """ scan_type_id = fields.String(data_key="scan_type_id", required=True) target_id = fields.String(data_key="target", required=True) channels = fields.Nested(ChannelSchema, data_key="channels", many=True)
[docs] @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 """ scan_type_id = data["scan_type_id"] target_id = data["target_id"] channels = data["channels"] return ScanType(scan_type_id, target_id, channels)