All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
5.1.0rc2 - 2026-08-02
- Add new fields
workflow_input_schemaandworkflow_output_schemato the spec. RedisEwoksEventHandler: adddisconnect_on_errorandtimeoutargument.get_all_node_inputsandget_all_task_output_namesto respectively get all inputs from a node_id and all output names from a task type and identifier.Sqlite3EwoksEventHandler: addretry_periodargument (seeewoksutils.logging_utils.sqlite3.Sqlite3Handler).
Sqlite3EwoksEventHandler: implement abstract method_connected().- Handle
node_id=0inget_node_label. - Bug in removing default error handlers that have no predecessor in
connect_default_error_handlers. - A node that is already connected to a global error handler should not be reconnected
to the global error handler in
connect_default_error_handlers.
5.0.0 - 2026-07-01
- Added link attribute
cache_if_optional: cache inputs from optional links just like required links. - Support for Graph serialization and transparent handling of
Numpy arraysin both JSON and YAML via pickling. - Add workflow discovery from python modules in analogy to task discovery from python modules.
Full qualifier names or patterns can be added to the entry point group
"ewoks.workflows"of any python project. - Emit a
TaskInputWarningif aTaskclass instance received unknown named inputs. - Add "serializer" argument to
save_graph. - Serialization before final serialization (
json,yaml,h5py, ...):None(default forsave_graph): no additional serialization apart from the explicit mappingGraphSerializer.json: explicit serialization like python'sjsonmodule doesGraphSerializer.json_pickle(default forJsonProxy): preserve JSON type, pickle others typesGraphSerializer.hdf5_pickle(default forNexusProxy): preserve JSON+numpy type, pickle others types
- Error was logged at INFO level in app logs and ewoks events. Now error is logged at the error level.
required=Falsenow forces the link to be explicitly optional. This may change execution order of tasks in a workflow (see the updated spec for more info).- Upstream nodes with error handlers no longer make a link optional.
- Define in the Ewoks workflow specification that optional and non-cached inputs are never lost when all required inputs are provided at any point in time.
- Graphs which are python package-data files are ensured to have the python full qualifier name as graph id.
JsonProxy: useGraphSerializer.json_pickleserialization by default.NexusProxy: useGraphSerializer.hdf5_pickleserialization by default.- Updated task exceptions to utilize
ewoksutils.exceptions - Ewoks workflow specification version (
schema_version) was bumped to1.2
4.0.2 - 2026-03-03
- Project migrated to https://github.com/ewoks-kit/ewokscore.
4.0.1 - 2025-12-30
- Make functions in
ewokscore.tests.test_workflow_eventspublic again.
4.0.0 - 2025-12-30 [YANKED]
- Use
ewoksutils.uri_utilsand adapt to proper file URI's on Windows. For examplefile:///C:\Windows\Temp, note the leading/beforeC:\. - Ewoks event: reset event logger when an event requires different handlers than the current handlers.
- Module
ewokscore.persistence.uri.
3.1.0 - 2025-11-03
- Task outputs can now defined via a Pydantic model (
output_model) instead ofoutput_names. These two ways of defining outputs are incompatible: one must be used or the other but never simultaneously (including when subclassing tasks). - Task discovery results now include an
output_modelfield. This field is the full qualified name of the model if an output model was set for the task,Noneotherwise.
3.0.0 - 2025-10-31
- Support
test_coregraph representation.
- CLI utilities.
2.0.1 - 2025-10-23
ewokscore.graph.inputs.graph_inputs: deterministic order of task inputs.
2.0.0 - 2025-07-25
- Ewoks workflow entry interfaces
WorkflowEngineandWorkflowEngineWithSerialization. - Implement the
WorkflowEngineWithSerializationinterface. - Add an entry point to the group
ewoks.engines. - Add an entry point to the group
ewoks.engines.serialization.representations.
- Fields of task input models are no longer serialized when executing the task.
For example, a
dataclassstays adataclassinstead of becoming adict.
1.6.0 - 2025-06-10
ewoks.graph.inputs.graph_inputs: retrieve all "free" inputs parameters of a workflow (i.e. not connected to the output of a previous node).ewoks.graph.inputs.graph_inputs_as_table: same asgraph_inputsbut the result is provided in table form suitable for printing in a terminal.
1.5.0 - 2025-05-16
- Improve
TaskInputErrorto describe which task raises the error. - Improve
RuntimeErroron task failure to describe which task raises the error. BaseInputModelvalidation during task execution instead of task construction.
- Apply
BaseInputModelon the input values when passed with a wrapper (e.g.Variable).
1.4.0 - 2025-04-23
- The base Pydantic model
BaseInputModelnow supports fields to accept values of typeVariable,UniversalHash,HasUhash,DataProxy, orDataUri. When any of these special types are used as input, strict validation is bypassed to allow for deferred evaluation when needed.
1.3.0 - 2025-04-04
- Task inputs can now defined via a Pydantic model (
input_model) instead ofinput_names,optional_input_names. These two ways of defining inputs are incompatible: one must be used or the other but never simultaneously (including when subclassing tasks). - Task discovery results now include an
input_modelfield. This field is the full qualified name of the model if an input model was set for the task,Noneotherwise.
ewokscore.task.Task:npositional_inputsis deprecated in favor ofn_positional_inputs.
convert_graphno longer addsdirectedandmultigraphfields. These are not part of the Ewoks specification.- Hidden and unregistered
classtasks are no longer included when running task discovery. - Fix missing
n_required_positional_inputsfield in task discovery results.
1.2.0 - 2025-02-11
- Module patterns can be used as argument of
discover_tasks_from_modules.
- Fix random order in
required_input_names,optional_input_namesandoutput_namesfields of discovered tasks ofclasstype.
1.1.0 - 2025-01-25
- Support for Python 3.13.
- Drop support for Python 3.6 and 3.7.
1.0.0 - 2024-12-24
- Remove deprecated
bindingargument fromexecute_graph.
- Fix bug in notebook task instantiation.
0.15.0 - 2024-11-28
discover_all_tasksnow accepts atask_typeargument to only discover a specific task type. By default, it discovers tasks of typeclass,ppfmethodandmethod, as previously.
- By default,
discover_tasks_from_modulesnow discovers tasks of typeclass,ppfmethodandmethodinstead of onlyclass.
0.14.0 - 2024-11-06
- Add
task_optionstoexecute_graphandinstantiate_task. Currently includes onlyprofile_directoryto enable task time profiling.
0.13.1 - 2024-10-23
- Fix wrong task type when discovering
ppfmethodtasks.
0.13.0 - 2024-10-16
- Remove upper bound on
numpy.
0.12.0 - 2024-10-15
- Python 3.12.5+: accommodate for
urllibchange of relative paths.
0.11.0 - 2024-10-07
- Add support for latest
networkxversion (>="3.4rc0").
0.10.0 - 2024-10-04
- New optional field
requirementsin thegraphfield of the graph schema. This field contain a list of projects that should be present in the Python environment for the graph to be executed.
0.9.0 - 2024-09-16
- Script tasks: support positional arguments.
- Script tasks: use "-" for single-character and "--" for multi-character script parameter names.
- The EWOKS events are send to EWOKS event handlers and to a normal application logger.
0.8.1 - 2024-09-14
load_graphis now able to load non-JSON files from a path without extension.load_graphandconvert_graphaccept nowPathtype args for the workflow path and the root directory.- New method
cancelinTaskto be called when the task must be cancelled. It is up to eachTaskto implement this method. - New field
force_start_nodefor graph nodes. Setting this field toTrueforcefully marks the node as a start node (i.e. a node that must be executed before others).
ewokscore.graph.serialize:ewoks_jsonload_hookis deprecated. Usejson_loadinstead.
0.8.0 - 2024-09-10 [YANKED]
0.7.4 - 2024-06-12
- The pyyaml 6.0.2rc1 package is broken for python 3.7 or lower.
0.7.3 - 2024-03-13
- Numpy 2.0 is not supported.
0.7.2 - 2024-03-13
- Replace deprecated pkg_resources.
0.7.1 - 2023-07-04
- Make notebook test flaky for python 3.7.
0.7.0 - 2023-07-03
- Add support for jupyter notebooks as workflow tasks.
0.6.1 - 2023-06-20
- Executable scripts absolute path before execution.
0.6.0 - 2023-06-20
- Support executable scripts on linux (scripts that have a shebang).
0.5.3 - 2023-06-19
- Modify task doc strings.
0.5.2 - 2023-06-12
- Remove print statement from the task_discovery module.
0.5.1 - 2023-06-09
- By default, task discovery raises import errors when modules are specified and logs import errors when importing all tasks.
0.5.0 - 2023-06-09
- Task discovery without the need to specify modules (using package entry points).
0.4.3 - 2023-06-01
- Module can optionally be reloaded when discovering tasks.
0.4.2 - 2023-06-01
- Module can optionally be reloaded when discovering tasks.
0.4.1 - 2023-05-15
- Task properties that instantiate objects whenever used are replaced by functions.
0.4.0 - 2023-03-27
- CLI support inputs by label or task identifier.
- CLI option "--output" renamed to "--outputs".
0.3.3 - 2023-03-24
- Tasks discovery includes the current working directory.
0.3.2 - 2023-03-23
- Make discover_tasks_from_modules pickelable.
0.3.1 - 2023-03-08
- Ewoks event field "binding" is deprecated in favor of "engine".
0.3.0 - 2022-11-04
Variablemethodsvariable_values,named_variable_values,positional_variable_valuesno longer values of typeMissingData.
0.2.1 - 2022-10-28
- Store only "name" and "value" of dynamic inputs in node default inputs.
0.2.0 - 2022-10-26
- Workflow inputs and outputs: use
task_identifierto select nodes.
0.1.1 - 2022-09-02
- Add missing
packagingdependency.
0.1.0 - 2022-08-31
Graphclass as an API for all task graphs.Taskclass as an API for all tasks.Variableclass for task parameters, hashing and persistence (JSON, HDF5-Nexus).load_graphfor loading graph from JSON or YAML.execute_graphfor naive task scheduling in a single thread.- Execution events based on python's logging facility.