import socket import time import subprocess import sys import os # --- Configuración --- DB_HOST = os.environ.get("HOST", "db") DB_PORT = int(os.environ.get("PORT", 5432)) ODOO_CONF = "/etc/odoo/odoo.conf" DB_NAME = "lims_demo" MODULES_TO_INSTALL = "base,sale_management,stock,account,lims_management" # --- Lógica de espera de PostgreSQL --- print(f"Esperando a PostgreSQL en {DB_HOST}:{DB_PORT}...") sys.stdout.flush() while True: try: with socket.create_connection((DB_HOST, DB_PORT), timeout=2): print("PostgreSQL está listo.") sys.stdout.flush() break except (socket.timeout, ConnectionRefusedError, OSError) as e: print(f"PostgreSQL no está listo todavía ({e}), esperando...") sys.stdout.flush() time.sleep(2) # --- Lógica de inicialización de Odoo --- print(f"Creando base de datos '{DB_NAME}' e instalando módulos...") sys.stdout.flush() odoo_command = [ "odoo", "-c", ODOO_CONF, "-d", DB_NAME, "-i", MODULES_TO_INSTALL, "--stop-after-init" ] # Usamos subprocess.run para tener mejor control sobre la salida try: result = subprocess.run( odoo_command, capture_output=True, text=True, check=False ) print("--- Odoo stdout ---") print(result.stdout) print("--- Odoo stderr ---") print(result.stderr) sys.stdout.flush() if result.returncode != 0: print(f"Odoo falló con código de salida {result.returncode}") sys.exit(result.returncode) print("Inicialización de Odoo completada exitosamente.") sys.exit(0) except FileNotFoundError: print("Error: El comando 'odoo' no se encontró. Asegúrate de que la imagen del contenedor es correcta y odoo está en el PATH.") sys.exit(1) except Exception as e: print(f"Ocurrió un error inesperado al ejecutar Odoo: {e}") sys.exit(1)