F1_API / main.py
tracinginsights's picture
Update main.py
4cc9fb2
raw
history blame
3.5 kB
import fastf1
import pandas as pd
from fastapi import FastAPI
from fastapi.responses import FileResponse, HTMLResponse
from pydantic import BaseModel
app = FastAPI()
# class Laps(BaseModel):
# Time: pd.Timedelta
# Driver: str
# DriverNumber: str
# LapTime: pd.Timedelta
# LapNumber: int
# Stint: int
# PitOutTime: pd.Timedelta
# PitInTime: pd.Timedelta
# Sector1Time: pd.Timedelta
# Sector2Time: pd.Timedelta
# Sector3Time: pd.Timedelta
# Sector1SessionTime: pd.Timedelta
# Sector2SessionTime: pd.Timedelta
# Sector3SessionTime: pd.Timedelta
# SpeedI1: float
# SpeedI2: float
# SpeedFL: float
# SpeedST: float
# IsPersonalBest: bool
# Compound: str
# TyreLife: float
# FreshTyre: bool
# Team: str
# LapStartTime: pd.Timedelta
# LapStartDate: pd.Timestamp
# TrackStatus: str
# IsAccurate: bool
# # https://stackoverflow.com/questions/65412984/using-pandas-data-frame-as-a-type-in-pydantic
# class Config:
# arbitrary_types_allowed = True
class Laps(BaseModel):
Time: pd.core.frame.DataFrame
Driver: pd.core.frame.DataFrame
DriverNumber: pd.core.frame.DataFrame
LapTime: pd.core.frame.DataFrame
LapNumber: pd.core.frame.DataFrame
Stint: pd.core.frame.DataFrame
PitOutTime: pd.core.frame.DataFrame
PitInTime: pd.core.frame.DataFrame
Sector1Time: pd.core.frame.DataFrame
Sector2Time: pd.core.frame.DataFrame
Sector3Time: pd.core.frame.DataFrame
Sector1SessionTime: pd.core.frame.DataFrame
Sector2SessionTime: pd.core.frame.DataFrame
Sector3SessionTime: pd.core.frame.DataFrame
SpeedI1: pd.core.frame.DataFrame
SpeedI2: pd.core.frame.DataFrame
SpeedFL: pd.core.frame.DataFrame
SpeedST: pd.core.frame.DataFrame
IsPersonalBest: pd.core.frame.DataFrame
Compound: pd.core.frame.DataFrame
TyreLife: pd.core.frame.DataFrame
FreshTyre: pd.core.frame.DataFrame
Team: pd.core.frame.DataFrame
LapStartTime: pd.core.frame.DataFrame
LapStartDate: pd.core.frame.DataFrame
TrackStatus: pd.core.frame.DataFrame
IsAccurate: pd.core.frame.DataFrame
# https://stackoverflow.com/questions/65412984/using-pandas-data-frame-as-a-type-in-pydantic
class Config:
arbitrary_types_allowed = True
@app.get("/")
async def root():
return {"message": "Hello World"}
# create a function that returns laps dataframe given year, race ,session from fastf1
@app.get("/{year}/{race}/{session}", response_model=None)
async def get_data(year: int, race: int, session: str) -> any:
f1session = fastf1.get_session(year, race, session)
f1session.load(telemetry=False, weather=False, messages=False)
# Load all laps with telemetry
laps = f1session.laps
laps['Sector1Time'] = laps['Sector1Time'].dt.total_seconds()
laps['Sector2Time'] = laps['Sector2Time'].dt.total_seconds()
laps['Sector3Time'] = laps['Sector3Time'].dt.total_seconds()
laps['LapTime_in_seconds'] = laps['LapTime'].dt.total_seconds()
laps['laptime_sum_sectortimes'] = laps.Sector1Time + \
laps.Sector2Time + laps.Sector3Time
# # convert laps to csv
# laps.to_csv('laps.csv', index=False)
# return laps
# in laps replace NaN with ""
laps = laps.fillna(" ")
return {"laps": laps.to_dict(orient='records')}
# return FileResponse(path='laps.csv', filename='laps.csv')
# return HTMLResponse(content=laps.to_html(), status_code=200)