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

1"""Action managers for Lexigram Admin. 

2 

3PEP 562 lazy loading to avoid import-time dependency issues. 

4""" 

5 

6from __future__ import annotations 

7 

8import importlib 

9from typing import TYPE_CHECKING, Any 

10 

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 ) 

58 

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} 

110 

111__all__ = list(_EXPORTS.keys()) 

112 

113 

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}") 

121 

122 

123def __dir__() -> Any: 

124 return __all__