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 22 Next »

The text examples allow indentation. In python indentation affects the logical meaning of the program.

However we can use python with statement to provide the indentation.

Here is the previous example using the with statement:

#!/usr/bin/env python2.7
import os
import ecflow
import sys

version = sys.version_info 
if version[1] < 7: 
    print "This example requires python version 2.7, but found : " + str(version)
    exit(0)

print "Creating suite definition"  
with ecflow.Defs() as defs: 
    
    with defs.add_suite("test") as suite:
        
        suite.add_variable("ECF_INCLUDE", os.path.join(os.getenv("HOME"),  "course"))
        suite.add_variable("ECF_HOME",    os.path.join(os.getenv("HOME"),  "course"))
        
        with suite.add_family("f1") as f1:
            f1.add_variable("SLEEP", 20)
            f1.add_task("t1").add_meter("progress", 1, 100, 90)
            f1.add_task("t2").add_trigger("t1 eq complete").add_event("a").add_event("b")
            f1.add_task("t3").add_trigger("t2:a")  
            f1.add_task("t4").add_trigger("t2 eq complete").add_complete("t2:b")  
            f1.add_task("t5").add_trigger("t1:progress ge 30")  
            f1.add_task("t6").add_trigger("t1:progress ge 60")  
            f1.add_task("t7").add_trigger("t1:progress ge 90") 
    
        with suite.add_family("f2") as f2:        
            f2.add_variable("SLEEP", 20)
            f2.add_task("t1").add_time("00:30 23:30 00:30")
            f2.add_task("t2").add_day("sunday")
            f2.add_task("t3").add_date(1, 0, 0).add_time(12, 0)
            f2.add_task("t4").add_time(0, 2, True)
            f2.add_task("t5").add_time(0, 2)
            
    print defs

    print "Checking job creation: .ecf -> .job0"   
    print defs.check_job_creation()

    print "Checking trigger expressions"
    print defs.check()

    print "Saving definition to file 'test.def'"
    defs.save_as_defs("test.def")

Another approach is to use ecf.py module to benefit from object oriented polymorphism

#!/usr/bin/env python2.7
import os
import sys
sys.path.append('/home/ma/emos/def/o/def')
from ecf import *
print "Creating suite definition"  
defs = Defs().add(# Stream like definition
    Suite("test").add(
        Variables({ # a dictionnary to detect duplicated variables
                "ECF_INCLUDE": os.getenv("HOME") + "/course",
                "ECF_HOME":    os.getenv("HOME") + "/course",}),
        Family("f1").add(
            Variable("SLEEP", "20"),
            Task("t1").add(Meter("progress", 1, 100, 90)),
            Task("t2").add(
                Trigger("t1 eq complete"),
                Event("a"),
                Event("b")),
            Task("t3").add(Trigger("t2:a")),
            Task("t4").add(Trigger("t2 eq complete"),
                           Complete("t2:b")),
            Task("t5").add(Trigger("t1:progress ge 30")),
            Task("t6").add(Trigger("t1:progress ge 60")),
            Task("t7").add(Trigger("t1:progress ge 90")),),
        Family("f2").add(
            Variable("SLEEP", "20"),
            Task("t1").add(Time( "00:30 23:30 00:30" )),
            Task("t2").add(Day( "sunday" )),
            Task("t3").add(Date("1.*.*"),
                           Time("12:00")),
            Task("t4").add(Time("+00:02")),
            Task("t5").add(Time("00:02")))))
            
out = file("test.def", "w")
print >>out, defs
  • No labels