Base para el flujo de ramas por cliente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
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()
|
|
# ============================================================================
|