"""Application settings loaded from environment variables.""" from __future__ import annotations import os class Settings: """Configuration from ``VEILRENDER_*`` environment variables.""" def __init__(self) -> None: self.api_token: str | None = os.environ.get("VEILRENDER_API_TOKEN") self.port: int = int(os.environ.get("VEILRENDER_PORT", "7860")) self.host: str = os.environ.get("VEILRENDER_HOST", "0.0.0.0") self.timeout: int = int(os.environ.get("VEILRENDER_TIMEOUT", "30000")) self.viewport_width: int = int( os.environ.get("VEILRENDER_VIEWPORT_WIDTH", "1280") ) self.viewport_height: int = int( os.environ.get("VEILRENDER_VIEWPORT_HEIGHT", "720") ) self.max_concurrent: int = int(os.environ.get("VEILRENDER_MAX_CONCURRENT", "5")) self.resource_filter: bool = ( os.environ.get("VEILRENDER_RESOURCE_FILTER", "true").lower() == "true" ) _extra = os.environ.get("VEILRENDER_BLOCKED_DOMAINS_EXTRA", "") self.blocked_domains_extra: list[str] = ( [d.strip() for d in _extra.split(",") if d.strip()] if _extra else [] ) # Cache settings self.cache_enabled: bool = ( os.environ.get("VEILRENDER_CACHE_ENABLED", "false").lower() == "true" ) self.cache_ttl: int = int(os.environ.get("VEILRENDER_CACHE_TTL", "86400")) self.cache_l1_maxsize: int = int( os.environ.get("VEILRENDER_CACHE_L1_MAXSIZE", "100") ) # S3-compatible storage (Cloudflare R2, Oracle Object Storage, etc.) self.s3_endpoint: str | None = os.environ.get("VEILRENDER_S3_ENDPOINT") self.s3_access_key: str | None = os.environ.get("VEILRENDER_S3_ACCESS_KEY") self.s3_secret_key: str | None = os.environ.get("VEILRENDER_S3_SECRET_KEY") self.s3_bucket: str = os.environ.get("VEILRENDER_S3_BUCKET", "veilrender-cache") self.s3_region: str = os.environ.get("VEILRENDER_S3_REGION", "auto") self.s3_secure: bool = ( os.environ.get("VEILRENDER_S3_SECURE", "true").lower() == "true" ) settings = Settings()