"""Application settings loaded from environment variables / .env file.""" import os from dotenv import load_dotenv load_dotenv() class Settings: """Central settings object; all values read from environment variables.""" DATABASE_URL: str = os.getenv("DATABASE_URL", "sqlite+aiosqlite:///./test.db") REDIS_URL: str = os.getenv("REDIS_URL", "redis://localhost:6379/0") CELERY_BROKER_URL: str = os.getenv("CELERY_BROKER_URL", "redis://localhost:6379/0") CELERY_RESULT_BACKEND: str = os.getenv( "CELERY_RESULT_BACKEND", "redis://localhost:6379/0" ) SPOTIFY_CLIENT_ID: str = os.getenv("SPOTIFY_CLIENT_ID", "") SPOTIFY_CLIENT_SECRET: str = os.getenv("SPOTIFY_CLIENT_SECRET", "") SPOTIFY_REDIRECT_URI: str = os.getenv( "SPOTIFY_REDIRECT_URI", "http://localhost:8000/callback" ) YOUTUBE_CLIENT_ID: str = os.getenv("YOUTUBE_CLIENT_ID", "") YOUTUBE_CLIENT_SECRET: str = os.getenv("YOUTUBE_CLIENT_SECRET", "") SYNC_ACCOUNT_FILTER_FILE: str = os.getenv( "SYNC_ACCOUNT_FILTER_FILE", "PlaylistSynchronizationByAccountId.txt" ) SYNC_SWEEP_INTERVAL_SECONDS: int = int( os.getenv("SYNC_SWEEP_INTERVAL_SECONDS", "0") ) # API authentication — value for the FiltrAuthentication request header. # Must be set in production; leave empty only in local dev / tests. FILTR_API_KEY: str = os.getenv("FILTR_API_KEY", "") # Sentry error monitoring — leave DSN empty to disable (e.g. in tests / local dev) SENTRY_DSN: str = os.getenv("SENTRY_DSN", "") SENTRY_ENVIRONMENT: str = os.getenv("SENTRY_ENVIRONMENT", "development") settings = Settings()