from functools import lru_cache from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Configuration applicative, alimentée par l'environnement.""" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", extra="ignore" ) environment: str = "development" database_url: str = ( "postgresql+psycopg://benevoles:benevoles@localhost:5432/benevoles" ) test_database_url: str = ( "postgresql+psycopg://benevoles:benevoles@localhost:5432/benevoles_test" ) # Authentification (lien magique + session JWT). Secret >= 32 octets. jwt_secret: str = "dev-insecure-secret-change-me-please-32b" magic_link_ttl_minutes: int = 30 session_ttl_hours: int = 12 # URL publique du frontend, pour construire les liens des emails. public_base_url: str = "http://localhost:5173" magic_link_path: str = "/connexion" # Envoi d'emails (SMTP). Ne jamais mettre de vraies valeurs ici : elles # vivent dans .env (non versionné) ou l'environnement. # email_enabled=False ⇒ les envois sont seulement journalisés (dev, tests). email_enabled: bool = False smtp_host: str = "localhost" smtp_port: int = 587 smtp_user: str = "" smtp_password: str = "" smtp_starttls: bool = True smtp_ssl: bool = False # Beaucoup de fournisseurs (OVH…) exigent une From = boîte authentifiée # (ou un alias validé). En cas de rejet, mettre SMTP_FROM = SMTP_USER. smtp_from: str = "Festival des bénévoles " log_level: str = "INFO" cors_origins: list[str] = ["http://localhost:5173"] @property def is_production(self) -> bool: return self.environment == "production" @lru_cache def get_settings() -> Settings: return Settings()