Priority of task inputs#
Details#
A node in a workflow can get inputs from three different sources:
Via the
data_mappinglink attribute of an incoming link (see Link attributes)Via the
parametersCLI argument (orinputsfor Python) when executing/submitting the workflow (see ewoks execute reference)Via the
default_inputsnode attribute of the node itself (see Node attributes)
If the same input is specified by these different sources, ewoks applies the following priorities:
Data mapping takes precedence over workflow parameters and default inputs
If the input is not specified by the data mapping, the workflow parameters takes precedence over the default inputs
If the input is not specified by the data mapping nor the workflow parameters, default inputs are used as last resort
TL;DR#
Data mapping > Workflow parameters > Node default inputs
Example#
Consider the following workflow made of SumTask nodes from ewokscore (SumTask takes two inputs a and b and sums them):
wf = {
"graph": {"id": "Sum"},
"nodes": [
{
"id": "sum_node",
"task_type": "class",
"task_identifier": "ewokscore.tests.examples.tasks.sumtask.SumTask",
"default_inputs": [{"name": "a", "value": 1}, {"name": "b", "value": 2}],
},
],
"links": [],
}
In this case, we have given two default_inputs to our sum_node:
a = 1b = 2
If we execute the workflow with no parameters/inputs:
>>> execute_graph(graph=wf)
{'result': 3}
There is no incoming link with data mapping, no workflow inputs, the two default inputs are summed to get 3.
—
If we specify a value for b when executing the workflow:
>>> execute_graph(
... graph=wf,
... inputs=[
... {
... "name": "b",
... "value": 20,
... "id": "sum_node",
... }
... ],
... )
{'result': 21}
a is still 1 but the default value of b was replaced by the workflow input value (20), changing to result to 21.
—
If we change our workflow to include a SumTask before our sum_node with an incoming data mapping that sets b value to its result (in this case 200):
new_wf = {
"graph": {"id": "Sum"},
"nodes": [
{
"id": "first_node",
"task_type": "class",
"task_identifier": "ewokscore.tests.examples.tasks.sumtask.SumTask",
"default_inputs": [{"name": "a", "value": 100}, {"name": "b", "value": 100}],
},
{
"id": "sum_node",
"task_type": "class",
"task_identifier": "ewokscore.tests.examples.tasks.sumtask.SumTask",
"default_inputs": [{"name": "a", "value": 1}, {"name": "b", "value": 2}],
},
],
"links": [
{
"source": "first_node",
"target": "sum_node",
"data_mapping": [{"source_output": "result", "target_input": "b"}],
}
],
}
Then, if we execute as before (with the workflow input):
>>> execute_graph(
... graph=new_wf,
... inputs=[
... {
... "name": "b",
... "value": 20,
... "id": "sum_node",
... }
... ],
... )
{'result': 201}
We see that both the default input and the workflow input for b of sum_node are ignored, the data mapping taking precedence to change the result to 201.