Files
gh-christianlouis-leagueledger/app/league_context.py
T
Christian Krakau-Louis 15e1dc227b Add multi-league foundation
2026-05-22 20:47:28 +02:00

70 lines
1.8 KiB
Python

#!/usr/bin/env python3
import re
from typing import Optional
from sqlalchemy.orm import Session
from .models import League, QRCode
DEFAULT_LEAGUE_NAME = "Default League"
DEFAULT_LEAGUE_SLUG = "default"
def slugify(value: str) -> str:
slug = re.sub(r"[^a-z0-9]+", "-", value.lower()).strip("-")
return slug or DEFAULT_LEAGUE_SLUG
def get_default_league(db: Session) -> League:
league = db.query(League).filter(League.slug == DEFAULT_LEAGUE_SLUG).first()
if league:
return league
league = db.query(League).order_by(League.id).first()
if league:
return league
league = League(
name=DEFAULT_LEAGUE_NAME,
slug=DEFAULT_LEAGUE_SLUG,
description="Default league for existing LeagueLedger data.",
publisher_name="LeagueLedger",
is_active=True,
)
db.add(league)
db.commit()
db.refresh(league)
return league
def get_active_leagues(db: Session):
leagues = db.query(League).filter(League.is_active == True).order_by(League.name).all()
if leagues:
return leagues
return [get_default_league(db)]
def parse_league_id(value) -> Optional[int]:
try:
return int(value) if value else None
except (TypeError, ValueError):
return None
def resolve_selected_league(db: Session, league_id: Optional[int]) -> League:
if league_id:
league = db.query(League).filter(League.id == league_id, League.is_active == True).first()
if league:
return league
return get_default_league(db)
def qr_code_league_id(qr_code: QRCode) -> Optional[int]:
if qr_code.league_id:
return qr_code.league_id
if qr_code.qr_set and qr_code.qr_set.league_id:
return qr_code.qr_set.league_id
if qr_code.event and qr_code.event.league_id:
return qr_code.event.league_id
return None