50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
"""Application configuration using pydantic-settings."""
|
|
|
|
from functools import lru_cache
|
|
from pydantic_settings import BaseSettings
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""Application settings loaded from environment variables."""
|
|
|
|
# Database
|
|
database_url: str = "postgresql://gdl:password@localhost:5432/gallery_subscriber"
|
|
|
|
# Redis
|
|
redis_url: str = "redis://localhost:6379/0"
|
|
|
|
# Security
|
|
secret_key: str = "change-me-in-production"
|
|
# Note: extension_api_key is now stored in database and auto-generated
|
|
|
|
# Paths
|
|
download_path: str = "/data/downloads"
|
|
config_path: str = "/data/config"
|
|
cookies_path: str = "/data/cookies"
|
|
|
|
# Download settings
|
|
download_parallel_limit: int = 3
|
|
download_rate_limit: float = 3.0
|
|
# Note: check_interval is now per-source and stored in database
|
|
|
|
# Server
|
|
host: str = "0.0.0.0"
|
|
port: int = 8080
|
|
debug: bool = False
|
|
log_level: str = "INFO"
|
|
|
|
@property
|
|
def async_database_url(self) -> str:
|
|
"""Convert database URL to async version for asyncpg."""
|
|
return self.database_url.replace("postgresql://", "postgresql+asyncpg://")
|
|
|
|
class Config:
|
|
env_file = ".env"
|
|
env_file_encoding = "utf-8"
|
|
|
|
|
|
@lru_cache
|
|
def get_settings() -> Settings:
|
|
"""Get cached settings instance."""
|
|
return Settings()
|