doot.workflow.structs.task_spec

Type Aliases

SpecialType

Functions

_action_group_sort_key(→ Any)

_raw_data_to_specs(...)

Convert toml provided raw data (str's, dicts) of specs into ActionSpec and RelationSpec object

_prepare_action_group(...)

Builds, Expands, Sorts, and Validates action/relation groups,

Classes

_TransformerUtils_m

Utilities for artifact transformers

TaskSpec

The information needed to describe a generic task.

Module Contents

doot.workflow.structs.task_spec.SpecialType: TypeAlias = _SpecialType
doot.workflow.structs.task_spec._action_group_sort_key(
val: doot.workflow._interface.ActionSpec_i | doot.workflow._interface.RelationSpec_i,
) Any[source]
Parameters:

val (doot.workflow._interface.ActionSpec_i | doot.workflow._interface.RelationSpec_i)

Return type:

Any

doot.workflow.structs.task_spec._raw_data_to_specs(
deps: list[str | dict],
*,
relation: doot.workflow.structs.relation_spec.RelationMeta_e = DEFAULT_RELATION,
) list[doot.workflow.structs.action_spec.ActionSpec | doot.workflow.structs.relation_spec.RelationSpec][source]

Convert toml provided raw data (str’s, dicts) of specs into ActionSpec and RelationSpec object

Parameters:
  • deps (list[str | dict])

  • relation (doot.workflow.structs.relation_spec.RelationMeta_e)

Return type:

list[doot.workflow.structs.action_spec.ActionSpec | doot.workflow.structs.relation_spec.RelationSpec]

doot.workflow.structs.task_spec._prepare_action_group(
group: jgdv.Maybe[list[str]],
handler: pydantic.ValidatorFunctionWrapHandler,
info: pydantic.ValidationInfo,
) list[doot.workflow.structs.relation_spec.RelationSpec | doot.workflow.structs.action_spec.ActionSpec][source]

Builds, Expands, Sorts, and Validates action/relation groups, converting toml specified strings, list, and dicts to Artifacts (ie:files), Task Names, ActionSpecs

As a wrap handler, it has the context of what field is being processed, this allows it to set the correct RelationMeta_e type

# TODO handle callables?

Parameters:
  • group (jgdv.Maybe[list[str]])

  • handler (pydantic.ValidatorFunctionWrapHandler)

  • info (pydantic.ValidationInfo)

Return type:

list[doot.workflow.structs.relation_spec.RelationSpec | doot.workflow.structs.action_spec.ActionSpec]

class doot.workflow.structs.task_spec._TransformerUtils_m[source]

Utilities for artifact transformers

instantiate_transformer(
target: doot.workflow._interface.Artifact_i | tuple[doot.workflow._interface.Artifact_i, doot.workflow._interface.Artifact_i],
) jgdv.Maybe[doot.workflow._interface.TaskSpec_i][source]

Create an instantiated transformer spec. ie : ?.txt -> spec -> ?.blah becomes: a.txt -> spec -> a.blah

can be given one artifact, which will be used for matching on pre and post, or a tuple, which specifies an exact transform

TODO: handle ?/?.txt, /?.txt, blah//?.txt, path/blah.?

Parameters:

target (doot.workflow._interface.Artifact_i | tuple[doot.workflow._interface.Artifact_i, doot.workflow._interface.Artifact_i])

Return type:

jgdv.Maybe[doot.workflow._interface.TaskSpec_i]

transformer_of() jgdv.Maybe[tuple[doot.workflow._interface.RelationSpec_i, doot.workflow._interface.RelationSpec_i]][source]

If this spec can transform an artifact, return those relations.

Transformers have file relations of a single solo abstract artifact so: ‘file:>a/path/?.txt’ -> ‘file:>b/path/?.bib’ (other relations can exist as well, but to be a transformer there needs to be only 1 in, 1 out solo file relation

Return type:

jgdv.Maybe[tuple[doot.workflow._interface.RelationSpec_i, doot.workflow._interface.RelationSpec_i]]

class doot.workflow.structs.task_spec.TaskSpec(/, **data: Any)[source]

Bases: pydantic.BaseModel

The information needed to describe a generic task. Optional things are shoved into ‘extra’, so things can use .on_fail on the chainguard

the cli parser can understand cli=[{}] specs actions : list[ [args] | {do=’’, args=[], **kwargs} ]

Notes

sources = [root, … grandparent, parent]. ‘None’ indicates halt on climbing source chain

Parameters:

data (Any)

_default_ctor: ClassVar[str]
_blocking_groups: ClassVar[tuple[str, Ellipsis]] = ('required_for', 'on_fail')
Marks: ClassVar[type[enum.Enum]]
name: doot.workflow._interface.TaskName_p = None
doc: jgdv.Maybe[list[str]] = None
sources: list[jgdv.Maybe[doot.workflow.structs.task_name.TaskName | pathlib.Path]] = None
actions: ActionGroup = None
required_for: ActionGroup = None
depends_on: ActionGroup = None
setup: ActionGroup = None
cleanup: ActionGroup = None
on_fail: ActionGroup = None
version: str = None
priority: int = None
ctor: jgdv.Maybe[jgdv.structs.strang.CodeReference] = None
queue_behaviour: doot.workflow._interface.QueueMeta_e = None
meta: set[doot.workflow._interface.TaskMeta_e] = None
generated_names: set[doot.workflow.structs.task_name.TaskName] = None
_transform: jgdv.Maybe[Literal[False] | tuple[doot.workflow.structs.relation_spec.RelationSpec, doot.workflow.structs.relation_spec.RelationSpec]] = None
_convert_toml_keys(data: dict) dict[source]

converts a-key into a_key, and joins group+name

Parameters:

data (dict)

Return type:

dict

_validate_name(
val: str | doot.workflow.structs.task_name.TaskName,
) doot.workflow.structs.task_name.TaskName[source]
Parameters:

val (str | doot.workflow.structs.task_name.TaskName)

Return type:

doot.workflow.structs.task_name.TaskName

_validate_meta(
val: str | list | set | doot.workflow._interface.TaskMeta_e,
) set[str][source]
Parameters:

val (str | list | set | doot.workflow._interface.TaskMeta_e)

Return type:

set[str]

_validate_ctor(
val: jgdv.Maybe[str | jgdv.structs.strang.CodeReference],
) jgdv.Maybe[jgdv.structs.strang.CodeReference][source]
Parameters:

val (jgdv.Maybe[str | jgdv.structs.strang.CodeReference])

Return type:

jgdv.Maybe[jgdv.structs.strang.CodeReference]

_validate_queue_behaviour(
val: str | doot.workflow._interface.QueueMeta_e,
) doot.workflow._interface.QueueMeta_e[source]
Parameters:

val (str | doot.workflow._interface.QueueMeta_e)

Return type:

doot.workflow._interface.QueueMeta_e

_validate_sources(
val: list[jgdv.Maybe[str | doot.workflow.structs.task_name.TaskName]],
) list[jgdv.Maybe[str | doot.workflow.structs.task_name.TaskName | pathlib.Path]][source]

builds the soures list, converting strings to task names,

Parameters:

val (list[jgdv.Maybe[str | doot.workflow.structs.task_name.TaskName]])

Return type:

list[jgdv.Maybe[str | doot.workflow.structs.task_name.TaskName | pathlib.Path]]

_validate_metadata() Self[source]

General object validator, mainly for metadata processing

Return type:

Self

property extra: jgdv.structs.chainguard.ChainGuard[source]
Return type:

jgdv.structs.chainguard.ChainGuard

property action_groups: list[list][source]
Return type:

list[list]

property params: dict[source]
Return type:

dict

property args: list[source]
Return type:

list

property kwargs: dict[source]
Return type:

dict

action_group_elements() collections.abc.Iterable[doot.workflow.structs.action_spec.ActionSpec | doot.workflow.structs.relation_spec.RelationSpec][source]

Get the elements of: depends_on, setup, actions, and require_for. never cleanup, which generates its own task

Return type:

collections.abc.Iterable[doot.workflow.structs.action_spec.ActionSpec | doot.workflow.structs.relation_spec.RelationSpec]

param_specs() list[source]
Return type:

list