Adding Time Dependencies
The following suite definition is NOT a real design, it just demonstrates all the variety of way of adding time dependencies.
from ecflow import Defs, Suite, Task, Day, Date, Cron, Time, TimeSlot, TimeSeries
start = TimeSlot(0, 0)
finish = TimeSlot(23, 0)
incr = TimeSlot(0, 30)
time_series = TimeSeries(start, finish, incr, True)
defs = Defs(
Suite(
"s1",
Task(
"date",
Date(1, 0, 0), # first of every month and every year
Date("2.*.*"), # second of every month and every yea
Date(28, 2, 2026),
), # 28 February 2026
Task("day", Day("monday"), Day(Days.tuesday)),
Task(
"time",
Time("+00:30"), # 30 minutes after suite has begun
Time("+00:30 20:00 01:00"), # 00:30,01:30,02:30....19:30 after suite start
Time(0, 59, True), # 00:59 - 59 minutes past midnight
Time(TimeSlot(20, 10)), # 20:10 - 10 minutes past eight
Time(
TimeSlot(20, 20), True
), # +20:20 - 20 minutes and 20 hours, after suite start
Time(time_series),
Time(0, 10),
Time("+00:40"),
Time("+00:40 20:00 01:00"),
),
Task(
"cron",
Cron(
"+00:00 23:00 00:30",
days_of_week=[0, 1, 2, 3, 4, 5, 6],
days_of_month=[1, 2, 3, 4, 5, 6],
months=[1, 2, 3, 4, 5, 6],
),
),
)
)
The following shows an alternative example that produces the same definition:
start = TimeSlot(0, 0)
finish = TimeSlot(23, 0)
incr = TimeSlot(0, 30)
time_series = TimeSeries(start, finish, incr, True)
cron = Cron()
cron.set_week_days([0, 1, 2, 3, 4, 5, 6])
cron.set_days_of_month([1, 2, 3, 4, 5, 6])
cron.set_months([1, 2, 3, 4, 5, 6])
cron.set_time_series("+00:00 23:00 00:30")
defs = Defs().add(
Suite("s1").add(
Task("date").add(Date(1, 0, 0), Date("2.*.*"), Date(28, 2, 2026)),
Task("day").add(Day("monday"), Day(Days.tuesday)),
Task("time").add(
Time("+00:30"),
Time("+00:30 20:00 01:00"),
Time(0, 59, True),
Time(TimeSlot(20, 10)),
Time(TimeSlot(20, 20), True),
Time(time_series),
Time(0, 10),
Time("+00:40"),
Time("+00:40 20:00 01:00"),
),
Task("cron").add(cron),
)
)
make_list_table(tables_raw[0])
start = TimeSlot(0, 0)
finish = TimeSlot(23, 0)
incr = TimeSlot(0, 30)
time_series = TimeSeries(start, finish, incr, True)
defs = Defs() + (Suite("s1") + Task("date") + Task("day") + Task("time") + Task("cron"))
defs.s1.date += [Date(1, 0, 0), Date("2.*.*"), Date(28, 2, 2026)]
defs.s1.day += [Day("monday"), Day(Days.tuesday)]
defs.s1.time += [
Time("+00:30"),
Time("+00:30 20:00 01:00"),
Time(0, 59, True),
Time(TimeSlot(20, 10)),
Time(TimeSlot(20, 20), True),
Time(time_series),
Time(0, 10),
Time("+00:40"),
Time("+00:40 20:00 01:00"),
]
defs.s1.cron += Cron(
"+00:00 23:00 00:30",
days_of_week=[0, 1, 2, 3, 4, 5, 6],
days_of_month=[1, 2, 3, 4, 5, 6],
months=[1, 2, 3, 4, 5, 6],
)
Warning
In the example above we use ‘defs.s1.date’ 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.