""" schemas: configuration sent to Autonomy Engine (i.e. during an emergency, if a platform needs to be removed from the mission planning) """ from . import api, message_header_schema, platform_schema from flask_restx import fields squad_metadata_schema = api.model( "SquadMetadataSchema", { "squad_ID": fields.Integer( required=True, description="platform serial number", example="ah-1", ), "no_of_platforms": fields.Integer( required=True, description="number of platform serial number", example="ah-1", ), "platforms": fields.List( fields.Nested(platform_schema), required=True, description="Metadata pf each platform", ), "squad_mission_type": fields.String( required=True, description="Survey or Detail", example="survey", ), "squad_state": fields.Boolean( required=True, description="True if given Squad is executing mission type " + "according to the Autonomy Engine plan", example=False, ), }, ) constraints_schema = api.model( "ConstraintsSchema", # TODO: Should this be per platform instead of squad? { "min_altitude": fields.Float( required=True, description="Minimum altitude set for squad.", example=15.2, ), "min_velocity": fields.Float( required=True, description="Minimum velocity set for squad.", example=0.1, ), "max_velocity": fields.Float( required=True, description="Maximum altitude set for squad.", example=0.9, ), }, ) environment_config_schema = api.model( # TODO: Discuss how regions are defined "EnvironmentConfig", { "region_of_interest": fields.String(), "exclusion_zone": fields.String(), }, ) # Main Autonomy Configuration Schema autonomy_configuration_schema = api.model( "SquadConfigurationSchema", { "message": fields.Nested( message_header_schema, required=True, description="Message header", ), "ID": fields.Integer( required=True, description="Unique identifier tagged to version of this" + " configuration plan", example=3, ), "time": fields.String( required=True, description="", example="", ), "squads": fields.Nested( squad_metadata_schema, required=False, description="Details of each squad", ), "environment": fields.Nested( environment_config_schema, required=False, description="Region of interest and exclusion zone", ), }, )