planning_configuration.py 3.13 KB
"""
    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.. <define further>",
            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",
        ),
    },
)