Update docs and screenshots
CI / backend (pull_request) Canceled after 0s
CI / shell (pull_request) Canceled after 0s
CI / frontend (pull_request) Canceled after 0s
CI / arm64-smoke (pull_request) Canceled after 0s
CI / backend (push) Canceled after 0s
CI / shell (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / arm64-smoke (push) Canceled after 0s

This commit is contained in:
2026-07-25 10:26:29 +02:00
parent d6cda77aaf
commit 1f110866f5
170 changed files with 24657 additions and 3 deletions
+60
View File
@@ -0,0 +1,60 @@
from functools import lru_cache
from pathlib import Path
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_prefix="TUXDMX_", env_file=".env", extra="ignore")
app_name: str = "TuxDMX"
env: str = "development"
secret_key: str = "development-secret-change-me"
database_url: str = "sqlite+aiosqlite:///./data/tuxdmx.db"
simulator_enabled: bool = True
allow_local_docs: bool = True
log_level: str = "INFO"
target_fps: int = Field(default=30, ge=1, le=44)
ola_universe: int = Field(default=1, ge=1, le=63999)
ola_output_port: str | None = None
ola_send_timeout_ms: int = Field(default=1000, ge=100, le=10000)
system_control_enabled: bool = True
system_service_name: str = "tuxdmx.service"
system_control_helper: str = "/opt/tuxdmx/scripts/control-system.sh"
frontend_dist: Path = Path("frontend/dist")
data_dir: Path = Path("data")
backup_dir: Path = Path("data/backups")
fixture_cache_dir: Path = Path("data/fixtures")
diagnostics_dir: Path = Path("data/diagnostics")
uploads_dir: Path = Path("data/uploads")
log_dir: Path = Path("data")
def resolve_path(path: Path) -> Path:
return path.expanduser().resolve(strict=False)
@lru_cache(maxsize=1)
def get_settings() -> Settings:
settings = Settings()
settings.frontend_dist = resolve_path(settings.frontend_dist)
settings.data_dir = resolve_path(settings.data_dir)
settings.backup_dir = resolve_path(settings.backup_dir)
settings.fixture_cache_dir = resolve_path(settings.fixture_cache_dir)
settings.diagnostics_dir = resolve_path(settings.diagnostics_dir)
settings.uploads_dir = resolve_path(settings.uploads_dir)
settings.log_dir = resolve_path(settings.log_dir)
settings.data_dir.mkdir(parents=True, exist_ok=True)
settings.backup_dir.mkdir(parents=True, exist_ok=True)
settings.fixture_cache_dir.mkdir(parents=True, exist_ok=True)
settings.diagnostics_dir.mkdir(parents=True, exist_ok=True)
settings.uploads_dir.mkdir(parents=True, exist_ok=True)
settings.log_dir.mkdir(parents=True, exist_ok=True)
return settings
def get_alembic_database_url(database_url: str) -> str:
if database_url.startswith("sqlite+aiosqlite:///"):
return database_url.replace("sqlite+aiosqlite:///", "sqlite:///", 1)
return database_url