109 lines
3.5 KiB
Python
109 lines
3.5 KiB
Python
#!/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)
|