Coverage for src/lexigram/admin/config/tenancy.py: 23%

13 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-24 23:31 +0800

1"""Multi-tenancy configuration.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6 

7from lexigram.domain import DomainModel 

8from lexigram.validation import Field 

9 

10 

11@dataclass(init=False) 

12class TenancyConfig(DomainModel): 

13 """Multi-tenancy configuration for admin. 

14 

15 Controls tenant resolution, data isolation, and route scoping. 

16 

17 Attributes: 

18 enabled: Enable multi-tenancy support. 

19 tenant_field: Field name used for tenant data filtering (default ``"tenant_id"``). 

20 header_name: HTTP header name for tenant ID resolution (default ``"x-tenant-id"``). 

21 cookie_name: Cookie name for tenant ID resolution (default ``"admin_tenant"``). 

22 default_tenant_id: Fallback tenant ID when none can be resolved. 

23 route_prefix_template: If set (e.g. ``"{tenant}"``), routes are prefixed 

24 with the resolved tenant ID. Empty means no route prefix. 

25 """ 

26 

27 enabled: bool = Field(default=False) 

28 tenant_field: str = Field(default="tenant_id") 

29 header_name: str = Field(default="x-tenant-id") 

30 cookie_name: str = Field(default="admin_tenant") 

31 default_tenant_id: str = Field(default="") 

32 route_prefix_template: str = Field(default="") 

33 

34 model_config = {"extra": "forbid"}