Coverage for src/lexigram/admin/config/features.py: 39%

28 statements  

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

1"""Feature flags and contributor configuration.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from typing import Any 

7 

8from lexigram.domain import DomainModel 

9from lexigram.validation import Field 

10 

11 

12@dataclass(init=False) 

13class AdminFeaturesConfig(DomainModel): 

14 """Feature flags for admin functionality.""" 

15 

16 # UI Features 

17 command_palette: bool = Field(default=True) 

18 keyboard_shortcuts: bool = Field(default=True) 

19 theme_toggle: bool = Field(default=True) 

20 search: bool = Field(default=True) 

21 

22 # UX Features 

23 optimistic_updates: bool = Field(default=True) 

24 undo_redo: bool = Field(default=True) 

25 autosave: bool = Field(default=False) 

26 

27 # Advanced Features 

28 audit_logging: bool = Field(default=True) 

29 activity_feed: bool = Field(default=False) 

30 notifications: bool = Field(default=True) 

31 webhooks: bool = Field(default=False) 

32 api_docs: bool = Field(default=True) 

33 

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

35 

36 

37@dataclass(init=False) 

38class ContributorConfig(DomainModel): 

39 """Per-contributor enable/disable and options.""" 

40 

41 enabled: bool = Field(default=True) 

42 options: dict[str, Any] = Field(default_factory=dict) 

43 

44 

45@dataclass(init=False) 

46class FrameworkPagesConfig(DomainModel): 

47 """Framework management pages configuration.""" 

48 

49 enabled: bool = Field(default=True) 

50 require_permission: str = Field(default="admin:framework:access")