""" Configuration module for DGaze Gradio application. Loads settings from environment variables and .env file. """ import os import sys from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() class Settings: """Application settings loaded from environment variables.""" def __init__(self): # Backend API Configuration - MANDATORY from .env self.API_BASE_URL = self._get_required_env("API_BASE_URL") self.API_ENDPOINT = f"{self.API_BASE_URL}/api/verify" self.HEALTH_ENDPOINT = f"{self.API_BASE_URL}/api/health" # Auth0 Configuration - MANDATORY for authentication # For Spaces deployment, these should be set as environment variables self.AUTH0_DOMAIN = self._get_required_env("AUTH0_DOMAIN") self.AUTH0_CLIENT_ID = self._get_required_env("AUTH0_CLIENT_ID") self.AUTH0_CLIENT_SECRET = self._get_required_env("AUTH0_CLIENT_SECRET") self.AUTH0_AUDIENCE = self._get_required_env("AUTH0_AUDIENCE") # Gradio Application Configuration self.GRADIO_SERVER_NAME = os.getenv("GRADIO_SERVER_NAME", "0.0.0.0") self.GRADIO_SERVER_PORT = int(os.getenv("GRADIO_SERVER_PORT", "7860")) # Default to 7860 for Spaces self.GRADIO_SHARE = os.getenv("GRADIO_SHARE", "false").lower() == "true" # Health Check Configuration self.HEALTH_CHECK_ENABLED = os.getenv("HEALTH_CHECK_ENABLED", "true").lower() == "true" self.HEALTH_CHECK_INTERVAL = int(os.getenv("HEALTH_CHECK_INTERVAL", "30")) # Security self.SECRET_KEY = os.getenv("SECRET_KEY", "your-secret-key-for-sessions") # Logging Configuration self.LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") self.DEBUG = os.getenv("DEBUG", "false").lower() == "true" # Rate Limiting self.RATE_LIMIT_ENABLED = os.getenv("RATE_LIMIT_ENABLED", "true").lower() == "true" self.RATE_LIMIT_REQUESTS = int(os.getenv("RATE_LIMIT_REQUESTS", "100")) self.RATE_LIMIT_WINDOW = int(os.getenv("RATE_LIMIT_WINDOW", "3600")) # Cache Configuration self.CACHE_ENABLED = os.getenv("CACHE_ENABLED", "true").lower() == "true" self.CACHE_TTL = int(os.getenv("CACHE_TTL", "3600")) # OAuth Configuration - Use from .env if provided, otherwise build dynamically self.OAUTH_REDIRECT_URI = os.getenv("AUTH0_REDIRECT_URI") if not self.OAUTH_REDIRECT_URI: self.OAUTH_REDIRECT_URI = f"http://localhost:{self.GRADIO_SERVER_PORT}/auth" if self.GRADIO_SERVER_NAME != "localhost" and self.GRADIO_SERVER_NAME != "127.0.0.1": self.OAUTH_REDIRECT_URI = f"http://{self.GRADIO_SERVER_NAME}:{self.GRADIO_SERVER_PORT}/auth" def _get_required_env(self, var_name: str) -> str: """Get a required environment variable or exit with error.""" value = os.getenv(var_name) if not value: print(f"ERROR: Required environment variable '{var_name}' not found in .env file!") print(f"Please add '{var_name}=' to your .env file") sys.exit(1) return value # Create a settings instance settings = Settings()