""" 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, full_message_schema, platform_schema from flask_restx import fields region_schema = api.model( "RegionSchema", { "region": fields.Raw( required=True, description="Using GEOJSON, exact region of interest in rectangle format polygon", example={ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": {}, "geometry": { "coordinates": [ [ [-4.187143188645706, 50.37072283932642], [-4.202697005964865, 50.368816892405874], [-4.203156724702808, 50.365640144076906], [-4.19449868846155, 50.362267670845654], ] ], "type": "Polygon", }, } ], }, ), }, ) squad_metadata_schema = api.model( "SquadMetadataSchema", { "squad_ID": fields.Integer( required=True, description="Identifier of given squad", example=23, ), "no_of_platforms": fields.Integer( required=True, description="Number of platforms", example=3, ), "platforms": fields.List( fields.Nested(platform_schema), required=True, description="Squad consists of these platforms", ), "squad_mission_type": fields.String( required=True, description="Mission of given squad: `tracking`, `survey`, `inspection`", example="survey", ), "squad_state": fields.Boolean( required=True, description="In execution, Waiting.. ", example=False, ), "region_of_interest": fields.List( fields.Nested(region_schema), required=False, description="Region of interest and exclusion zones per squad.", ), "exclusion_zones": fields.List( fields.Nested(region_schema), required=True, description="Exclusion zones exclusion zones per squad.", ), }, ) planning_configuration_schema = api.model( "PlanningConfigurationSchema", { "message": fields.Nested( full_message_schema, required=True, description="Message header", ), "ID": fields.Integer( required=True, description="Unique identifier tagged to version of this" + " configuration plan", example=3, ), "squads": fields.Nested( squad_metadata_schema, required=False, description="Details of each squad", ), }, )