Adding Repeats
from ecflow import (
Defs,
Suite,
Family,
Task,
RepeatDay,
RepeatEnumerated,
RepeatString,
RepeatInteger,
RepeatDateList,
)
def add_tasks(fam):
for i in range(1, 3):
fam.add_task(Task("t{}".format(i)))
defs = Defs()
s1 = defs.add_suite("s1")
f1 = s1.add_family("f1")
f1.add_repeat(RepeatDate("YMD", 20100111, 20100115, 2))
add_tasks(f1)
f2 = s1.add_family("f2")
f2.add_repeat(RepeatInteger("count", 0, 100, 2))
add_tasks(f2)
f3 = s1.add_family("f3")
f3.add_repeat(RepeatEnumerated("enum", ["red", "green", "blue"]))
add_tasks(f3)
f4 = s1.add_family("f4")
f4.add_repeat(RepeatString("enum", ["a", "b", "c"]))
add_tasks(f4)
f5 = s1.add_family("f5")
f5.add_repeat(RepeatDay(1))
add_tasks(f5)
f6 = s1.add_family("f6")
f6.add_repeat(
RepeatDateList("YMD", [20130101, 20130102, 20130103])
) # arbitrary date list
add_tasks(f6)
The following examples show alternative styles that produces the same definition:
defs = Defs(
Suite(
"s1",
Family(
"f1",
RepeatDate("YMD", 20100111, 20100115, 2),
[Task("t{}".format(i)) for i in range(1, 3)],
),
Family(
"f2",
RepeatInteger("count", 0, 100, 2),
[Task("t{}".format(i)) for i in range(1, 3)],
),
Family(
"f3",
RepeatEnumerated("enum", ["red", "green", "blue"]),
[Task("t{}".format(i)) for i in range(1, 3)],
),
Family(
"f4",
RepeatString("enum", ["a", "b", "c"]),
[Task("t{}".format(i)) for i in range(1, 3)],
),
Family("f5", RepeatDay(1), [Task("t{}".format(i)) for i in range(1, 3)]),
Family(
"f6",
RepeatDateList("YMD", [20130101, 20130102, 20130103]),
[Task("t{}".format(i)) for i in range(1, 3)],
),
)
)
defs = Defs() + Suite("s1")
defs.s1 += [
Family("f{}".format(i)).add([Task("t{}".format(i)) for i in range(1, 3)])
for i in range(1, 6)
]
defs.s1.f1 += RepeatDate("YMD", 20100111, 20100115, 2)
defs.s1.f2 += RepeatInteger("count", 0, 100, 2)
defs.s1.f3 += RepeatEnumerated("enum", ["red", "green", "blue"])
defs.s1.f4 += RepeatString("enum", ["a", "b", "c"])
defs.s1.f5 += RepeatDay(1)
defs.s1.f6 += RepeatDateList("YMD", [20130101, 20130102, 20130103])
Warning
In the second example above we use ‘defs.s1.*’ to reference a node by name. This is useful in small designs but will produce maintenance issues in large designs IF the node names are changed.