No credentials required. FastF1 caches every session it loads to
data/cache/ on disk, so re-running ingestion including with --force never re-fetches data that’s already been pulled once.Loading a session
ingest.py asks FastF1 for a Race or Qualifying session by year and round number, then loads it: laps for both session types, plus telemetry and weather for races. The object that comes back exposes everything downstream session.laps, session.weather_data, session.race_control_messages, session.results, session.track_status, session.car_data, session.pos_data as pandas DataFrames or DataFrame-like accessors, one per dataset Bronze writes.
Retry envelope
Network calls and FastF1’s own session load can fail transiently. Every load goes through a generic retry wrapper: up to 4 attempts, with a 1s, then 2s, then 4s delay between them. If the final attempt still fails, the original exception propagates and the session is recorded aserror on the run manifest rather than silently skipped.
A run that lasts hours absorbs the transient blips this way without any operator intervention; only a true, sustained failure surfaces as an error.
Schema drift between seasons
Schema drift between seasons
FastF1’s own output schema isn’t perfectly stable across seasons a column can be renamed, retyped, or added. Ingestion doesn’t try to predict this; instead, every write computes a schema fingerprint (a hash of the sorted column names) and records it on the run manifest. Comparing fingerprints across runs makes drift detectable rather than something that silently flows into the warehouse. See Data Quality and Manifest Report.