Page tree
Skip to end of metadata
Go to start of metadata
This tutorial will give examples for both the plain text and Python methods.
      

Text Method

The python method is recommended unless you are planning a simple suite.

Create a file called test.def , using your favourite text editor, with the following contents

$HOME/course/test.def
# Definition of the suite test
suite test
   edit ECF_HOME "$HOME/course"  # replace '$HOME' with the path to your home directory
   task t1
endsuite

 

This file contains the suite definition of a suite called test.
This suite contains a single task called t1.
Let us go through the lines one by one:
  1. This line is a comment line. Any characters between the # and the end of line are ignored
  2. This line defines a new suite by the name of test.
  3. Here we define a ecFlow variable called ECF_HOME.
    This variable defines the directory where all the unix files that will be used by the suite test will reside.
    For the rest of the course all file names will be given relative to this directory.
    Be sure to replace $HOME with the path to your home directory
  4. This defines a task named t1
  5. The endsuite finishes the definition of the suite test 

Python Method

Enter the following python code into a file i.e. test.py :

$HOME/course/test.py
import os
from ecflow import Defs,Suite,Task,Edit
   
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"),  "course")
defs = Defs( 
        Suite('test',
            Edit(ECF_HOME=home),
            Task('t1')))
print(defs)


Then run as a python script:  There are  a few ways to run  different python versions.

Run as python2
# python 2 is the default                  
module load python
python test.py
Run as python3
module load python3               
python3 test.py


Depending on which version you want to run, add the following as the first line in test.py
$HOME/course/test.py
#!/usr/bin/env python2.7                   
....
$HOME/course/test.py
#!/usr/bin/env python3            
...
chmod +x test.py
./test.py  # this uses shebang, see below, searches for specified python variant in $PATH

You should see the text "Creating suite definition" and then your definition as your output.

What to do

  1. Initially try both plain text and python examples. Later examples are only in python.
  2. Type in the suite definition file.
  3. Choose python invocation.  i.e. python test.py    |    python3 test.py    |    ./test.py.   

2 Comments

  1. Substitution can be done by the shell with the one liner:

    echo -e "# Definition of the suite test\nsuite test\nedit ECF_HOME $HOME/course\ntask t1\nendsuite" > test.def

     

  2. Add node attributes:

    Different ways of adding node attributes
    node.add_variable(home,'COURSE')       # c++ style
    node.add(Edit(home=COURSE))            # <node>.add(<attributes>)  
    Task('t1',Edit(home=COURSE))           # constructor. Task(name,<attribute>),  Family(name,Node | <attributes>), Suite(name,Node | <attributes>)
    node += Edit(home=COURSE)              # += to add a single attribute
    node += [Edit(home=COURSE),Event('e')] # += with list to add multiple attributes
    node + Edit(home=COURSE)               # +, node + <attributes>. A node must appear on the left hand side. Use brackets to control scope.


    Alternative styles

    import os
    import ecflow 
       
    print("Creating suite  definition")       
    home = os.path.join(os.getenv("HOME"),"course")
    defs = ecflow.Defs()
    suite = defs.add_suite("test")
    suite.add_variable("ECF_HOME",home)
    suite.add_task("t1")
    print(defs) 

    import os
    from ecflow import *
       
    print("Creating suite definition")
    home=os.path.join(os.getenv("HOME"),"course")
    with Defs() as defs:  
        defs.add(
            Suite("test",
                Edit(ECF_HOME=home),
                Task("t1")))
    print(defs)
    import os
    from ecflow import *
       
    print("Creating suite definition")
    home = os.path.join(os.getenv("HOME"),"course")
    defs = Defs() + (Suite("test") + Edit(ECF_HOME=home))
    defs.test += Task("t1")
    print(defs)