Source code for pipeline.src.entities.missions

from dataclasses import dataclass
from enum import Enum


[docs] class MissionActionType(Enum):
[docs] SEA_CONTROL = "SEA_CONTROL"
[docs] LAND_CONTROL = "LAND_CONTROL"
[docs] AIR_SURVEILLANCE = "AIR_SURVEILLANCE"
[docs] AIR_CONTROL = "AIR_CONTROL"
@staticmethod
[docs] def from_poseidon_control_type(poseidon_control_type: str): mapping = { "Contrôle à la mer": MissionActionType.SEA_CONTROL, "Contrôle à la débarque": MissionActionType.LAND_CONTROL, "Contrôle aérien": MissionActionType.AIR_CONTROL, } return mapping[poseidon_control_type]
[docs] class MissionOrigin(Enum):
[docs] POSEIDON_CNSP = "POSEIDON_CNSP"
[docs] POSEIDON_CACEM = "POSEIDON_CACEM"
[docs] MONITORFISH = "MONITORFISH"
[docs] MONITORENV = "MONITORENV"
[docs] class MissionType(Enum):
[docs] SEA = "SEA"
[docs] LAND = "LAND"
[docs] AIR = "AIR"
@staticmethod
[docs] def from_mission_action_type(mission_action_type: MissionActionType): mapping = { MissionActionType.SEA_CONTROL: MissionType.SEA, MissionActionType.LAND_CONTROL: MissionType.LAND, MissionActionType.AIR_CONTROL: MissionType.AIR, } return mapping[mission_action_type]
[docs] class InfractionType(Enum):
[docs] WITH_RECORD = "WITH_RECORD"
[docs] WITHOUT_RECORD = "WITHOUT_RECORD"
[docs] def from_poseidon_infraction_field(infraction: int): """ Translates the `infraction` field of the Poseidon database into the corresponding InfractionType. The `infraction` field of the Poseidon database holds values: - 0 for controls without infraction - 1 for controls with infraction(s) - 2 for controls with infraction(s) but without record ("PV" in french) In some rare cases, the `infraction` field has the value 0 although some infractions are present in the control results. In these cases, we'll consider there was no record. Args: infraction (int): 0, 1 or 2 Returns: InfractionType """ assert infraction in (0, 1, 2) infraction_types = [ InfractionType.WITHOUT_RECORD, InfractionType.WITH_RECORD, InfractionType.WITHOUT_RECORD, ] return infraction_types[infraction]
@dataclass
[docs] class Infraction:
[docs] natinf: int
[docs] comments: str
[docs] class FlightGoal(Enum):
[docs] VMS_AIS_CHECK = "VMS_AIS_CHECK"
[docs] UNAUTHORIZED_FISHING = "UNAUTHORIZED_FISHING"
[docs] CLOSED_AREA = "CLOSED_AREA"
@property
[docs] def label(self): labels = { "VMS_AIS_CHECK": "Vérif. AIS/VMS", "UNAUTHORIZED_FISHING": "Pêche interdite", "CLOSED_AREA": "Zone fermée", } return labels[self.name]