All pastes #771031 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-11-12 19:32 UTC
rendered paste body
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)