tracinginsights commited on
Commit
e742cfd
·
1 Parent(s): bbbe396

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +94 -18
main.py CHANGED
@@ -1,31 +1,107 @@
1
- from fastapi import FastAPI
2
-
3
- from fastapi.responses import HTMLResponse, FileResponse
4
-
5
  import fastf1
6
  import pandas as pd
 
 
 
7
 
8
  app = FastAPI()
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  @app.get("/")
11
- def read_root():
12
- return {"Hello": "World!"}
 
13
 
14
- @app.get("/{year}/{race}/{session}")
15
- async def get_data(year: int, race: int, session: str):
 
 
16
  f1session = fastf1.get_session(year, race, session)
17
  f1session.load(telemetry=False, weather=False, messages=False)
18
  # Load all laps with telemetry
19
  laps = f1session.laps
20
- laps['Sector1Time'] = laps['Sector1Time'].dt.total_seconds()
21
- laps['Sector2Time'] = laps['Sector2Time'].dt.total_seconds()
22
- laps['Sector3Time'] = laps['Sector3Time'].dt.total_seconds()
23
- laps['LapTime_in_seconds'] = laps['LapTime'].dt.total_seconds()
24
- laps['laptime_sum_sectortimes'] = laps.Sector1Time + \
25
- laps.Sector2Time + laps.Sector3Time
26
-
27
- # convert laps to csv
28
- laps.to_csv('laps.csv', index=False)
29
  # return laps
 
 
 
 
 
30
  # return FileResponse(path='laps.csv', filename='laps.csv')
31
- return FileResponse(path='laps.csv', filename='laps.csv')
 
 
 
 
 
1
  import fastf1
2
  import pandas as pd
3
+ from fastapi import FastAPI
4
+ from fastapi.responses import FileResponse, HTMLResponse
5
+ from pydantic import BaseModel
6
 
7
  app = FastAPI()
8
 
9
+
10
+ # class Laps(BaseModel):
11
+ # Time: pd.Timedelta
12
+ # Driver: str
13
+ # DriverNumber: str
14
+ # LapTime: pd.Timedelta
15
+ # LapNumber: int
16
+ # Stint: int
17
+ # PitOutTime: pd.Timedelta
18
+ # PitInTime: pd.Timedelta
19
+ # Sector1Time: pd.Timedelta
20
+ # Sector2Time: pd.Timedelta
21
+ # Sector3Time: pd.Timedelta
22
+ # Sector1SessionTime: pd.Timedelta
23
+ # Sector2SessionTime: pd.Timedelta
24
+ # Sector3SessionTime: pd.Timedelta
25
+ # SpeedI1: float
26
+ # SpeedI2: float
27
+ # SpeedFL: float
28
+ # SpeedST: float
29
+ # IsPersonalBest: bool
30
+ # Compound: str
31
+ # TyreLife: float
32
+ # FreshTyre: bool
33
+ # Team: str
34
+ # LapStartTime: pd.Timedelta
35
+ # LapStartDate: pd.Timestamp
36
+ # TrackStatus: str
37
+ # IsAccurate: bool
38
+ # # https://stackoverflow.com/questions/65412984/using-pandas-data-frame-as-a-type-in-pydantic
39
+
40
+ # class Config:
41
+ # arbitrary_types_allowed = True
42
+
43
+
44
+ class Laps(BaseModel):
45
+ Time: pd.core.frame.DataFrame
46
+ Driver: pd.core.frame.DataFrame
47
+ DriverNumber: pd.core.frame.DataFrame
48
+ LapTime: pd.core.frame.DataFrame
49
+ LapNumber: pd.core.frame.DataFrame
50
+ Stint: pd.core.frame.DataFrame
51
+ PitOutTime: pd.core.frame.DataFrame
52
+ PitInTime: pd.core.frame.DataFrame
53
+ Sector1Time: pd.core.frame.DataFrame
54
+ Sector2Time: pd.core.frame.DataFrame
55
+ Sector3Time: pd.core.frame.DataFrame
56
+ Sector1SessionTime: pd.core.frame.DataFrame
57
+ Sector2SessionTime: pd.core.frame.DataFrame
58
+ Sector3SessionTime: pd.core.frame.DataFrame
59
+ SpeedI1: pd.core.frame.DataFrame
60
+ SpeedI2: pd.core.frame.DataFrame
61
+ SpeedFL: pd.core.frame.DataFrame
62
+ SpeedST: pd.core.frame.DataFrame
63
+ IsPersonalBest: pd.core.frame.DataFrame
64
+ Compound: pd.core.frame.DataFrame
65
+ TyreLife: pd.core.frame.DataFrame
66
+ FreshTyre: pd.core.frame.DataFrame
67
+ Team: pd.core.frame.DataFrame
68
+ LapStartTime: pd.core.frame.DataFrame
69
+ LapStartDate: pd.core.frame.DataFrame
70
+ TrackStatus: pd.core.frame.DataFrame
71
+ IsAccurate: pd.core.frame.DataFrame
72
+ # https://stackoverflow.com/questions/65412984/using-pandas-data-frame-as-a-type-in-pydantic
73
+
74
+ class Config:
75
+ arbitrary_types_allowed = True
76
+
77
+
78
  @app.get("/")
79
+ async def root():
80
+ return {"message": "Hello World"}
81
+
82
 
83
+ # create a function that returns laps dataframe given year, race ,session from fastf1
84
+
85
+ @app.get("/{year}/{race}/{session}", response_model=None)
86
+ async def get_data(year: int, race: int, session: str) -> any:
87
  f1session = fastf1.get_session(year, race, session)
88
  f1session.load(telemetry=False, weather=False, messages=False)
89
  # Load all laps with telemetry
90
  laps = f1session.laps
91
+ # laps['Sector1Time'] = laps['Sector1Time'].dt.total_seconds()
92
+ # laps['Sector2Time'] = laps['Sector2Time'].dt.total_seconds()
93
+ # laps['Sector3Time'] = laps['Sector3Time'].dt.total_seconds()
94
+ # laps['LapTime_in_seconds'] = laps['LapTime'].dt.total_seconds()
95
+ # laps['laptime_sum_sectortimes'] = laps.Sector1Time + \
96
+ # laps.Sector2Time + laps.Sector3Time
97
+
98
+ # # convert laps to csv
99
+ # laps.to_csv('laps.csv', index=False)
100
  # return laps
101
+
102
+ # in laps replace NaN with ""
103
+ laps = laps.fillna("")
104
+ return {"laps": laps.to_dict(orient='records')}
105
+
106
  # return FileResponse(path='laps.csv', filename='laps.csv')
107
+ # return HTMLResponse(content=laps.to_html(), status_code=200)