def _clone_attachment_folder(self, old_folder, new_object): folder_attrs = get_simple_column_attrs(AttachmentFolder) attachment_attrs = (get_simple_column_attrs(Attachment) | {'user'}) - {'modified_dt'} folder = AttachmentFolder(object=new_object) folder.populate_from_attrs(old_folder, folder_attrs) folder.acl_entries = clone_principals(AttachmentFolderPrincipal, old_folder.acl_entries, self._event_role_map, self._regform_map) for old_attachment in old_folder.attachments: self._attachment_map[old_attachment] = attachment = Attachment( folder=folder) attachment.populate_from_attrs(old_attachment, attachment_attrs) attachment.acl_entries = clone_principals( AttachmentPrincipal, old_attachment.acl_entries, self._event_role_map, self._regform_map) if attachment.type == AttachmentType.file: old_file = old_attachment.file attachment.file = AttachmentFile( attachment=attachment, user=old_file.user, filename=old_file.filename, content_type=old_file.content_type) with old_file.open() as fd: attachment.file.save(fd) return folder
def _create_new_contribution(self, event, old_contrib, preserve_session=True, excluded_attrs=None): attrs = (get_simple_column_attrs(Contribution) | {'own_room', 'own_venue'}) - {'abstract_id'} if excluded_attrs is not None: attrs -= excluded_attrs new_contrib = Contribution() new_contrib.populate_from_attrs(old_contrib, attrs) new_contrib.subcontributions = list( self._clone_subcontribs(old_contrib.subcontributions)) new_contrib.acl_entries = clone_principals(ContributionPrincipal, old_contrib.acl_entries, self._event_role_map) new_contrib.references = list( self._clone_references(ContributionReference, old_contrib.references)) new_contrib.person_links = list( self._clone_person_links(ContributionPersonLink, old_contrib.person_links)) new_contrib.field_values = list( self._clone_fields(old_contrib.field_values)) if old_contrib.type is not None: new_contrib.type = self._contrib_type_map[old_contrib.type] if preserve_session: if old_contrib.session is not None: new_contrib.session = self._session_map[old_contrib.session] if old_contrib.session_block is not None: new_contrib.session_block = self._session_block_map[ old_contrib.session_block] event.contributions.append(new_contrib) return new_contrib
def _clone_contribs(self, new_event): attrs = (get_simple_column_attrs(Contribution) | {'own_room', 'own_venue'}) - {'abstract_id'} query = (Contribution.query.with_parent(self.old_event) .options(undefer('_last_friendly_subcontribution_id'), joinedload('own_venue'), joinedload('own_room').lazyload('*'), joinedload('session'), joinedload('session_block').lazyload('session'), joinedload('type'), subqueryload('acl_entries'), subqueryload('subcontributions').joinedload('references'), subqueryload('references'), subqueryload('person_links'), subqueryload('field_values'))) for old_contrib in query: contrib = Contribution() contrib.populate_from_attrs(old_contrib, attrs) contrib.subcontributions = list(self._clone_subcontribs(old_contrib.subcontributions)) contrib.acl_entries = clone_principals(ContributionPrincipal, old_contrib.acl_entries) contrib.references = list(self._clone_references(ContributionReference, old_contrib.references)) contrib.person_links = list(self._clone_person_links(ContributionPersonLink, old_contrib.person_links)) contrib.field_values = list(self._clone_fields(old_contrib.field_values)) if old_contrib.type is not None: contrib.type = self._contrib_type_map[old_contrib.type] if old_contrib.session is not None: contrib.session = self._session_map[old_contrib.session] if old_contrib.session_block is not None: contrib.session_block = self._session_block_map[old_contrib.session_block] new_event.contributions.append(contrib) self._contrib_map[old_contrib] = contrib
def _clone_acl(self, new_event, event_exists): if event_exists: acl_entries = { principal for principal in self.old_event.acl_entries if principal.user != new_event.creator } new_event.acl_entries = clone_principals(EventPrincipal, acl_entries, self._event_role_map, self._regform_map) db.session.flush() new_event.update_principal(new_event.creator, full_access=True) else: new_event.acl_entries = clone_principals( EventPrincipal, self.old_event.acl_entries, self._event_role_map, self._regform_map)
def _clone_tracks(self, new_event): attrs = get_simple_column_attrs(Track) for old_track in self.old_event.tracks: track = Track() track.populate_from_attrs(old_track, attrs) track.acl_entries = clone_principals(TrackPrincipal, old_track.acl_entries) track.track_group = self._track_group_map.get(old_track.track_group, None) new_event.tracks.append(track) self._track_map[old_track] = track
def _clone_sessions(self, new_event): attrs = get_simple_column_attrs(Session) | {'own_room', 'own_venue'} query = (Session.query.with_parent(self.old_event).options( joinedload('blocks'), joinedload('own_venue'), joinedload('own_room').lazyload('*'), subqueryload('acl_entries'))) for old_sess in query: sess = Session() sess.populate_from_attrs(old_sess, attrs) sess.blocks = list(self._clone_session_blocks(old_sess.blocks)) sess.acl_entries = clone_principals(SessionPrincipal, old_sess.acl_entries) new_event.sessions.append(sess) self._session_map[old_sess] = sess
def _clone_sessions(self, new_event): attrs = get_simple_column_attrs(Session) | {'own_room', 'own_venue'} query = (Session.query.with_parent(self.old_event) .options(joinedload('blocks'), joinedload('own_venue'), joinedload('own_room').lazyload('*'), subqueryload('acl_entries'))) for old_sess in query: sess = Session() sess.populate_from_attrs(old_sess, attrs) sess.blocks = list(self._clone_session_blocks(old_sess.blocks)) sess.acl_entries = clone_principals(SessionPrincipal, old_sess.acl_entries) new_event.sessions.append(sess) self._session_map[old_sess] = sess
def _create_new_contribution(self, event, old_contrib, preserve_session=True, excluded_attrs=None): attrs = (get_simple_column_attrs(Contribution) | {'own_room', 'own_venue'}) - {'abstract_id'} if excluded_attrs is not None: attrs -= excluded_attrs new_contrib = Contribution() new_contrib.populate_from_attrs(old_contrib, attrs) new_contrib.subcontributions = list(self._clone_subcontribs(old_contrib.subcontributions)) new_contrib.acl_entries = clone_principals(ContributionPrincipal, old_contrib.acl_entries) new_contrib.references = list(self._clone_references(ContributionReference, old_contrib.references)) new_contrib.person_links = list(self._clone_person_links(ContributionPersonLink, old_contrib.person_links)) new_contrib.field_values = list(self._clone_fields(old_contrib.field_values)) if old_contrib.type is not None: new_contrib.type = self._contrib_type_map[old_contrib.type] if preserve_session: if old_contrib.session is not None: new_contrib.session = self._session_map[old_contrib.session] if old_contrib.session_block is not None: new_contrib.session_block = self._session_block_map[old_contrib.session_block] event.contributions.append(new_contrib) return new_contrib
def _clone_acl(self, new_event): new_event.acl_entries = clone_principals(EventPrincipal, self.old_event.acl_entries)
def _clone_acl(self, new_event): new_event.acl_entries = clone_principals(EventPrincipal, self.old_event.acl_entries, self._event_role_map, self._regform_map)