from __future__ import annotations from datetime import date, datetime from enum import Enum from pydantic import BaseModel, Field class BaggageClaimType(BaseModel): belts: list[str] | None = None class RemarksType(BaseModel): remarks: list[str] | None = None class CodesharesType(BaseModel): codeshares: list[str] | None = None class PublicName(BaseModel): dutch: str | None = None english: str | None = None class Destination(BaseModel): city: str | None = None country: str | None = None iata: str | None = None publicName: PublicName | None = None class Airline(BaseModel): iata: str | None = None icao: str | None = None nvls: int | None = None publicName: str | None = None class AirlineList(BaseModel): airlines: list[Airline] | None = None class AircraftType(BaseModel): iataMain: str | None = None iataSub: str | None = None longDescription: str | None = None shortDescription: str | None = None class AircraftTypeList(BaseModel): aircraftTypes: list[AircraftType] | None = None class FlightDirection(Enum): A = "A" D = "D" class RouteType(BaseModel): destinations: list[str] | None = None eu: str | None = Field( None, description="S (Schengen), E (Europe) or N (non-Europe)" ) visa: bool | None = Field( None, description="Indicates if a visum is required for destination" ) class AircraftTypeType(BaseModel): iataMain: str | None = None iataSub: str | None = None class CheckinClassType(BaseModel): code: str | None = None description: str | None = None class TransferPositionsType(BaseModel): transferPositions: list[int] | None = None class PublicFlightStateType(BaseModel): flightStates: list[str] | None = None class DestinationList(BaseModel): destinations: list[Destination] | None = None class DeskType(BaseModel): checkinClass: CheckinClassType | None = None position: int | None = None class DesksType(BaseModel): desks: list[DeskType] | None = None class RowType(BaseModel): position: str | None = None desks: DesksType | None = None class RowsType(BaseModel): rows: list[RowType] | None = None class CheckinAllocationType(BaseModel): endTime: datetime | None = None rows: RowsType | None = None startTime: datetime | None = None class CheckinAllocationsType(BaseModel): checkinAllocations: list[CheckinAllocationType] | None = None remarks: RemarksType | None = None class Flight(BaseModel): lastUpdatedAt: datetime | None = None actualLandingTime: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) actualOffBlockTime: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) aircraftRegistration: str | None = None aircraftType: AircraftTypeType | None = None baggageClaim: BaggageClaimType | None = None checkinAllocations: CheckinAllocationsType | None = None codeshares: CodesharesType | None = None estimatedLandingTime: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) expectedTimeBoarding: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) expectedTimeGateClosing: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) expectedTimeGateOpen: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) expectedTimeOnBelt: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) expectedSecurityFilter: str | None = Field( None, description="expected security filter" ) flightDirection: FlightDirection | None = None flightName: str | None = None flightNumber: int | None = None gate: str | None = None pier: str | None = None id: str | None = None isOperationalFlight: bool | None = None mainFlight: str | None = None prefixIATA: str | None = None prefixICAO: str | None = None airlineCode: int | None = None publicEstimatedOffBlockTime: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) publicFlightState: PublicFlightStateType | None = None route: RouteType | None = None scheduleDateTime: datetime | None = Field( None, description="yyyy-MM-dd'T'HH:mm:ss.SSSZ" ) scheduleDate: date | None = Field(None, description="yyyy-MM-dd") scheduleTime: str | None = Field(None, description="hh:mm:ss") serviceType: str | None = Field( None, description="The service type category of the commercial flight. For example: J = Passenger Line, C=Passenger Charter, F = Freight Line and H = Freight Charter etc.", ) terminal: int | None = None transferPositions: TransferPositionsType | None = None schemaVersion: str | None = None class FlightList(BaseModel): flights: list[Flight] | None = None