from pydantic import model_validator from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): database_url: str = "sqlite:///./vault.db" # строка подключения к БД; jwt_secret: str = "" # секрет для подписи JWT; jwt_algorithm: str = "HS256" # по умолчанию `HS256`; access_token_ttl_min: int = 60 # время жизни access-токена в минутах; password_pepper: str = "" # глобальный «перец» для паролей; password_min_length: int = 12 # минимальная длина пароля; environment: str = "development" # служебные поля. app_name: str = "Vault" # служебные поля. model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", extra="ignore", ) @model_validator(mode="after") def _require_secrets(self) -> "Settings": missing = [ name for name in ("jwt_secret", "password_pepper") if not getattr(self, name) ] if missing: raise ValueError("Missing required settings: " + ", ".join(missing)) return self settings = Settings()