Coverage for src/lexigram/admin/settings/store.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-21 14:56 +0800

1"""DB-backed store adapter bridging ConfigRegistry to tenant_configs.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING, Any 

6 

7from lexigram.admin.settings.panel.registry import StoreBase 

8 

9if TYPE_CHECKING: 

10 from lexigram.admin.services.settings_service import AdminSettingsService 

11 

12__all__ = ["TenantConfigStore"] 

13 

14DEFAULT_TENANT = "default" 

15 

16 

17class TenantConfigStore(StoreBase): 

18 """StoreBase implementation persisting to tenant_configs. 

19 

20 Keys are stored verbatim (e.g. ``admin.cache.enabled``) via 

21 ``AdminSettingsService``, which prefixes them with ``admin_ui.`` in the 

22 ``tenant_configs`` table. 

23 """ 

24 

25 def __init__( 

26 self, 

27 service: AdminSettingsService, 

28 tenant_id: str = DEFAULT_TENANT, 

29 ) -> None: 

30 self._service = service 

31 self._tenant = tenant_id 

32 

33 async def get( 

34 self, key: str, default: Any = None, tenant_id: str | None = None 

35 ) -> Any: 

36 """Retrieve a value by key, falling back to *default* when unset.""" 

37 value = await self._service.get(tenant_id or self._tenant, key) 

38 return value if value is not None else default 

39 

40 async def set(self, key: str, value: Any, tenant_id: str | None = None) -> None: 

41 """Persist a value by key.""" 

42 await self._service.set(tenant_id or self._tenant, key, value)