32 lines
998 B
Python
32 lines
998 B
Python
# /home/Autopartes/pos/tenant_db.py
|
|
"""Tenant DB connection manager. Gets a psycopg2 connection for a specific tenant."""
|
|
|
|
import psycopg2
|
|
from config import MASTER_DB_URL, TENANT_DB_URL_TEMPLATE
|
|
|
|
|
|
def get_master_conn():
|
|
"""Get connection to nexus_master DB."""
|
|
return psycopg2.connect(MASTER_DB_URL)
|
|
|
|
|
|
def get_tenant_conn(tenant_id):
|
|
"""Get connection to a tenant's DB by looking up db_name in nexus_master."""
|
|
master = get_master_conn()
|
|
cur = master.cursor()
|
|
cur.execute("SELECT db_name FROM tenants WHERE id = %s AND is_active = true", (tenant_id,))
|
|
row = cur.fetchone()
|
|
cur.close()
|
|
master.close()
|
|
|
|
if not row:
|
|
raise ValueError(f"Tenant {tenant_id} not found or inactive")
|
|
|
|
db_name = row[0]
|
|
return psycopg2.connect(TENANT_DB_URL_TEMPLATE.format(db_name=db_name))
|
|
|
|
|
|
def get_tenant_conn_by_dbname(db_name):
|
|
"""Get connection to a tenant DB directly by name."""
|
|
return psycopg2.connect(TENANT_DB_URL_TEMPLATE.format(db_name=db_name))
|