Coverage for src/lexigram/admin/types.py: 17%
46 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 23:31 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 23:31 +0800
1"""Type definitions for lexigram admin."""
3from __future__ import annotations
5from dataclasses import dataclass, field
6from enum import Enum
7from typing import Any, TypedDict
10@dataclass
11class ExtensionConfig:
12 """Configuration for an admin extension."""
14 enabled: bool = True
15 nav_label: str | None = None
16 nav_icon: str | None = None
17 nav_location: str = "sidebar" # sidebar | system-menu | user-menu | hidden
18 nav_order: int = 100
19 nav_permission: str | None = None
20 options: dict[str, Any] = field(default_factory=dict)
23class AdminStatus(str, Enum):
24 """Status of admin operations."""
26 PENDING = "pending"
27 ACTIVE = "active"
28 INACTIVE = "inactive"
31@dataclass
32class AdminUser:
33 """Admin user representation."""
35 id: str
36 username: str
37 email: str
38 roles: list[str] = field(default_factory=list)
39 permissions: list[str] = field(default_factory=list)
42class NavigationItem(TypedDict, total=False):
43 """A single navigation item in the admin sidebar."""
45 label: str
46 url: str
47 icon: str
48 group: str
49 permission: str
50 children: list[NavigationItem]
51 active: bool
54class MiddlewareOptions(TypedDict, total=False):
55 """Options passed to admin middleware registration."""
57 debug: bool
58 timeout: float
59 exclude_paths: list[str]
62class TemplateContext(TypedDict, total=False):
63 """Template rendering context for admin pages."""
65 title: str
66 user: object
67 nav_items: list[NavigationItem]
68 breadcrumbs: list[dict]
69 request: object
70 content: str
71 error: str | None
72 flash: str | None
75__all__ = [
76 "AdminStatus",
77 "AdminUser",
78 "ExtensionConfig",
79 "MiddlewareOptions",
80 "NavigationItem",
81 "TemplateContext",
82]