debate/backend/app/core/config.py
Mikkel Georgsen cd94d99c62 feat(01-05): add systemd-nspawn sandbox for isolated ISO builds
- Create scripts/setup-sandbox.sh to bootstrap Arch base environment
- Add BuildSandbox class for container management and build execution
- Configure sandbox with network isolation, read-only root, 8GB/4core limits
- Add sandbox_root and iso_output_root settings to config
2026-01-25 20:19:02 +00:00

55 lines
1.5 KiB
Python

"""Application configuration via pydantic-settings."""
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
"""Application settings loaded from environment variables."""
# Database
database_url: str = "postgresql+asyncpg://debate:debate_dev@localhost:5433/debate"
# Security
secret_key: str = "change-me-in-production"
csrf_secret_key: str = "change-me-in-production"
# Environment
environment: str = "development"
debug: bool = True
# CORS and trusted hosts
allowed_hosts: str = "localhost,127.0.0.1"
allowed_origins: str = "http://localhost:3000,http://127.0.0.1:3000"
# Cookie settings
cookie_domain: str = "localhost"
# Build sandbox settings
sandbox_root: str = "/var/lib/debate/sandbox"
iso_output_root: str = "/var/lib/debate/builds"
@property
def allowed_hosts_list(self) -> list[str]:
"""Parse allowed hosts as a list."""
return [h.strip() for h in self.allowed_hosts.split(",") if h.strip()]
@property
def allowed_origins_list(self) -> list[str]:
"""Parse allowed origins as a list."""
return [o.strip() for o in self.allowed_origins.split(",") if o.strip()]
@property
def is_production(self) -> bool:
"""Check if running in production environment."""
return self.environment == "production"
class Config:
"""Pydantic settings configuration."""
env_file = ".env"
env_file_encoding = "utf-8"
extra = "ignore"
# Global settings instance
settings = Settings()