Coverage for src / lexigram / admin / clusters / base.py: 0%

14 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-11 02:25 +0800

1"""Cluster dataclass for grouping resources and pages. 

2 

3.. experimental:: 

4""" 

5 

6from __future__ import annotations 

7 

8from dataclasses import dataclass, field 

9from typing import Any 

10 

11 

12@dataclass(frozen=True, kw_only=True) 

13class Cluster: 

14 """A grouping of resources and pages with shared label, icon, and permissions. 

15 

16 Example: 

17 >>> content = Cluster( 

18 ... name="content", 

19 ... label="Content", 

20 ... icon="document", 

21 ... ) 

22 >>> users = Cluster( 

23 ... name="users", 

24 ... label="Users & Access", 

25 ... icon="users", 

26 ... ) 

27 """ 

28 

29 name: str 

30 label: str 

31 icon: str | None = None 

32 order: int = 0 

33 collapsible: bool = True 

34 collapsed_by_default: bool = False 

35 

36 # Populated at registration time 

37 resources: list[type[Any]] = field(default_factory=list) 

38 pages: list[type[Any]] = field(default_factory=list) 

39 

40 

41__all__ = ["Cluster"]