Files
cbc2027/config/settings.py
renato97 ee8fc183be feat: Sistema CBCFacil completo con cola secuencial
- Implementa ProcessingMonitor singleton para procesamiento secuencial de archivos
- Agrega AI summary service con soporte para MiniMax API
- Agrega PDF generator para resúmenes
- Agrega watchers para monitoreo de carpeta remota
- Mejora sistema de notificaciones Telegram
- Implementa gestión de VRAM para GPU
- Configuración mediante variables de entorno (sin hardcoded secrets)
- .env y transcriptions/ agregados a .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:35:39 +00:00

79 lines
2.8 KiB
Python

"""
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()