Server : Apache System : Linux dedi-14684855.grupobig.com 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64 User : grupo692 ( 1004) PHP Version : 8.2.31 Disable Function : NONE Directory : /opt/dash_backend_new/app/ |
# app/db.py
from typing import Generator
import cx_Oracle
from fastapi import Depends, HTTPException
from .tenant_oracle_db import TenantContext, get_tenant_context, open_tenant_oracle_conn
def get_db_conn(ctx: TenantContext = Depends(get_tenant_context)) -> Generator[cx_Oracle.Connection, None, None]:
"""
Dependency tenant-aware:
- lê X-Empresa
- busca configuração no MySQL central
- conecta no Oracle correto
- fecha conexão no final
"""
# -------------------------------------------------------------------------
# SANDBOX: não abre Oracle. Dependências ainda são resolvidas, então
# devolvemos None e os endpoints devem retornar antes de usar `conn`.
# -------------------------------------------------------------------------
if getattr(ctx, "sandbox", False):
yield None # type: ignore
return
try:
conn = open_tenant_oracle_conn(ctx)
except cx_Oracle.DatabaseError as exc:
raise HTTPException(
status_code=500,
detail=f"Falha ao conectar no Oracle da empresa '{ctx.empresa}' (DSN={ctx.oracle_dsn}): {exc}",
)
except Exception as exc:
raise HTTPException(
status_code=500,
detail=f"Erro inesperado ao abrir conexão Oracle (empresa={ctx.empresa}): {type(exc).__name__}: {exc}",
)
try:
yield conn
finally:
try:
conn.close()
except Exception:
pass