laps.pyā¢3.37 kB
from pydantic import BaseModel, Field
from typing import Optional
class LapData(BaseModel):
"""Individual lap data."""
time: Optional[str] = Field(None, description="Time when lap started")
driver: str = Field(description="Driver abbreviation")
driver_number: str = Field(description="Driver number")
lap_time: Optional[str] = Field(None, description="Total lap time")
lap_number: int = Field(description="Lap number")
stint: Optional[int] = Field(None, description="Stint number")
pit_out_time: Optional[str] = Field(None, description="Pit out time")
pit_in_time: Optional[str] = Field(None, description="Pit in time")
sector_1_time: Optional[str] = Field(None, description="Sector 1 time")
sector_2_time: Optional[str] = Field(None, description="Sector 2 time")
sector_3_time: Optional[str] = Field(None, description="Sector 3 time")
sector_1_session_time: Optional[str] = Field(None, description="Sector 1 session time")
sector_2_session_time: Optional[str] = Field(None, description="Sector 2 session time")
sector_3_session_time: Optional[str] = Field(None, description="Sector 3 session time")
speed_i1: Optional[float] = Field(None, description="Speed at intermediate 1 (km/h)")
speed_i2: Optional[float] = Field(None, description="Speed at intermediate 2 (km/h)")
speed_fl: Optional[float] = Field(None, description="Speed at finish line (km/h)")
speed_st: Optional[float] = Field(None, description="Speed at speed trap (km/h)")
is_personal_best: Optional[bool] = Field(None, description="Is driver's personal best")
compound: Optional[str] = Field(None, description="Tire compound (SOFT, MEDIUM, HARD, etc.)")
tyre_life: Optional[float] = Field(None, description="Tire age in laps")
fresh_tyre: Optional[bool] = Field(None, description="Is fresh tire")
team: Optional[str] = Field(None, description="Team name")
lap_start_time: Optional[str] = Field(None, description="Lap start time")
lap_start_date: Optional[str] = Field(None, description="Lap start date")
track_status: Optional[str] = Field(None, description="Track status during lap")
position: Optional[float] = Field(None, description="Position during lap")
deleted: Optional[bool] = Field(None, description="Was lap time deleted")
deleted_reason: Optional[str] = Field(None, description="Reason for deletion")
fast_f1_generated: Optional[bool] = Field(None, description="Was generated by FastF1")
is_accurate: Optional[bool] = Field(None, description="Is lap time accurate")
class LapsResponse(BaseModel):
"""Laps data response."""
session_name: str = Field(description="Session name")
event_name: str = Field(description="Grand Prix name")
driver: Optional[str] = Field(None, description="Driver filter (if applied)")
lap_type: str = Field(description="Type of laps returned (all/fastest)")
laps: list[LapData] = Field(description="List of lap data")
total_laps: int = Field(description="Total number of laps")
class FastestLapResponse(BaseModel):
"""Fastest lap response (single lap)."""
session_name: str = Field(description="Session name")
event_name: str = Field(description="Grand Prix name")
driver: str = Field(description="Driver abbreviation")
lap_data: LapData = Field(description="Fastest lap data")