""" Configuración centralizada de la aplicación. Carga variables de entorno desde archivo .env """ import os from pathlib import Path from typing import Optional from dotenv import load_dotenv # Cargar variables de entorno load_dotenv() class Settings: """Configuración centralizada de la aplicación.""" # Nextcloud/WebDAV NEXTCLOUD_URL: str = os.getenv("NEXTCLOUD_URL", "") NEXTCLOUD_USER: str = os.getenv("NEXTCLOUD_USER", "") NEXTCLOUD_PASSWORD: str = os.getenv("NEXTCLOUD_PASSWORD", "") # Telegram (opcional) TELEGRAM_TOKEN: Optional[str] = os.getenv("TELEGRAM_TOKEN") TELEGRAM_CHAT_ID: Optional[str] = os.getenv("TELEGRAM_CHAT_ID") # AI Providers (opcional) GEMINI_API_KEY: Optional[str] = os.getenv("GEMINI_API_KEY") DEEPINFRA_API_KEY: Optional[str] = os.getenv("DEEPINFRA_API_KEY") ANTHROPIC_AUTH_TOKEN: Optional[str] = os.getenv("ANTHROPIC_AUTH_TOKEN") ANTHROPIC_BASE_URL: Optional[str] = os.getenv("ANTHROPIC_BASE_URL") ANTHROPIC_MODEL: str = os.getenv("ANTHROPIC_MODEL", "glm-4.7") # Notion (opcional) NOTION_API: Optional[str] = os.getenv("NOTION_API") NOTION_DATABASE_ID: Optional[str] = os.getenv("NOTION_DATABASE_ID") # Dashboard DASHBOARD_HOST: str = os.getenv("DASHBOARD_HOST", "0.0.0.0") DASHBOARD_PORT: int = int(os.getenv("DASHBOARD_PORT", "5000")) DASHBOARD_SECRET_KEY: Optional[str] = os.getenv("DASHBOARD_SECRET_KEY") # Rutas locales BASE_DIR: Path = Path(__file__).parent.parent DOWNLOADS_DIR: Path = BASE_DIR / "downloads" TRANSCRIPTIONS_DIR: Path = BASE_DIR / "transcriptions" # Whisper WHISPER_MODEL: str = os.getenv("WHISPER_MODEL", "medium") WHISPER_DEVICE: str = os.getenv("WHISPER_DEVICE", "auto") # auto, cuda, cpu WHISPER_LANGUAGE: str = os.getenv("WHISPER_LANGUAGE", "es") WHISPER_AUTO_UNLOAD_SECONDS: int = int(os.getenv("WHISPER_AUTO_UNLOAD_SECONDS", "300")) # 5 minutos # Configuración de polling POLL_INTERVAL: int = int(os.getenv("POLL_INTERVAL", "30")) # segundos WATCHED_REMOTE_PATH: str = os.getenv("WATCHED_REMOTE_PATH", "/Audios") # Logging LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO") LOG_FILE: Optional[str] = os.getenv("LOG_FILE") @property def has_webdav_config(self) -> bool: """Verifica si hay configuración de WebDAV.""" return bool(self.NEXTCLOUD_URL and self.NEXTCLOUD_USER and self.NEXTCLOUD_PASSWORD) @property def has_telegram_config(self) -> bool: """Verifica si hay configuración de Telegram.""" return bool(self.TELEGRAM_TOKEN and self.TELEGRAM_CHAT_ID) @property def is_production(self) -> bool: """Verifica si está en modo producción.""" return os.getenv("ENV", "development") == "production" # Instancia global de configuración settings = Settings()