示例#1
0
 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
示例#2
0
 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
示例#3
0
 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
示例#4
0
 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
示例#5
0
 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)
示例#6
0
 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
示例#7
0
 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
示例#8
0
 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
示例#9
0
文件: clone.py 项目: indico/indico
 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
示例#10
0
 def _clone_acl(self, new_event):
     new_event.acl_entries = clone_principals(EventPrincipal,
                                              self.old_event.acl_entries)
示例#11
0
文件: clone.py 项目: bkolobara/indico
 def _clone_acl(self, new_event):
     new_event.acl_entries = clone_principals(EventPrincipal, self.old_event.acl_entries)
示例#12
0
 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)