Coverage for src / lexigram / admin / actions / __init__.py: 50%

14 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-13 22:14 +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 

41_EXPORTS = { 

42 # audited 

43 "AuditedAction": "lexigram.admin.actions.audited", 

44 # polymorphic 

45 "PolymorphicBulkAction": "lexigram.admin.actions.polymorphic", 

46 # bulk_manager 

47 "IBulkDataSource": "lexigram.admin.actions.bulk_manager", 

48 "BulkEditField": "lexigram.admin.actions.bulk_manager", 

49 "BulkAssignConfig": "lexigram.admin.actions.bulk_manager", 

50 "BulkActionResult": "lexigram.admin.actions.bulk_manager", 

51 "BulkActionSnapshot": "lexigram.admin.actions.bulk_manager", 

52 "BulkActionProgress": "lexigram.admin.actions.bulk_manager", 

53 "BulkActionManager": "lexigram.admin.actions.bulk_manager", 

54 # header_manager 

55 "HeaderActionStyle": "lexigram.admin.actions.header_manager", 

56 "TableDensity": "lexigram.admin.actions.header_manager", 

57 "HeaderAction": "lexigram.admin.actions.header_manager", 

58 "ColumnVisibilityConfig": "lexigram.admin.actions.header_manager", 

59 "DensityConfig": "lexigram.admin.actions.header_manager", 

60 "IHeaderDataSource": "lexigram.admin.actions.header_manager", 

61 "HeaderActionManager": "lexigram.admin.actions.header_manager", 

62 # row_manager 

63 "ActionStyle": "lexigram.admin.actions.row_manager", 

64 "ActionPosition": "lexigram.admin.actions.row_manager", 

65 "RowAction": "lexigram.admin.actions.row_manager", 

66 "ActionGroup": "lexigram.admin.actions.row_manager", 

67 "IRowDataSource": "lexigram.admin.actions.row_manager", 

68 "RowActionManager": "lexigram.admin.actions.row_manager", 

69} 

70 

71__all__ = list(_EXPORTS.keys()) 

72 

73 

74def __getattr__(name: str) -> Any: 

75 if name in _EXPORTS: 

76 module = importlib.import_module(_EXPORTS[name], __package__) 

77 value = getattr(module, name) 

78 globals()[name] = value 

79 return value 

80 raise AttributeError(f"module {__name__!r} has no attribute {name!r}") 

81 

82 

83def __dir__() -> Any: 

84 return __all__