Exemplo n.º 1
0
 def _clone_timetable(self, new_event):
     offset = new_event.start_dt - self.old_event.start_dt
     # no need to copy the type; it's set automatically based on the object
     attrs = get_simple_column_attrs(TimetableEntry) - {'type', 'start_dt'}
     break_strategy = defaultload('break_')
     break_strategy.joinedload('own_venue')
     break_strategy.joinedload('own_room').lazyload('*')
     query = (self.old_event.timetable_entries.options(
         joinedload('parent').lazyload('*'), break_strategy).order_by(
             TimetableEntry.parent_id.is_(None).desc()))
     # iterate over all timetable entries; start with top-level
     # ones so we can build a mapping that can be used once we
     # reach nested entries
     entry_map = {}
     for old_entry in query:
         entry = TimetableEntry()
         entry.start_dt = old_entry.start_dt + offset
         entry.populate_from_attrs(old_entry, attrs)
         if old_entry.parent is not None:
             entry.parent = entry_map[old_entry.parent]
         if old_entry.session_block is not None:
             entry.session_block = self._session_block_map[
                 old_entry.session_block]
         if old_entry.contribution is not None:
             entry.contribution = self._contrib_map[old_entry.contribution]
         if old_entry.break_ is not None:
             entry.break_ = self._clone_break(old_entry.break_)
         new_event.timetable_entries.append(entry)
         entry_map[old_entry] = entry
Exemplo n.º 2
0
 def _clone_timetable(self, new_event):
     offset = new_event.start_dt - self.old_event.start_dt
     # no need to copy the type; it's set automatically based on the object
     attrs = get_simple_column_attrs(TimetableEntry) - {'type', 'start_dt'}
     break_strategy = defaultload('break_')
     break_strategy.joinedload('own_venue')
     break_strategy.joinedload('own_room').lazyload('*')
     query = (self.old_event.timetable_entries
              .options(joinedload('parent').lazyload('*'),
                       break_strategy)
              .order_by(TimetableEntry.parent_id.is_(None).desc()))
     # iterate over all timetable entries; start with top-level
     # ones so we can build a mapping that can be used once we
     # reach nested entries
     entry_map = {}
     for old_entry in query:
         entry = TimetableEntry()
         entry.start_dt = old_entry.start_dt + offset
         entry.populate_from_attrs(old_entry, attrs)
         if old_entry.parent is not None:
             entry.parent = entry_map[old_entry.parent]
         if old_entry.session_block is not None:
             entry.session_block = self._session_block_map[old_entry.session_block]
         if old_entry.contribution is not None:
             entry.contribution = self._contrib_map[old_entry.contribution]
         if old_entry.break_ is not None:
             entry.break_ = self._clone_break(old_entry.break_)
         new_event.timetable_entries.append(entry)
         entry_map[old_entry] = entry