Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-workers/src/lexigram/ai/workers/module.py: 87%

15 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""Workers module for Lexigram.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7from lexigram.contracts.infra.tasks.protocols import TaskWorkerProtocol 

8from lexigram.di.module import DynamicModule, Module, module 

9 

10if TYPE_CHECKING: 

11 from lexigram.ai.workers.config import WorkersConfig 

12 

13 

14@module() 

15class WorkersModule(Module): 

16 """Module for AI background workers. 

17 

18 Registers the :class:`~lexigram.ai.workers.di.provider.WorkersProvider` 

19 which wires the ingestion, embedding, DLQ, and maintenance workers. 

20 

21 Usage:: 

22 

23 from lexigram.ai.workers.config import WorkersConfig 

24 

25 @module( 

26 imports=[WorkersModule.configure(WorkersConfig(...))] 

27 ) 

28 class AppModule(Module): 

29 pass 

30 """ 

31 

32 @classmethod 

33 def configure( 

34 cls, 

35 config: WorkersConfig | None = None, 

36 enable_scheduler: bool = True, 

37 ) -> DynamicModule: 

38 """Create a WorkersModule with explicit configuration. 

39 

40 Args: 

41 config: Optional :class:`~lexigram.ai.workers.config.WorkersConfig`. 

42 enable_scheduler: Start the background maintenance scheduler that 

43 handles DLQ retries and worker health checks. Defaults to 

44 ``True``; set to ``False`` to disable all scheduled tasks (e.g. 

45 when running in a worker-only process). 

46 

47 Returns: 

48 A :class:`~lexigram.di.module.DynamicModule` descriptor. 

49 """ 

50 from lexigram.ai.workers.di.provider import WorkersProvider 

51 

52 return DynamicModule( 

53 module=cls, 

54 providers=[ 

55 WorkersProvider( 

56 config=config, 

57 enable_scheduler=enable_scheduler, 

58 ) 

59 ], 

60 exports=[TaskWorkerProtocol], 

61 ) 

62 

63 @classmethod 

64 def stub(cls, config: WorkersConfig | None = None) -> DynamicModule: 

65 """Create a WorkersModule suitable for unit and integration testing. 

66 

67 Uses in-memory or no-op worker implementations with minimal side 

68 effects. The background scheduler is disabled by default to prevent 

69 timer interference between tests. 

70 

71 Args: 

72 config: Optional :class:`~lexigram.ai.workers.config.WorkersConfig` 

73 override. Uses safe test defaults when ``None``. 

74 

75 Returns: 

76 A :class:`~lexigram.di.module.DynamicModule` descriptor. 

77 """ 

78 from lexigram.ai.workers.di.provider import WorkersProvider 

79 

80 return DynamicModule( 

81 module=cls, 

82 providers=[WorkersProvider(config=config, enable_scheduler=False)], 

83 exports=[TaskWorkerProtocol], 

84 ) 

85 

86 

87__all__ = ["WorkersModule"]