Files
mini-erp/mini-backend/core/hana.py
T

44 lines
1.3 KiB
Python
Raw Normal View History

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()
# ============================================================================