32 lines
699 B
Python
32 lines
699 B
Python
"""
|
|
Tenant context management.
|
|
[AC-AISVC-10, AC-AISVC-12] Multi-tenant isolation via X-Tenant-Id header.
|
|
"""
|
|
|
|
from contextvars import ContextVar
|
|
from dataclasses import dataclass
|
|
|
|
tenant_context: ContextVar["TenantContext | None"] = ContextVar("tenant_context", default=None)
|
|
|
|
|
|
@dataclass
|
|
class TenantContext:
|
|
tenant_id: str
|
|
|
|
|
|
def set_tenant_context(tenant_id: str) -> None:
|
|
tenant_context.set(TenantContext(tenant_id=tenant_id))
|
|
|
|
|
|
def get_tenant_context() -> TenantContext | None:
|
|
return tenant_context.get()
|
|
|
|
|
|
def get_tenant_id() -> str | None:
|
|
ctx = get_tenant_context()
|
|
return ctx.tenant_id if ctx else None
|
|
|
|
|
|
def clear_tenant_context() -> None:
|
|
tenant_context.set(None)
|