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
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-11 02:25 +0800
1"""Cluster dataclass for grouping resources and pages.
3.. experimental::
4"""
6from __future__ import annotations
8from dataclasses import dataclass, field
9from typing import Any
12@dataclass(frozen=True, kw_only=True)
13class Cluster:
14 """A grouping of resources and pages with shared label, icon, and permissions.
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 """
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
36 # Populated at registration time
37 resources: list[type[Any]] = field(default_factory=list)
38 pages: list[type[Any]] = field(default_factory=list)
41__all__ = ["Cluster"]