def _migrate_session(self, old_session, friendly_id=None): ac = old_session._Session__ac code = convert_to_unicode(old_session._code) if code == 'no code': code = '' session = Session(event_new=self.event, title=convert_to_unicode(old_session.title), description=convert_to_unicode(old_session.description), is_poster=(old_session._ttType == 'poster'), code=code, default_contribution_duration=old_session._contributionDuration, protection_mode=PROTECTION_MODE_MAP[ac._accessProtection]) if friendly_id is not None: session.friendly_id = friendly_id else: # migrating a zombie session; we simply give it a new friendly id self.event._last_friendly_session_id += 1 session.friendly_id = self.event._last_friendly_session_id if not self.quiet: self.print_info('%[blue!]Session%[reset] {}'.format(session.title)) self.event_ns.legacy_session_map[old_session] = session if old_session.id not in self.legacy_session_ids_used: session.legacy_mapping = LegacySessionMapping(event_new=self.event, legacy_session_id=old_session.id) self.legacy_session_ids_used.add(old_session.id) else: self.print_warning('%[yellow!]Duplicate session id; not adding legacy mapping for {}' .format(old_session.id)) # colors try: session.colors = ColorTuple(old_session._textColor, old_session._color) except (AttributeError, ValueError) as e: self.print_warning('%[yellow]Session has no colors: "{}" [{}]'.format(session.title, e)) principals = {} # managers / read access self._process_ac(SessionPrincipal, principals, ac, allow_emails=True) # coordinators for submitter in old_session._coordinators.itervalues(): self._process_principal(SessionPrincipal, principals, submitter, 'Coordinator', roles={'coordinate'}) self._process_principal_emails(SessionPrincipal, principals, getattr(old_session, '_coordinatorsEmail', []), 'Coordinator', roles={'coordinate'}, allow_emails=True) session.acl_entries = set(principals.itervalues()) return session