Coverage for src/lexigram/admin/actions/__init__.py: 86%
14 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
1"""Action managers for Lexigram Admin.
3PEP 562 lazy loading to avoid import-time dependency issues.
4"""
6from __future__ import annotations
8import importlib
9from typing import TYPE_CHECKING, Any
11if TYPE_CHECKING:
12 from lexigram.admin.actions.audited import AuditedAction
13 from lexigram.admin.actions.bulk_manager import (
14 BulkActionManager,
15 BulkActionProgress,
16 BulkActionResult,
17 BulkActionSnapshot,
18 BulkAssignConfig,
19 BulkEditField,
20 IBulkDataSource,
21 )
22 from lexigram.admin.actions.header_manager import (
23 ColumnVisibilityConfig,
24 DensityConfig,
25 HeaderAction,
26 HeaderActionManager,
27 HeaderActionStyle,
28 IHeaderDataSource,
29 TableDensity,
30 )
31 from lexigram.admin.actions.polymorphic import PolymorphicBulkAction
32 from lexigram.admin.actions.row_manager import (
33 ActionGroup,
34 ActionPosition,
35 ActionStyle,
36 IRowDataSource,
37 RowAction,
38 RowActionManager,
39 )
40 from lexigram.admin.actions.standard import (
41 CloneAction,
42 CreateAction,
43 DeleteAction,
44 DeleteBulkAction,
45 EditAction,
46 ExportAction,
47 ExportBulkAction,
48 ImportAction,
49 ImportBulkAction,
50 ImpersonateAction,
51 PermissionsAction,
52 PurgeAction,
53 PurgeBulkAction,
54 RestoreAction,
55 RestoreBulkAction,
56 ViewAction,
57 )
59_EXPORTS = {
60 # standard
61 "EditAction": "lexigram.admin.actions.standard",
62 "ViewAction": "lexigram.admin.actions.standard",
63 "DeleteAction": "lexigram.admin.actions.standard",
64 "CreateAction": "lexigram.admin.actions.standard",
65 "DeleteBulkAction": "lexigram.admin.actions.standard",
66 "PurgeBulkAction": "lexigram.admin.actions.standard",
67 "RestoreBulkAction": "lexigram.admin.actions.standard",
68 "CloneAction": "lexigram.admin.actions.standard",
69 "RestoreAction": "lexigram.admin.actions.standard",
70 "PurgeAction": "lexigram.admin.actions.standard",
71 "ExportAction": "lexigram.admin.actions.standard",
72 "ExportBulkAction": "lexigram.admin.actions.standard",
73 "ImportAction": "lexigram.admin.actions.standard",
74 "ImportBulkAction": "lexigram.admin.actions.standard",
75 "PermissionsAction": "lexigram.admin.actions.standard",
76 "ImpersonateAction": "lexigram.admin.actions.standard",
77 # audited
78 "AuditedAction": "lexigram.admin.actions.audited",
79 # polymorphic
80 "PolymorphicBulkAction": "lexigram.admin.actions.polymorphic",
81 # bulk_manager
82 "IBulkDataSource": "lexigram.admin.actions.bulk_manager",
83 "BulkEditField": "lexigram.admin.actions.bulk_manager",
84 "BulkAssignConfig": "lexigram.admin.actions.bulk_manager",
85 "BulkActionResult": "lexigram.admin.actions.bulk_manager",
86 "BulkActionSnapshot": "lexigram.admin.actions.bulk_manager",
87 "BulkActionProgress": "lexigram.admin.actions.bulk_manager",
88 "BulkActionManager": "lexigram.admin.actions.bulk_manager",
89 # header_manager
90 "HeaderActionStyle": "lexigram.admin.actions.header_manager",
91 "TableDensity": "lexigram.admin.actions.header_manager",
92 "HeaderAction": "lexigram.admin.actions.header_manager",
93 "ColumnVisibilityConfig": "lexigram.admin.actions.header_manager",
94 "DensityConfig": "lexigram.admin.actions.header_manager",
95 "IHeaderDataSource": "lexigram.admin.actions.header_manager",
96 "HeaderActionManager": "lexigram.admin.actions.header_manager",
97 # row_manager
98 "ActionStyle": "lexigram.admin.actions.row_manager",
99 "ActionPosition": "lexigram.admin.actions.row_manager",
100 "RowAction": "lexigram.admin.actions.row_manager",
101 "ActionGroup": "lexigram.admin.actions.row_manager",
102 "IRowDataSource": "lexigram.admin.actions.row_manager",
103 "RowActionManager": "lexigram.admin.actions.row_manager",
104 # relation
105 "AssociateAction": "lexigram.admin.actions.relation",
106 "AttachAction": "lexigram.admin.actions.relation",
107 "DetachAction": "lexigram.admin.actions.relation",
108 "DissociateAction": "lexigram.admin.actions.relation",
109}
111__all__ = list(_EXPORTS.keys())
114def __getattr__(name: str) -> Any:
115 if name in _EXPORTS:
116 module = importlib.import_module(_EXPORTS[name], __package__)
117 value = getattr(module, name)
118 globals()[name] = value
119 return value
120 raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
123def __dir__() -> Any:
124 return __all__