"""
The configure module defines Marshmallow schemas that maps the
MCCSSubarray.Configure call arguments to/from a JSON representation.
"""
from marshmallow import Schema, fields, post_load
from ska_tmc_cdm.messages.mccssubarray.configure import (
ConfigureRequest,
StationConfiguration,
SubarrayBeamConfiguration
)
from ska_tmc_cdm.schemas import CODEC
from ska_tmc_cdm.schemas.shared import ValidatingSchema
__all__ = [
"ConfigureRequestSchema",
"StationConfigurationSchema",
"SubarrayBeamConfiguration"
]
[docs]class StationConfigurationSchema(Schema):
station_id = fields.Integer(required=True)
[docs] @post_load
def create(self, data, **_) -> StationConfiguration:
"""
Convert parsed JSON back into a StationConfiguration object.
:param data: dict containing parsed JSON values
:param _: kwargs passed by Marshmallow
:return: StnConfiguration instance populated to match JSON
"""
station_id = data["station_id"]
return StationConfiguration(
station_id=station_id
)
class SubarrayBeamConfigurationSchema(Schema):
subarray_beam_id = fields.Integer(required=True)
station_ids = fields.List(fields.Integer, required=True)
update_rate = fields.Float(required=True)
channels = fields.List(fields.List(fields.Integer), required=True)
sky_coordinates = fields.List(fields.Float, required=True)
antenna_weights = fields.List(fields.Float, required=True)
phase_centre = fields.List(fields.Float, required=True)
@post_load
def create(self, data, **_) -> SubarrayBeamConfiguration:
"""
Convert parsed JSON back into a SubarrayBeamConfiguration object.
:param data: dict containing parsed JSON values
:param _: kwargs passed by Marshmallow
:return: SubarrayBeamConfiguration instance populated to match JSON
"""
subarray_beam_id = data["subarray_beam_id"]
station_ids = data["station_ids"]
update_rate = data["update_rate"]
channels = data["channels"]
sky_coordinates = data["sky_coordinates"]
antenna_weights = data["antenna_weights"]
phase_centre = data["phase_centre"]
return SubarrayBeamConfiguration(
subarray_beam_id=subarray_beam_id,
station_ids=station_ids,
update_rate=update_rate,
channels=channels,
sky_coordinates=sky_coordinates,
antenna_weights=antenna_weights,
phase_centre=phase_centre
)