Add a complete
Sometimes you do not want to run a task when a certain condition is met. The condition can be signalled by an event. For example, event t2:b might indicate that task t2 did not manage to produce expected result, so we do not need to run task t4.
In this case you can use the complete expression keyword. This has a similar syntax to the trigger keyword but sets a task complete rather than running it.
When ecflow_server tries to start a task, it evaluates the trigger and complete expression s. If the complete expression condition is correct, the task will set itself complete.:term:complete expression evaluation takes precedence over the trigger.
Completes can be between tasks, between families, or both. It can be used in conjunction with a trigger. For example:
Text
# Definition of the suite test.
suite test
edit ECF_INCLUDE "$HOME/course" # replace '$HOME' with the path to your home directory
edit ECF_HOME "$HOME/course"
family f1
edit SLEEP 20
task t1
task t2
trigger t1 eq complete
event a
event b
task t3
trigger t2:a
task t4
trigger t2 eq complete
complete t2:b
endfamily
endsuite
Python
import os
from ecflow import Defs, Suite, Family, Task, Edit, Trigger, Complete, Event
def create_family_f1():
return Family(
"f1",
Edit(SLEEP=20),
Task("t1"),
Task("t2", Trigger("t1 == complete"), Event("a"), Event("b")),
Task("t3", Trigger("t2:a")),
Task("t4", Trigger("t2 == complete"), Complete("t2:b")),
)
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"), "course")
defs = Defs(Suite("test", Edit(ECF_INCLUDE=home, ECF_HOME=home), create_family_f1()))
print(defs)
print("Checking job creation: .ecf -> .job0")
print(defs.check_job_creation())
print("Saving definition to file 'test.def'")
defs.save_as_defs("test.def")
What to do:
Update
test.defortest.pyto add a complete expression to task t4Replace the suite.
Python:python3 test.py ; python3 client.pyText:ecflow_client --suspend=/test ; ecflow_client --replace=/test test.defObserve the tasks in ecflow_ui
See the triggers by selecting t4
See the trigger relation by clicking on the arrow
See the triggers in the tree, using the Show menu
Note the icon indicating that the task has not run
To check the triggers modify task t2 so that event b is not triggered; task t4 should run when t2 completes.