Source code for gcip2.tasks_core.task_generator

 1import dataclasses
 2from collections.abc import Iterator
 3
 4import injector
 5
 6from gcip2 import ProjectConfig
 7from gcip2.tasks_core.models.params import Params
 8from gcip2.tasks_core.task_builder import Task, TaskBuilderImpl
 9
10
[docs] 11class TaskGenerator:
[docs] 12 def load_tasks(self) -> Iterator[Task]: 13 raise NotImplementedError
14 15
[docs] 16@injector.inject 17@dataclasses.dataclass 18class TaskGeneratorImpl(TaskGenerator): 19 _config: ProjectConfig 20 _di: injector.Injector 21 _params: Params 22
[docs] 23 def _auto_load_tasks(self) -> Iterator[Task]: 24 for name, cls in vars(type(self)).items(): 25 if name.startswith("task_") and isinstance(cls, type) and issubclass(cls, TaskBuilderImpl): 26 yield self._di.create_object(cls).apply().build()
27
[docs] 28 def builder(self, task_class: type[TaskBuilderImpl]) -> TaskBuilderImpl: 29 return self._di.create_object(task_class)
30
[docs] 31 def load_tasks(self) -> Iterator[Task]: 32 yield from self._auto_load_tasks()