#!/usr/bin/env python3 """ Script de verificación e instalación para la API de Monitoreo """ import sys import subprocess import importlib import os def check_python_version(): """Verificar versión de Python""" version = sys.version_info if version.major < 3 or (version.major == 3 and version.minor < 8): print("❌ Error: Se requiere Python 3.8 o superior") return False print(f"✅ Python {version.major}.{version.minor}.{version.micro} detectado") return True def check_package(package_name): """Verificar si un paquete está instalado""" try: importlib.import_module(package_name) print(f"✅ {package_name} instalado correctamente") return True except ImportError: print(f"❌ {package_name} no encontrado") return False def install_requirements(): """Instalar dependencias desde requirements.txt""" try: subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"]) print("✅ Dependencias instaladas correctamente") return True except subprocess.CalledProcessError: print("❌ Error instalando dependencias") return False def check_env_file(): """Verificar archivo .env""" if os.path.exists('.env'): print("✅ Archivo .env encontrado") with open('.env', 'r') as f: content = f.read() if 'DATABASE_SERVER=' in content and 'DATABASE_NAME=' in content: print("✅ Variables de entorno básicas configuradas") return True else: print("⚠️ Archivo .env existe pero faltan variables importantes") return False else: print("❌ Archivo .env no encontrado") return False def main(): """Función principal de verificación""" print("🔍 Verificando instalación de API de Monitoreo de Sincronización...") print("=" * 60) all_ok = True # Verificar Python if not check_python_version(): all_ok = False # Verificar paquetes principales packages = ['fastapi', 'uvicorn', 'pydantic', 'pyodbc'] for package in packages: if not check_package(package): print(f"Intentando instalar {package}...") try: subprocess.check_call([sys.executable, "-m", "pip", "install", package]) if check_package(package): print(f"✅ {package} instalado exitosamente") else: all_ok = False except: all_ok = False # Verificar archivo .env if not check_env_file(): print("ℹ️ Asegúrate de configurar las variables de base de datos en .env") print("=" * 60) if all_ok: print("🎉 ¡Verificación completada exitosamente!") print("\n🚀 Para iniciar la API ejecuta:") print(" python -m uvicorn main:app --host 127.0.0.1 --port 8000 --reload") print("\n📖 Documentación disponible en:") print(" http://127.0.0.1:8000/docs") # Intentar importar la configuración try: from config.settings import settings print(f"\n⚙️ Configuración cargada para BD: {settings.database_name}") except Exception as e: print(f"\n⚠️ Error cargando configuración: {e}") else: print("❌ Se encontraron problemas. Revisa los errores anteriores.") return all_ok if __name__ == "__main__": success = main() if not success: sys.exit(1)