from pydantic_settings import BaseSettings from pydantic import model_validator from typing import Optional class Settings(BaseSettings): # Required — fail fast at import time if unset. DATABASE_URL: str = "" SENDGRID_API_KEY: Optional[str] = None EMAIL_BACKEND: str = "console" LUCKY_CA_URL: str = "https://www.luckyncal.com" # Swiftly product API (replaces Playwright path). The bearer JWT is # auto-minted at request time via app.services.swiftly_auth.get_token(). LUCKY_STORE_ID: str = "757" SWIFTLY_API_BASE: str = "https://prod.swiftlyapi.net" SWIFTLY_CATEGORIES_URL: str = "https://luckysupermarkets.com/categories" AI_IMAGE_ENABLED: bool = False AI_IMAGE_PROVIDER: Optional[str] = None AI_IMAGE_API_KEY: Optional[str] = None LOG_LEVEL: str = "INFO" SECRET_KEY: str = "dev-secret-key" # Auth (R1-B+D) ADMIN_TOKEN: str = "" SESSION_PASSWORD: str = "" ADMIN_EMAIL: str = "" APP_BASE_URL: str = "http://localhost" FAMILY_EMAIL_1: Optional[str] = None FAMILY_EMAIL_2: Optional[str] = None RECIPES_EMAIL: Optional[str] = None class Config: env_file = ".env" @model_validator(mode="after") def _require_database_url(self) -> "Settings": if not self.DATABASE_URL: raise RuntimeError("DATABASE_URL is required") return self settings = Settings()