.. _doot.workflow.factory: ===================== doot.workflow.factory ===================== .. py:module:: doot.workflow.factory Type Aliases ------------ .. autoapisummary:: doot.workflow.factory.SpecialType Classes ------- .. autoapisummary:: doot.workflow.factory.TaskFactory doot.workflow.factory.SubTaskFactory Module Contents =============== .. py:data:: SpecialType :type: TypeAlias :value: _SpecialType .. _doot.workflow.factory.TaskFactory: .. py:class:: TaskFactory(*, spec_ctor: jgdv.Maybe[type] = None, task_ctor: jgdv.Maybe[type] = None, job_ctor: jgdv.Maybe[type] = None) Factory to create task specs, instantiate them, and make tasks build : data -> spec delay : data -> delayed -> spec instantiate : spec -> spec(name=name[uuid]) reify : spec,partial -> spec over : orig,plus -> spec(plus[uuid]) under : orig,plus -> spec(orig[uuid]) make : spec -> task .. py:attribute:: spec_ctor :type: type[doot.workflow._interface.TaskSpec_i] .. py:attribute:: task_ctor :type: type[doot.workflow._interface.Task_p] .. py:attribute:: job_ctor :type: type[doot.workflow._interface.Job_p] .. py:method:: build(data: jgdv.structs.chainguard.ChainGuard | dict | doot.workflow._interface.TaskName_p | str) -> doot.workflow._interface.TaskSpec_i .. py:method:: delay(*, base: doot.workflow._interface.TaskName_p, target: doot.workflow._interface.TaskName_p, inject: jgdv.Maybe[doot.workflow._interface.InjectSpec_i] = None, applied: jgdv.Maybe[dict] = None, overrides: dict) -> doot.workflow._interface.DelayedSpec Build data structure that the registry will process into a full spec .. py:method:: instantiate(obj: doot.workflow._interface.TaskSpec_i, *, suffix: jgdv.Maybe[bool | str] = None, extra: jgdv.Maybe[collections.abc.Mapping] = None) -> doot.workflow._interface.TaskSpec_i Return this spec, copied with a uniq name .. py:method:: merge(top: dict | doot.workflow._interface.TaskSpec_i, bot: dict | doot.workflow._interface.TaskSpec_i, *, suffix: jgdv.Maybe[str | Literal[False]] = None, name: jgdv.Maybe[doot.workflow._interface.TaskName_p] = None) -> doot.workflow._interface.TaskSpec_i bot + top -> TaskSpec .. py:method:: make(obj: doot.workflow._interface.TaskSpec_i, ensure: Any = None) -> doot.workflow._interface.Task_p Create actual task instance if no spec_ctor has been specified, uses the default spec_ctor for job/task .. py:method:: get_source_names(obj: doot.workflow._interface.TaskSpec_i) -> list[doot.workflow._interface.TaskName_p] Get from the spec's sources just its source tasks .. py:method:: action_groups(obj: doot.workflow._interface.TaskSpec_i) -> collections.abc.Iterable[collections.abc.Iterable] .. py:method:: action_group_elements(obj: doot.workflow._interface.TaskSpec_i) -> collections.abc.Iterable[doot.workflow._interface.ActionSpec_i | doot.workflow._interface.RelationSpec_i] Get the elements of: depends_on, setup, actions, and require_for. .. py:method:: _specialize_merge(*, bot: dict, top: dict) -> dict Apply top over the top of bot Combines, rather than overrides, particular values. .. py:method:: _prep_name(base: doot.workflow._interface.TaskName_p, *, suffix: jgdv.Maybe[int | str | Literal[False]] = None) -> doot.workflow._interface.TaskName_p .. _doot.workflow.factory.SubTaskFactory: .. py:class:: SubTaskFactory Additional factory for generating related tasks of an instantiated spec .. py:method:: generate_names(obj: doot.workflow._interface.TaskSpec_i) -> list[doot.workflow._interface.TaskName_p] .. py:method:: generate_specs(obj: doot.workflow._interface.TaskSpec_i | doot.workflow._interface.Artifact_i | doot.workflow._interface.DelayedSpec) -> list[dict] .. py:method:: _gen_job_head(obj: doot.workflow._interface.TaskSpec_i) -> list[dict] Generate a top spec for a job, taking the jobs cleanup actions and using them as the head's main action. Cleanup relations are turning into the head's dependencies Depends on the job, and its reactively queued. Equivalent to: await job.depends_on() await job.setup() subtasks = job.actions() await subtasks job.head() await job.cleanup() .. py:method:: _gen_cleanup_task(obj: doot.workflow._interface.TaskSpec_i) -> list[dict] Generate a cleanup task, shifting the 'cleanup' actions and dependencies to 'depends_on' and 'actions' .. py:method:: _raw_data_to_specs(deps: list[str | dict], *, relation: doot.workflow._interface.RelationMeta_e = DEFAULT_RELATION) -> list[doot.workflow._interface.ActionSpec_i | doot.workflow._interface.RelationSpec_i] Convert toml provided raw data (str's, dicts) of specs into ActionSpec and RelationSpec object .. py:method:: _job_head_p(obj: doot.workflow._interface.TaskSpec_i) -> jgdv.Maybe[doot.workflow._interface.TaskName_p] .. py:method:: _cleanup_p(obj: doot.workflow._interface.TaskSpec_i) -> jgdv.Maybe[doot.workflow._interface.TaskName_p]