"""Public surface of ``infrasynth.tenancy``. The exports are resolved lazily (PEP 562) so importing this package never triggers Django model imports before the app registry is ready. Import from here:: from infrasynth.tenancy import TenantService, TenantManager, current_tenant """ from __future__ import annotations from importlib import import_module from typing import Any __all__ = [ "AllObjectsManager", "GlobalOrTenantManager", "GlobalOrTenantModel", "PlatformStaff", "Tenant", "TenantInvitation", "TenantManager", "TenantMembership", "TenantMiddleware", "TenantOwnedModel", "TenantService", "current_tenant", "get_current_tenant", "reset_current_tenant", "set_current_tenant", "tenant_context", ] # public name -> module (relative to the ``infrasynth`` package) that defines it _EXPORTS: dict[str, str] = { "AllObjectsManager": "tenancy.managers", "GlobalOrTenantManager": "tenancy.managers", "GlobalOrTenantModel": "tenancy.mixins", "PlatformStaff": "tenancy.models", "Tenant": "tenancy.models", "TenantInvitation": "tenancy.models", "TenantManager": "tenancy.managers", "TenantMembership": "tenancy.models", "TenantMiddleware": "tenancy.middleware", "TenantOwnedModel": "tenancy.mixins", "TenantService": "tenancy.services", "current_tenant": "tenancy.context", "get_current_tenant": "tenancy.context", "reset_current_tenant": "tenancy.context", "set_current_tenant": "tenancy.context", "tenant_context": "tenancy.context", } def __getattr__(name: str) -> Any: module_path = _EXPORTS.get(name) if module_path is not None: return getattr(import_module(f"infrasynth.{module_path}"), name) # Let ``infrasynth..`` resolve as usual. try: return import_module(f"{__name__}.{name}") except ModuleNotFoundError as exc: raise AttributeError(f"module {__name__!r} has no attribute {name!r}") from exc def __dir__() -> list[str]: return sorted(set(__all__) | set(globals()))