init commit
This commit is contained in:
137
mcp_servers/data/models.py
Normal file
137
mcp_servers/data/models.py
Normal file
@@ -0,0 +1,137 @@
|
||||
"""Pydantic models for all operational data."""
|
||||
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class FlightStatus(str, Enum):
|
||||
ON_TIME = "ON_TIME"
|
||||
DELAYED = "DELAYED"
|
||||
CANCELLED = "CANCELLED"
|
||||
DIVERTED = "DIVERTED"
|
||||
|
||||
|
||||
class DelayCause(str, Enum):
|
||||
WEATHER = "WEATHER"
|
||||
MAINTENANCE = "MAINTENANCE"
|
||||
CREW = "CREW"
|
||||
ATC = "ATC"
|
||||
LATE_AIRCRAFT = "LATE_AIRCRAFT"
|
||||
|
||||
|
||||
class CrewRole(str, Enum):
|
||||
CAPTAIN = "CAPTAIN"
|
||||
FIRST_OFFICER = "FIRST_OFFICER"
|
||||
FA = "FA"
|
||||
|
||||
|
||||
class MPStatus(str, Enum):
|
||||
GLOBAL_SERVICES = "GLOBAL_SERVICES"
|
||||
K1 = "1K"
|
||||
PLATINUM = "PLATINUM"
|
||||
GOLD = "GOLD"
|
||||
SILVER = "SILVER"
|
||||
GENERAL = "GENERAL"
|
||||
|
||||
|
||||
class FlightData(BaseModel):
|
||||
flight_id: str
|
||||
origin: str
|
||||
destination: str
|
||||
scheduled_departure: datetime
|
||||
actual_departure: datetime | None = None
|
||||
scheduled_arrival: datetime
|
||||
actual_arrival: datetime | None = None
|
||||
status: FlightStatus
|
||||
delay_minutes: int = 0
|
||||
delay_cause: DelayCause | None = None
|
||||
aircraft_tail: str
|
||||
gate: str
|
||||
inbound_flight: str | None = None
|
||||
crew_ids: list[str] = []
|
||||
passenger_count: int = 0
|
||||
|
||||
|
||||
class CrewMember(BaseModel):
|
||||
crew_id: str
|
||||
name: str
|
||||
role: CrewRole
|
||||
duty_hours_elapsed: float
|
||||
duty_hours_limit: float
|
||||
rest_hours_since_last: float
|
||||
next_scheduled_flight: str | None = None
|
||||
base_hub: str
|
||||
|
||||
|
||||
class Passenger(BaseModel):
|
||||
pax_id: str
|
||||
name: str
|
||||
mileage_plus_status: MPStatus
|
||||
flight_id: str
|
||||
destination: str
|
||||
connection_flight: str | None = None
|
||||
connection_deadline: datetime | None = None
|
||||
special_needs: list[str] = []
|
||||
|
||||
|
||||
class MELItem(BaseModel):
|
||||
mel_id: str
|
||||
aircraft_tail: str
|
||||
system: str
|
||||
description: str
|
||||
restriction: str | None = None
|
||||
expires: datetime
|
||||
|
||||
|
||||
class RebookingCase(BaseModel):
|
||||
pax_id: str
|
||||
name: str
|
||||
original_flight: str
|
||||
mileage_plus_status: MPStatus
|
||||
destination: str
|
||||
next_available: str | None = None
|
||||
urgency: str # HIGH | MEDIUM | LOW
|
||||
|
||||
|
||||
class HubInfo(BaseModel):
|
||||
code: str
|
||||
name: str
|
||||
city: str
|
||||
timezone: str
|
||||
latitude: float
|
||||
longitude: float
|
||||
terminals: int
|
||||
gates: int
|
||||
runways: int
|
||||
|
||||
|
||||
# Hub reference data
|
||||
HUBS: dict[str, HubInfo] = {
|
||||
"ORD": HubInfo(
|
||||
code="ORD", name="O'Hare International", city="Chicago",
|
||||
timezone="America/Chicago", latitude=41.9742, longitude=-87.9073,
|
||||
terminals=4, gates=191, runways=8,
|
||||
),
|
||||
"EWR": HubInfo(
|
||||
code="EWR", name="Newark Liberty International", city="Newark",
|
||||
timezone="America/New_York", latitude=40.6895, longitude=-74.1745,
|
||||
terminals=3, gates=120, runways=3,
|
||||
),
|
||||
"IAH": HubInfo(
|
||||
code="IAH", name="George Bush Intercontinental", city="Houston",
|
||||
timezone="America/Chicago", latitude=29.9902, longitude=-95.3368,
|
||||
terminals=5, gates=130, runways=5,
|
||||
),
|
||||
"SFO": HubInfo(
|
||||
code="SFO", name="San Francisco International", city="San Francisco",
|
||||
timezone="America/Los_Angeles", latitude=37.6213, longitude=-122.3790,
|
||||
terminals=4, gates=115, runways=4,
|
||||
),
|
||||
"DEN": HubInfo(
|
||||
code="DEN", name="Denver International", city="Denver",
|
||||
timezone="America/Denver", latitude=39.8561, longitude=-104.6737,
|
||||
terminals=1, gates=95, runways=6,
|
||||
),
|
||||
}
|
||||
Reference in New Issue
Block a user