"""Configuration applicative, entierement pilotee par variables d'environnement.""" from __future__ import annotations from functools import lru_cache from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Parametres du backend. Chaque champ est surchargeable via une variable d'environnement de meme nom (insensible a la casse) : APP_NAME, DATABASE_URL, MAX_NODES, ... """ model_config = SettingsConfigDict(env_file=".env", extra="ignore", case_sensitive=False) app_name: str = "OpenMind" app_port: int = 8080 app_env: str = "production" database_url: str = "sqlite:////app/data/openmind.db" static_dir: str = "/app/static" max_map_size_mb: float = Field(default=10.0, gt=0) max_nodes: int = Field(default=5000, gt=0) max_title_length: int = Field(default=200, gt=0) # Liste d'origines autorisees, separees par des virgules. # Vide = aucune origine externe (l'app est servie par ce meme serveur). cors_origins: str = "" log_level: str = "INFO" @property def max_map_size_bytes(self) -> int: return int(self.max_map_size_mb * 1024 * 1024) @property def cors_origin_list(self) -> list[str]: return [origin.strip() for origin in self.cors_origins.split(",") if origin.strip()] @property def is_debug(self) -> bool: return self.app_env.lower() in {"dev", "development", "debug"} @lru_cache def get_settings() -> Settings: return Settings()