def build(self, context): int_ids = getUtility(IIntIds) schedule_calendars = set() calendar = getScheduleCalendar(self.calendar.__parent__) if calendar is None: return schedule_calendars.add(calendar) for event in self.events: schedule = context.shared.schedule_map.get(event['timetable_key']) if schedule is None: continue period = context.shared.period_map[event['period_key']] owner_int_id = int(schedule.__parent__.__name__) owner = int_ids.getObject(owner_int_id) calendar = getScheduleCalendar(owner) if calendar is None: continue if calendar not in schedule_calendars: schedule_calendars.add(calendar) new_event = self.findEvent(calendar, period, event['dtstart'], event['duration']) if new_event is not None: new_event.description = event['description'] new_event.location = event['location'] for resource in event['resources']: if resource not in new_event.resources: new_event.bookResource(resource) # XXX: maybe copy over old "free" section events here schedule_cal_relationships = [(cal, IRelationshipLinks(cal)) for cal in schedule_calendars] old_relationships = IRelationshipLinks(self.calendar) old_subscriptions = list( old_relationships.getLinksByRole(URICalendarSubscriber)) for link in old_subscriptions: old_info = link.extra_info for schedule_cal, relationships in schedule_cal_relationships: info = CalendarOverlayInfo(schedule_cal, old_info.show, old_info.color1, old_info.color2) info.__parent__ = old_info.__parent__ try: relationships.find(link.my_role, link.target, link.role, link.rel_type) except ValueError: relate(link.rel_type, (schedule_cal, link.my_role), (link.target, link.role), extra_info=info) for link in old_subscriptions: unrelate(link.rel_type, (self.calendar, link.my_role), (link.target, link.role))
def build(self, context): int_ids = getUtility(IIntIds) schedule_calendars = set() calendar = getScheduleCalendar(self.calendar.__parent__) if calendar is None: return schedule_calendars.add(calendar) for event in self.events: schedule = context.shared.schedule_map.get(event['timetable_key']) if schedule is None: continue period = context.shared.period_map[event['period_key']] owner_int_id = int(schedule.__parent__.__name__) owner = int_ids.getObject(owner_int_id) calendar = getScheduleCalendar(owner) if calendar is None: continue if calendar not in schedule_calendars: schedule_calendars.add(calendar) new_event = self.findEvent( calendar, period, event['dtstart'], event['duration']) if new_event is not None: new_event.description = event['description'] new_event.location = event['location'] for resource in event['resources']: if resource not in new_event.resources: new_event.bookResource(resource) # XXX: maybe copy over old "free" section events here schedule_cal_relationships = [ (cal, IRelationshipLinks(cal)) for cal in schedule_calendars] old_relationships = IRelationshipLinks(self.calendar) old_subscriptions = list( old_relationships.getLinksByRole(URICalendarSubscriber)) for link in old_subscriptions: old_info = link.extra_info for schedule_cal, relationships in schedule_cal_relationships: info = CalendarOverlayInfo(schedule_cal, old_info.show, old_info.color1, old_info.color2) info.__parent__ = old_info.__parent__ try: relationships.find( link.my_role, link.target, link.role, link.rel_type) except ValueError: relate(link.rel_type, (schedule_cal, link.my_role), (link.target, link.role), extra_info = info) for link in old_subscriptions: unrelate(link.rel_type, (self.calendar, link.my_role), (link.target, link.role))