Coverage for src / lexigram / admin / types.py: 100%

46 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-13 22:14 +0800

1"""Type definitions for lexigram admin.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass, field 

6from enum import Enum 

7from typing import Any, TypedDict 

8 

9 

10@dataclass 

11class ExtensionConfig: 

12 """Configuration for an admin extension.""" 

13 

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) 

21 

22 

23class AdminStatus(str, Enum): 

24 """Status of admin operations.""" 

25 

26 PENDING = "pending" 

27 ACTIVE = "active" 

28 INACTIVE = "inactive" 

29 

30 

31@dataclass 

32class AdminUser: 

33 """Admin user representation.""" 

34 

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) 

40 

41 

42class NavigationItem(TypedDict, total=False): 

43 """A single navigation item in the admin sidebar.""" 

44 

45 label: str 

46 url: str 

47 icon: str 

48 group: str 

49 permission: str 

50 children: list[NavigationItem] 

51 active: bool 

52 

53 

54class MiddlewareOptions(TypedDict, total=False): 

55 """Options passed to admin middleware registration.""" 

56 

57 debug: bool 

58 timeout: float 

59 exclude_paths: list[str] 

60 

61 

62class TemplateContext(TypedDict, total=False): 

63 """Template rendering context for admin pages.""" 

64 

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 

73 

74 

75__all__ = [ 

76 "AdminStatus", 

77 "AdminUser", 

78 "ExtensionConfig", 

79 "MiddlewareOptions", 

80 "NavigationItem", 

81 "TemplateContext", 

82]