...
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/TimeUsing+python+Dependenciesscripting |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/AdvancedObject+Oriented+TopicsSuites |
---|
|
|
|
The text examples allow indentation. In python, indentation affects the logical meaning of the program.
However, as we have seen we can use python with statement the Node constructor to provide the indentation.
Here is the previous example using the with statement:
...
indentation, to show the definition structure.
Code Block |
---|
language | py |
---|
title | Using Node constructor to show definition structure |
---|
|
import os
|
...
...
import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter,Time,Day,Date
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"), "course")
defs = Defs(
|
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
, Meter("progress", 1, 100, 90)),
|
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
, Trigger("t1:progress ge 30")),
|
...
...
...
, Trigger("t1:progress ge 60")),
|
...
...
...
, Trigger("t1:progress ge 90"))) |
...
...
...
...
...
...
...
...
, Time( "00:30 23:30 00:30" )),
|
...
...
...
...
, Date("1.*.*"), Time("12:00")),
|
...
...
...
...
, Time("00:02")))))
print(defs)
print("Checking job creation: .ecf -> .job0") |
...
...
...
(defs.check_job_creation())
|
...
...
("Checking trigger expressions")
assert len(defs.check()) == |
...
...
...
("Saving definition to file 'test.def'")
|
...
defs.save_as_defs("test.def") |
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Time+Dependencies |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://software.ecmwf.int/wiki/display/ECFLOW/Advanced+Topics |
---|
|
|
For alternative styles:
We can also use python with statement to provide the indentation.
Here is the previous example using the with statement:
...
|
from ecflow import Defs,Suite,Family,Task,Edit,Trigger,Complete,Event,Meter,Time,Day,Date
import os
|
...
...
...
("Creating suite definition") |
...
...
...
...
...
with defs.add_suite("test") |
...
...
...
HOME=os.path.join(os.getenv("HOME"), "course"))
suite += |
...
Edit(ECF_INCLUDE =os.path.join(os.getenv("HOME"), "course"))
with suite.add_family("f1") as f1:
f1 += Edit(SLEEP=20) |
...
...
...
, Meter("progress", 1, 100, 90)) |
...
...
...
...
== complete"), Event("a"), Event("b")) |
...
...
...
...
...
...
...
== complete"), Complete("t2:b")) |
...
...
...
, Trigger("t1:progress ge 30")) |
...
...
...
, Trigger("t1:progress ge 60")) |
...
...
...
, Trigger("t1:progress ge 90") |
...
...
...
with suite.add_family("f2") |
...
as f2:
f2 += Edit(SLEEP=20) |
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
("Checking job creation: .ecf -> .job0" |
...
...
(defs.check_job_creation())
print("Checking trigger expressions")
assert len(defs.check()) == 0, defs.check()
print("Saving definition to file 'test.def'")
defs.save_as_defs("test.def") |
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Using+python+scripting |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Object+Oriented+Suites |
---|
|
|
|
Alternative styles:
Code Block |
---|
|
#!/usr/bin/env python2.7
import os
for ecflow import *
print |
|
("Creating suite definition" |
|
)
home = os.path.join(os.getenv("HOME"), "course")
with Defs() as defs:
with defs.add_suite("test") as suite:
suite += |
|
[ Edit(ECF_INCLUDE=home,ECF_HOME=home) |
|
]
with suite.add_family("f1") as f1:
|
|
foriinrange(1,8):
f1 += [ Task("t{}".format(i)) for i in range(1,8) ]
f1 += |
|
[] [ Meter("progress", 1, 100, 90) |
|
] eq complete"]), Event("a"), Event("b") ]
f1.t3 += |
|
[ ] eq complete"]), Complete("t2:b") ]
f1.t5 += |
|
[ Trigger("t1:progress ge 30") |
|
] [ Trigger("t1:progress ge 60") |
|
] [ Trigger("t1:progress ge 90") |
|
]
with suite.add_family("f2") as f2:
|
|
[ Task("t{}".format(i)) for i in range(1,6)] ]
f2.t1 |
|
Task("t1").add(+= Time( "00:30 23:30 00:30" ) |
|
), Task("t2").add(), Task("t3").add(+= [ Date("1.*.*"), Time("12:00") |
|
), Task("t4").add(), Task("t5").add()]
print defs
print print(defs)
print("Checking job creation: .ecf -> .job0" |
|
)
print defs.check_job_creation()
print("Checking trigger expressions")
assert len(defs.check() == 0, defs.check()
print("Saving definition to file 'test.def'")
defs.save_as_defs("test.def")
print("Replace suite /test in the server")
defs.test.replace_on_server() |
|