.. _doot.control.tracker._base: ========================== doot.control.tracker._base ========================== .. py:module:: doot.control.tracker._base .. autoapi-nested-parse:: Abstract Specs: A[n] Concrete Specs: C[n] Task: T[n] Expansion: ∀x ∈ C[n].depends_on => A[x] -> C[x] Head: C[1].depends_on[A[n].$head$] => A[n] -> C[n], A[n].head -> C[n].head, connect Type Aliases ------------ .. autoapisummary:: doot.control.tracker._base.Abstract Classes ------- .. autoapisummary:: doot.control.tracker._base.Tracker_abs Module Contents =============== .. py:data:: Abstract :type: TypeAlias :value: T .. _doot.control.tracker._base.Tracker_abs: .. py:class:: Tracker_abs(**kwargs: Any) A public base implementation of most of a tracker Has three components: _registry : db for specs and tasks _network : the links between specs in the registry _queue : the logic for determining what task to run next .. py:attribute:: _factory :type: doot.workflow._interface.TaskFactory_p .. py:attribute:: _subfactory :type: doot.workflow._interface.SubTaskFactory_p .. py:attribute:: _registry :type: doot.control.tracker._interface.Registry_p .. py:attribute:: _network :type: doot.control.tracker._interface.Network_p .. py:attribute:: _queue :type: doot.control.tracker._interface.Queue_p .. py:attribute:: _declare_priority :type: int .. py:attribute:: _min_priority :type: int .. py:attribute:: _root_node .. py:property:: specs :type: dict[doot.workflow._interface.TaskName_p, doot.control.tracker._interface.SpecMeta_d] .. py:property:: artifacts :type: dict[doot.workflow._interface.Artifact_i, doot.control.tracker._interface.ArtifactMeta_d] .. py:property:: concrete :type: set .. py:property:: abstract :type: set .. py:property:: network :type: collections.abc.Mapping .. py:property:: active :type: set .. py:property:: is_valid :type: bool .. py:method:: register(*specs: doot.workflow._interface.TaskSpec_i | doot.workflow._interface.Artifact_i | doot.workflow._interface.DelayedSpec) -> None .. py:method:: queue(name: str | doot.workflow._interface.TaskName_p | doot.workflow._interface.TaskSpec_i | doot.workflow._interface.Artifact_i | doot.workflow._interface.DelayedSpec, *, from_user: int | bool = False, status: jgdv.Maybe[doot.workflow._interface.TaskStatus_e] = None, **kwargs: Any) -> jgdv.Maybe[Concrete[doot.workflow._interface.TaskName_p | doot.workflow._interface.Artifact_i]] .. py:method:: build(*, sources: jgdv.Maybe[Literal[True] | list[Concrete[doot.workflow._interface.TaskName_p] | doot.workflow._interface.Artifact_i]] = None) -> None .. py:method:: validate() -> None .. py:method:: plan(*args: Any) -> list :abstractmethod: .. py:method:: clear() -> None .. py:method:: report(target: doot.workflow._interface.TaskName_p) -> dict .. py:method:: _instantiate(target: doot.workflow._interface.TaskName_p | doot.workflow._interface.RelationSpec_i, *args: Any, task: bool = False, **kwargs: Any) -> jgdv.Maybe[doot.workflow._interface.TaskName_p] .. py:method:: _connect(left: Concrete[doot.workflow._interface.TaskName_p] | doot.workflow._interface.Artifact_i, right: jgdv.Maybe[Literal[False] | Concrete[doot.workflow._interface.TaskName_p] | doot.workflow._interface.Artifact_i] = None, **kwargs: Any) -> None .. py:method:: _upgrade_delayed_to_actual(spec: doot.workflow._interface.DelayedSpec) -> doot.workflow._interface.TaskSpec_i can't be in taskfactory, as it requires the registered specs .. py:method:: _reify_partial_spec(spec: doot.workflow._interface.TaskSpec_i) -> doot.workflow._interface.TaskSpec_i converts spec(name=group::task.a.b..$partial$, sources[*_, base], data) into spec(name=group::a.b, data) using base can't be in the taskfactory, as it requires registered specs .. py:method:: _generate_implicit_tasks(spec: doot.workflow._interface.TaskSpec_i) -> list[doot.workflow._interface.TaskSpec_i] Generate implicit subtasks for a concrete spec