"""Kleine Helfer zum Aufbau von Testdaten.""" from __future__ import annotations from datetime import date from sqlalchemy import select from oamc.models import ( Ergebnis, Fahrer, Klasse, Meisterschaft, Start, Turnier, Veranstaltung, Verein, ) from oamc.models.enums import StartStatus, TurnierStatus, VeranstaltungStatus def meisterschaft(db, jahr=2026): """Die eine Meisterschaft der Saison (aus dem Seed).""" return db.scalars(select(Meisterschaft).where(Meisterschaft.saison_jahr == jahr)).one() def klasse(db, code="J 3"): return db.scalars(select(Klasse).where(Klasse.code == code, Klasse.saison_jahr == 2026)).one() def verein(db, name="OAMC Reinheim e.V. im ADAC"): return db.scalars(select(Verein).where(Verein.name == name)).first() def veranstaltung(db, *, datum=date(2026, 5, 31), titel="Testturnier", status=VeranstaltungStatus.LAUFEND): v = Veranstaltung(datum=datum, titel=titel, ort="Reinheim", status=status, ist_doppelturnier=False) db.add(v) db.flush() return v def turnier(db, v=None, *, name="Reinheim", meisterschaft=None, aktiv=False, status=TurnierStatus.LAUFEND, flush=True): """``meisterschaft``: Meisterschaft-Objekt (zaehlt zur Jahreswertung) oder None.""" v = v or veranstaltung(db) t = Turnier( veranstaltung_id=v.id, name=name, meisterschaft_id=meisterschaft.id if meisterschaft is not None else None, ist_aktiv=aktiv, status=status, ) db.add(t) if flush: db.flush() return t def fahrer(db, nachname="Mustermann", vorname="Max", geburtsjahr=2014): f = Fahrer(nachname=nachname, vorname=vorname, geburtsjahr=geburtsjahr) db.add(f) db.flush() return f def start(db, t, f, k, *, startnummer, status=StartStatus.GESTARTET, wertungsklasse_id=None, flush=True): s = Start( turnier_id=t.id, fahrer_id=f.id, klasse_id=k.id, startnummer=startnummer, status=status, wertungsklasse_id=wertungsklasse_id, ) db.add(s) if flush: db.flush() return s def ergebnis(db, s, *, zeit=None, fehler=None, zeit_fertig=True, fehler_fertig=True): e = Ergebnis( start_id=s.id, summe_zeit=zeit, summe_fehler=fehler, zeit_vollstaendig=zeit_fertig, fehler_vollstaendig=fehler_fertig, ) db.add(e) db.flush() return e