homelab / scripts /race_day_trigger.py
nj9997
v1.1.2
b10d399
Raw
History Blame Contribute Delete
1.94 kB
#!/usr/bin/env python3
from __future__ import annotations
import os
import sys
from datetime import datetime, timezone
import requests
OPENF1_BASE_URL = os.getenv("OPENF1_BASE_URL", "https://api.openf1.org/v1")
INGEST_URL = os.getenv("INGEST_URL")
def is_race_day(date_iso: str) -> bool:
params = {"date_start>=": date_iso, "date_end<=": date_iso}
response = requests.get(f"{OPENF1_BASE_URL}/sessions", params=params, timeout=30)
response.raise_for_status()
sessions = response.json()
return any(
(session.get("session_type") == "Race" or session.get("session_name") == "Race")
for session in sessions
)
def has_practice_sessions(date_iso: str) -> bool:
params = {"date_start>=": date_iso, "date_end<=": date_iso}
response = requests.get(f"{OPENF1_BASE_URL}/sessions", params=params, timeout=30)
response.raise_for_status()
sessions = response.json()
return any(
"practice" in (session.get("session_type") or session.get("session_name") or "").lower()
for session in sessions
)
def trigger_ingest(date_iso: str) -> None:
if not INGEST_URL:
raise RuntimeError("INGEST_URL is not set")
response = requests.post(INGEST_URL, params={"date": date_iso}, timeout=60)
response.raise_for_status()
print("Ingest triggered:", response.json())
def main() -> int:
date_iso = os.getenv("RACE_DATE")
if not date_iso:
date_iso = datetime.now(timezone.utc).date().isoformat()
if has_practice_sessions(date_iso):
print(f"Practice sessions detected for {date_iso}. Triggering practice ingest.")
trigger_ingest(date_iso)
return 0
if is_race_day(date_iso):
print(f"Race day detected for {date_iso}. Triggering ingest.")
trigger_ingest(date_iso)
else:
print(f"No race session found for {date_iso}. Skipping.")
return 0
if __name__ == "__main__":
sys.exit(main())