import peak.events.trellis as trellis
from datetime import timedelta, datetime, time, date
one_day = timedelta(1)
one_hour = timedelta(hours=1)
class Event(trellis.Component):
trellis.values(
start = None,
end = None,
globaltz = None
)
def busyHoursForDay(self, day):
"""Return the number of busy hours the event takes up on day."""
if None in (self.start, self.end):
return 0
range_start = datetime.combine(day, time(0, tzinfo=self.globaltz))
range_end = range_start + one_day
if range_end >= self.start and range_start <= self.end:
return 1
class Day(trellis.Component):
trellis.values(
date = None,
events = trellis.Set(),
busy = 0
)
@trellis.rule
def busy(self):
return sum(event.busyHoursForDay(self.date) for event in self.events)