def __holidays__(self, month_planning): _map = dict() # map { day_number: [off_time_slots]} _lowest, _highest = month_planning.__first_last_key_dates__() for _blob in self.holidays: switch = { date: lambda: { _blob: TimeSlot.flags() } if _lowest <= _blob <= _highest else dict(), FreeSlots: lambda: _blob.__transform__(month_planning), SporadicOccurrence: lambda: _blob.__transform__(month_planning), DateDuration: lambda: _blob.__transform__(month_planning) } fuse = [(x, isinstance(_blob, x)) for x in switch] if any([x[1] for x in fuse]): _slots = switch[[x[0] for x in fuse if x[1]][0]]() for day_slot in _slots: if day_slot not in _map: _map[day_slot] = set() _map[day_slot] |= set(_slots[day_slot]) else: raise UserWarning("days/slots dump contains unmanaged types.") return dict([(x, list(_map[x])) for x in _map])
def __transform__(self, month_planning): first_date, last_date = month_planning.__first_last_key_dates__() if datetime(self.lower_date.year, self.lower_date.month, self.lower_date.day) < datetime(first_date.year, first_date.month, first_date.day): lower_bound = first_date else: lower_bound = self.lower_date if datetime(self.upper_date.year, self.upper_date.month, self.upper_date.day) > datetime(last_date.year, last_date.month, last_date.day): upper_bound = last_date else: upper_bound = self.upper_date map = dict() for i in range((upper_bound - lower_bound).days + 1): map[lower_bound + timedelta(days=i)] = TimeSlot.flags() return map
def __transform__(self, month_planning): _map = dict() # map { day_number: [off_time_slots]} _lowest, _highest = month_planning.__first_last_key_dates__() if self.offset: _lowest += self.offset _datetimes = [] _current = _lowest # initialization if self.progressive_period: while _lowest <= _current <= _highest: _datetimes.append(_current) _current += self.progressive_period else: _datetimes.append(_current) for _datetime in _datetimes: _map[_datetime] = TimeSlot.flags() # all day included return _map
def __holidays__(self, month_planning): _map = dict() # map { day_number: [off_time_slots]} _lowest, _highest = month_planning.__first_last_key_dates__() for _blob in self.holidays: switch = { date: lambda: {_blob: TimeSlot.flags()} if _lowest <= _blob <= _highest else dict(), FreeSlots: lambda: _blob.__transform__(month_planning), SporadicOccurrence: lambda: _blob.__transform__(month_planning), DateDuration: lambda: _blob.__transform__(month_planning) } fuse = [(x, isinstance(_blob, x)) for x in switch] if any([x[1] for x in fuse]): _slots = switch[[x[0] for x in fuse if x[1]][0]]() for day_slot in _slots: if day_slot not in _map: _map[day_slot] = set() _map[day_slot] |= set(_slots[day_slot]) else: raise UserWarning("days/slots dump contains unmanaged types.") return dict([(x, list(_map[x])) for x in _map])
def __transform__(self, month_planning): first_date, last_date = month_planning.__first_last_key_dates__() if datetime(self.lower_date.year, self.lower_date.month, self.lower_date.day) < datetime( first_date.year, first_date.month, first_date.day): lower_bound = first_date else: lower_bound = self.lower_date if datetime(self.upper_date.year, self.upper_date.month, self.upper_date.day) > datetime( last_date.year, last_date.month, last_date.day): upper_bound = last_date else: upper_bound = self.upper_date map = dict() for i in range((upper_bound - lower_bound).days + 1): map[lower_bound + timedelta(days=i)] = TimeSlot.flags() return map
def __init__(self, _date, _slots=TimeSlot.flags()): self.date = _date self.slots = _slots
def __regular_t2a__(p): return dict([(int(key), dict([(TimeSlot.__from_string__(timeslot), [Activity.__from_string__(activity) for activity in activities]) for timeslot, activities in timeslot2activites.iteritems()])) for key, timeslot2activites in p.iteritems()])