2023-09-08 19:08:13 +00:00
|
|
|
import tomllib
|
|
|
|
|
2023-11-03 14:40:44 +00:00
|
|
|
from markdown import markdown
|
|
|
|
from pydantic import BaseModel, ConfigDict, field_validator
|
2022-11-04 18:49:31 +00:00
|
|
|
|
2023-10-29 16:08:16 +00:00
|
|
|
from .dav.webdav import WebDAV
|
2023-09-08 19:08:13 +00:00
|
|
|
from .settings import SETTINGS
|
2023-11-22 13:43:43 +00:00
|
|
|
from .transformed_string import TransformedString
|
2023-09-08 19:08:13 +00:00
|
|
|
|
2022-11-04 18:49:31 +00:00
|
|
|
|
2022-11-15 22:17:32 +00:00
|
|
|
class User(BaseModel):
|
|
|
|
name: str
|
|
|
|
password: str
|
|
|
|
|
|
|
|
|
2023-11-03 14:40:44 +00:00
|
|
|
class Site(BaseModel):
|
|
|
|
model_config = ConfigDict(validate_default=True)
|
|
|
|
|
2023-09-21 11:49:28 +00:00
|
|
|
# Titel
|
|
|
|
title: str
|
|
|
|
|
2023-11-03 14:40:44 +00:00
|
|
|
# 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):
|
2023-11-24 00:01:09 +00:00
|
|
|
# Türchen ohne Buchstabe überspringen
|
|
|
|
skip_empty: bool = True
|
|
|
|
|
2023-09-14 23:38:35 +00:00
|
|
|
# Tag, an dem der Kalender startet
|
2023-09-20 16:14:58 +00:00
|
|
|
begin_day: int = 1
|
2023-09-14 23:38:35 +00:00
|
|
|
|
|
|
|
# Monat, in dem der Kalender startet
|
2023-09-20 16:14:58 +00:00
|
|
|
begin_month: int = 12
|
2023-09-07 16:44:44 +00:00
|
|
|
|
2023-09-20 16:14:58 +00:00
|
|
|
# Kalender so viele Tage nach der letzten Türöffnung schließen
|
|
|
|
close_after: int = 90
|
2023-09-07 19:34:11 +00:00
|
|
|
|
|
|
|
|
2023-09-21 11:49:28 +00:00
|
|
|
class Image(BaseModel):
|
|
|
|
# Quadrat, Seitenlänge in px
|
|
|
|
size: int = 1000
|
|
|
|
|
|
|
|
# Rand in px, wo keine Buchstaben untergebracht werden
|
|
|
|
border: int = 60
|
|
|
|
|
2023-09-07 16:44:44 +00:00
|
|
|
|
2022-11-04 18:49:31 +00:00
|
|
|
class Config(BaseModel):
|
2023-10-31 19:18:18 +00:00
|
|
|
# Login-Daten für Admin-Modus
|
2022-11-15 22:17:32 +00:00
|
|
|
admin: User
|
2023-10-31 19:18:18 +00:00
|
|
|
|
|
|
|
# Lösungswort
|
|
|
|
solution: TransformedString
|
|
|
|
|
|
|
|
# Weitere Einstellungen
|
2023-11-03 14:40:44 +00:00
|
|
|
site: Site
|
2022-11-18 01:39:05 +00:00
|
|
|
puzzle: Puzzle
|
2023-09-21 11:49:28 +00:00
|
|
|
image: Image
|
|
|
|
|
|
|
|
# Kalenderdefinition
|
|
|
|
calendar: str = "default.toml"
|
|
|
|
|
|
|
|
# Serverseitiger zusätzlicher "random" seed
|
|
|
|
random_seed: str = ""
|
2023-09-08 19:08:13 +00:00
|
|
|
|
2023-09-08 19:53:35 +00:00
|
|
|
|
2023-09-14 23:38:35 +00:00
|
|
|
async def get_config() -> Config:
|
2023-09-08 19:53:35 +00:00
|
|
|
"""
|
|
|
|
Globale Konfiguration lesen
|
|
|
|
"""
|
|
|
|
|
2023-09-10 02:59:57 +00:00
|
|
|
txt = await WebDAV.read_str(path=SETTINGS.webdav.config_filename)
|
2023-09-08 19:53:35 +00:00
|
|
|
return Config.model_validate(tomllib.loads(txt))
|