ecFlow's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »



This is  small follow up exercise where we will use embedded triggers.  

These are triggers embedded within the scripts.

Whilst the expression is not true, then job will hold


Ecf Script

Add/amend the t2.ecf

$HOME/course/test/f1/t2.ecf
%include <head.h>
ecflow_client --wait="t1 == complete"
%include <tail.h>

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
   endfamily
endsuite

Python

The trigger expression can be checked,  this is especially important when dealing with very large suites and complex triggers.

$HOME/course/test.py
import os
from ecflow import Defs,Suite,Family,Task,Edit,Trigger

def create_family_f1():
    return Family("f1",
                Edit(SLEEP=20),
                Task("t1"),
                Task("t2"))
             
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("check trigger expressions")
check = defs.check()
assert len(check) == 0, check 
 
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

  1. Edit the suite definition file to add the trigger.
  2. Replace the suite
    python:   python3 test.py ;  python3 client.py
    text:        ecflow_client --suspend=/test ; ecflow_client --replace=/test  test.def
  3. Observe the tasks in ecflow_ui .
  4. Notice the wait icon on task t2.
  5. See the trigger relation by clicking on the trigger tab.
  6. Search any reference to t1 by using the search menu.
  7. Introduce an error in the trigger expression and ensure that this error is trapped. i.e. change trigger to.

    Check trigger expressions
    Trigger("t == complete")  # there is no node with name t, this should be reported as an error
  • No labels