def _migrate_contribution(self, old_contrib, friendly_id): ac = old_contrib._Contribution__ac try: description = old_contrib._fields.get('content', '') except AttributeError: if not self.is_legacy_event: self.print_warning('Contribution {} has no fields'.format(old_contrib)) description = '' description = convert_to_unicode(getattr(description, 'value', description)) # str or AbstractFieldContent status = getattr(old_contrib, '_status', None) status_class = status.__class__.__name__ if status else None contrib = Contribution(event_new=self.event, friendly_id=friendly_id, title=convert_to_unicode(old_contrib.title), render_mode=RenderMode.html, description=description, duration=old_contrib.duration, protection_mode=PROTECTION_MODE_MAP[ac._accessProtection], board_number=convert_to_unicode(getattr(old_contrib, '_boardNumber', '')), keywords=self._process_keywords(getattr(old_contrib, '_keywords', '')), is_deleted=(status_class == 'ContribStatusWithdrawn')) if old_contrib._track is not None: track = self.event_ns.track_map.get(old_contrib._track) if not track: self.print_warning('Track not found: {}. Setting to None.'.format(old_contrib._track)) else: contrib.track = track if not self.quiet: self.print_info('%[cyan]Contribution%[reset] {}'.format(contrib.title)) self.event_ns.legacy_contribution_map[old_contrib] = contrib contrib.legacy_mapping = LegacyContributionMapping(event_new=self.event, legacy_contribution_id=old_contrib.id) # contribution type if old_contrib._type is not None: try: contrib.type = self.event_ns.legacy_contribution_type_map[old_contrib._type] except AttributeError: self.print_warning('%[yellow!]Invalid contrib type {}' .format(convert_to_unicode(old_contrib._type._name))) # abstract if old_contrib in self.event_ns.legacy_contribution_abstracts: contrib.abstract = self.event_ns.legacy_contribution_abstracts[old_contrib] # ACLs (managers, read access, submitters) principals = {} self._process_ac(ContributionPrincipal, principals, ac) for submitter in old_contrib._submitters: self._process_principal(ContributionPrincipal, principals, submitter, 'Submitter', roles={'submit'}) self._process_principal_emails(ContributionPrincipal, principals, getattr(old_contrib, '_submittersEmail', []), 'Submitter', roles={'submit'}) contrib.acl_entries = set(principals.itervalues()) # speakers, authors and co-authors contrib.person_links = list(self._migrate_contribution_person_links(old_contrib)) # references ("report numbers") contrib.references = list(self._process_references(ContributionReference, old_contrib)) # contribution/abstract fields if hasattr(old_contrib, '_fields'): contrib.field_values = list(self._migrate_contribution_field_values(old_contrib)) contrib.subcontributions = [self._migrate_subcontribution(old_contrib, old_subcontrib, pos) for pos, old_subcontrib in enumerate(old_contrib._subConts, 1)] contrib._last_friendly_subcontribution_id = len(contrib.subcontributions) return contrib