import tomllib from markdown import markdown from pydantic import BaseModel, ConfigDict, field_validator from .dav.webdav import WebDAV from .settings import SETTINGS from .transformed_string import TransformedString class User(BaseModel): name: str password: str class Site(BaseModel): model_config = ConfigDict(validate_default=True) # Titel title: str # Untertitel subtitle: str # Inhalt der Seite content: str # Fußzeile der Seite footer: str = "**Advent22** by [Lenaisten e.V.](//www.lenaisten.de)" @field_validator("content", "footer", mode="after") def parse_md(cls, v) -> str: return markdown(v) class Puzzle(BaseModel): # Türchen ohne Buchstabe überspringen skip_empty: bool = True # Tag, an dem der Kalender startet begin_day: int = 1 # Monat, in dem der Kalender startet begin_month: int = 12 # Kalender so viele Tage nach der letzten Türöffnung schließen close_after: int = 90 class Image(BaseModel): # Quadrat, Seitenlänge in px size: int = 1000 # Rand in px, wo keine Buchstaben untergebracht werden border: int = 60 class Config(BaseModel): # Login-Daten für Admin-Modus admin: User # Lösungswort solution: TransformedString # Weitere Einstellungen site: Site puzzle: Puzzle image: Image # Kalenderdefinition calendar: str = "default.toml" # Serverseitiger zusätzlicher "random" seed random_seed: str = "" async def get_config() -> Config: """ Globale Konfiguration lesen """ txt = await WebDAV.read_str(path=SETTINGS.webdav.config_filename) return Config.model_validate(tomllib.loads(txt))