Files
ProgressionMods/progression_backend/config.py
T
HRiggs 7ac541def5
Build and Publish Container / Publish Linux container (push) Failing after 1m52s
public site and containers for that.
2026-10-02 12:57:22 -04:00

90 lines
3.0 KiB
Python

from __future__ import annotations
import os
from dataclasses import dataclass
from pathlib import Path
from dotenv import load_dotenv
DEFAULT_COLLECTIONS = {
"Core": "3521297585",
"Content": "3521319712",
"Cosmetics": "3637541646",
}
def _as_bool(value: str | None, default: bool) -> bool:
if value is None:
return default
return value.strip().lower() in {"1", "true", "yes", "on"}
def _collection_id(value: str | None, fallback: str) -> str:
"""Accept either a raw Workshop id or one of the existing URL settings."""
if not value:
return fallback
digits = "".join(character for character in value if character.isdigit())
return digits or fallback
@dataclass(frozen=True)
class Settings:
host: str
port: int
database_path: Path
steamcmd_path: str
workshop_content_dir: Path
steamcmd_batch_size: int
steamcmd_timeout_seconds: int
refresh_interval_seconds: int
refresh_on_startup: bool
game_version: str
admin_token: str | None
collections: dict[str, str]
static_dir: Path
@classmethod
def load(cls, root: Path | None = None) -> Settings:
root = (root or Path.cwd()).resolve()
load_dotenv(root / ".env")
default_steamcmd = ".steamcmd/steamcmd.exe" if os.name == "nt" else "steamcmd"
return cls(
host=os.getenv("PROGRESSION_HOST", "127.0.0.1"),
port=int(os.getenv("PROGRESSION_PORT", "8000")),
database_path=(
root / os.getenv("PROGRESSION_DB_PATH", ".data/progression.db")
).resolve(),
steamcmd_path=os.getenv("STEAMCMD_PATH", default_steamcmd),
workshop_content_dir=(
root
/ os.getenv(
"STEAMCMD_WORKSHOP_DIR",
".steamcmd/steamapps/workshop/content/294100",
)
).resolve(),
steamcmd_batch_size=max(1, int(os.getenv("STEAMCMD_BATCH_SIZE", "25"))),
steamcmd_timeout_seconds=max(
60, int(os.getenv("STEAMCMD_TIMEOUT_SECONDS", "1800"))
),
refresh_interval_seconds=max(
60, int(os.getenv("REFRESH_INTERVAL_SECONDS", "3600"))
),
refresh_on_startup=_as_bool(os.getenv("REFRESH_ON_STARTUP"), True),
game_version=os.getenv("MODLIST_GAME_VERSION", "1.6").strip() or "1.6",
admin_token=os.getenv("PROGRESSION_ADMIN_TOKEN") or None,
collections={
"Core": _collection_id(
os.getenv("CORE_COLLECTION_URL"), DEFAULT_COLLECTIONS["Core"]
),
"Content": _collection_id(
os.getenv("CONTENT_COLLECTION_URL"), DEFAULT_COLLECTIONS["Content"]
),
"Cosmetics": _collection_id(
os.getenv("COSMETICS_COLLECTION_URL"),
DEFAULT_COLLECTIONS["Cosmetics"],
),
},
static_dir=root / "progression_backend" / "static",
)