import os import logging from contextlib import contextmanager from typing import Iterator from dotenv import load_dotenv from fastapi import HTTPException from hdbcli import dbapi # ============================================================================ load_dotenv(dotenv_path=".env") HANA_HOST = os.getenv("HANA_HOST", "") HANA_PORT = int(os.getenv("HANA_PORT", 30015)) HANA_USER = os.getenv("HANA_USER", "") HANA_PASSWORD = os.getenv("HANA_PASSWORD", "") HANA_SCHEMA = os.getenv("HANA_SCHEMA", "") logger = logging.getLogger(__name__) # ============================================================================ @contextmanager def hana_connection() -> Iterator[dbapi.Connection]: """ Abre una conexión a SAP HANA para un query puntual (reportes Jinja/HTML) y la cierra al salir del bloque `with`. """ try: conn = dbapi.connect( address=HANA_HOST, port=HANA_PORT, user=HANA_USER, password=HANA_PASSWORD, currentSchema=HANA_SCHEMA, ) except Exception as exc: logger.error(f"Error al conectar con HANA: {exc}") raise HTTPException(status_code=500, detail=f"No se pudo conectar con la base de datos: {exc}") try: yield conn finally: conn.close() # ============================================================================