Пример #1
0
 def add(self, conf, event):
     event.assign_id()
     conf.setId(event.id)
     if conf.id in self._getIdx():
         raise RuntimeError('{} is already in ConferenceHolder'.format(
             conf.id))
     ObjectHolder.add(self, conf)
Пример #2
0
Файл: db.py Проект: Ictp/indico
 def update(self, old_token, new_token):
     ObjectHolder.remove(self, old_token)
     Catalog.getIdx('user_oauth_request_token').unindex_obj(old_token)
     ObjectHolder.add(self, new_token)
     Catalog.getIdx('user_oauth_request_token').index_obj(new_token)
Пример #3
0
Файл: db.py Проект: Ictp/indico
 def add(self, token):
     ObjectHolder.add(self, token)
     Catalog.getIdx('user_oauth_request_token').index_obj(token)
Пример #4
0
def split_avatars(file):
    """Step 2: Split the merged avatars - run this on the POST-MERGE database"""
    data = json.load(file)
    if len(data) != 2:
        echo('Invalid data: Expected two items, found {}'.format(len(data)))
        raise click.Abort()
    avatars = [AvatarHolder().getById(x['id']) for x in data]
    if avatars.count(None) != 1:
        echo(
            'Expected exactly one unreferenced avatar, got {}'.format(avatars))
        raise click.Abort()
    if avatars[0] is None:
        orig = avatars[1]
        orig_data = data[1]
        merged_data = data[0]
    else:
        orig = avatars[0]
        orig_data = data[0]
        merged_data = data[1]
    merged = [av for av in orig._mergeFrom if av.getId() == merged_data['id']]
    if len(merged) != 1:
        echo("Avatars don't seem to be merged into each other")
        raise click.Abort()
    merged = merged[0]
    if merged not in orig._mergeFrom or merged._mergeTo != orig:
        echo("Avatars don't seem to be merged into each other")
        raise click.Abort()
    # Remove merge references
    orig._mergeFrom.remove(merged)
    merged._mergeTo = None
    # Clean secondary emails
    orig.setSecondaryEmails(orig_data['secondary_emails'])
    merged.setSecondaryEmails(merged_data['secondary_emails'])
    # Clean identities
    for identity in merged.getIdentityList(create_identities=True):
        orig.removeIdentity(identity)
        identity.setUser(merged)
    # Re-index the avatars
    # noinspection PyCallByClass
    ObjectHolder.add(AvatarHolder(), merged)
    for index in {'organisation', 'email', 'name', 'surName', 'status'}:
        IndexesHolder().getById(index).unindexUser(orig)
        IndexesHolder().getById(index).indexUser(orig)
        IndexesHolder().getById(index).indexUser(merged)
    # Restore links for the merged avatar
    for key, links in merged_data['links'].iteritems():
        objtype, role = key.split('.')
        for link in links:
            # TODO: Add extra items here as necessary (use show_links to check if anything is missing)!
            if objtype == 'conference':
                event = ConferenceHolder().getById(link, quiet=True)
                if event is None:
                    echo('Event not found: {}'.format(link))
                    continue
                if event not in set(orig.linkedTo[objtype][role]):
                    echo('{!r} not linked to avatar via {}'.format(event, key))
                    continue
                if role == 'access':
                    event.revokeAccess(orig)
                    event.grantAccess(merged)
                else:
                    echo('Unexpected link type: {}'.format(key))
                    raise click.Abort()
                # print 'Updated {} - {!r}'.format(key, event)
            elif objtype == 'contribution':
                event_id, contrib_id = link
                event = ConferenceHolder().getById(event_id)
                if event is None:
                    echo('Event not found: {}'.format(event_id))
                    continue
                contrib = event.getContributionById(contrib_id)
                if contrib is None:
                    echo('Contrib not found: {}.{}'.format(
                        event_id, contrib_id))
                    continue
                if contrib not in set(orig.linkedTo[objtype][role]):
                    echo('{} not linked to avatar via {}'.format(contrib, key))
                    continue
                if role == 'submission':
                    contrib.revokeSubmission(orig)
                    contrib.grantSubmission(merged)
                elif role == 'manager':
                    contrib.revokeModification(orig)
                    contrib.grantModification(merged)
                else:
                    echo('Unexpected link type: {}'.format(key))
                    raise click.Abort()
                # print 'Updated {} - {}'.format(key, contrib)
            else:
                # This results in inconsistent data in redis, but since we flush the redis
                # links after a successful merge, that's not an issue. Also, we only reach
                # this branch if someone is using different versions of this script...
                echo('Unexpected link type: {}'.format(key))
                raise click.Abort()
    if not click.confirm('Do you want to commit the changes now?'):
        transaction.abort(
        )  # not really necessary, but let's stay on the safe side
        raise click.Abort()
    transaction.commit()
    # Refresh redis links
    avatar_links.delete_avatar(orig)
    avatar_links.delete_avatar(merged)
    avatar_links.init_links(orig)
    avatar_links.init_links(merged)
    # Delete suggestions
    suggestions.delete_avatar(orig)
    suggestions.delete_avatar(merged)
Пример #5
0
def split_avatars(file):
    """Step 2: Split the merged avatars - run this on the POST-MERGE database"""
    data = json.load(file)
    if len(data) != 2:
        echo('Invalid data: Expected two items, found {}'.format(len(data)))
        raise click.Abort()
    avatars = [AvatarHolder().getById(x['id']) for x in data]
    if avatars.count(None) != 1:
        echo('Expected exactly one unreferenced avatar, got {}'.format(avatars))
        raise click.Abort()
    if avatars[0] is None:
        orig = avatars[1]
        orig_data = data[1]
        merged_data = data[0]
    else:
        orig = avatars[0]
        orig_data = data[0]
        merged_data = data[1]
    merged = [av for av in orig._mergeFrom if av.getId() == merged_data['id']]
    if len(merged) != 1:
        echo("Avatars don't seem to be merged into each other")
        raise click.Abort()
    merged = merged[0]
    if merged not in orig._mergeFrom or merged._mergeTo != orig:
        echo("Avatars don't seem to be merged into each other")
        raise click.Abort()
    # Remove merge references
    orig._mergeFrom.remove(merged)
    merged._mergeTo = None
    # Clean secondary emails
    orig.setSecondaryEmails(orig_data['secondary_emails'])
    merged.setSecondaryEmails(merged_data['secondary_emails'])
    # Clean identities
    for identity in merged.getIdentityList(create_identities=True):
        orig.removeIdentity(identity)
        identity.setUser(merged)
    # Re-index the avatars
    # noinspection PyCallByClass
    ObjectHolder.add(AvatarHolder(), merged)
    for index in {'organisation', 'email', 'name', 'surName', 'status'}:
        IndexesHolder().getById(index).unindexUser(orig)
        IndexesHolder().getById(index).indexUser(orig)
        IndexesHolder().getById(index).indexUser(merged)
    # Restore links for the merged avatar
    for key, links in merged_data['links'].iteritems():
        objtype, role = key.split('.')
        for link in links:
            # TODO: Add extra items here as necessary (use show_links to check if anything is missing)!
            if objtype == 'conference':
                event = ConferenceHolder().getById(link, quiet=True)
                if event is None:
                    echo('Event not found: {}'.format(link))
                    continue
                if event not in set(orig.linkedTo[objtype][role]):
                    echo('{!r} not linked to avatar via {}'.format(event, key))
                    continue
                if role == 'access':
                    event.revokeAccess(orig)
                    event.grantAccess(merged)
                else:
                    echo('Unexpected link type: {}'.format(key))
                    raise click.Abort()
                # print 'Updated {} - {!r}'.format(key, event)
            elif objtype == 'contribution':
                event_id, contrib_id = link
                event = ConferenceHolder().getById(event_id)
                if event is None:
                    echo('Event not found: {}'.format(event_id))
                    continue
                contrib = event.getContributionById(contrib_id)
                if contrib is None:
                    echo('Contrib not found: {}.{}'.format(event_id, contrib_id))
                    continue
                if contrib not in set(orig.linkedTo[objtype][role]):
                    echo('{} not linked to avatar via {}'.format(contrib, key))
                    continue
                if role == 'submission':
                    contrib.revokeSubmission(orig)
                    contrib.grantSubmission(merged)
                elif role == 'manager':
                    contrib.revokeModification(orig)
                    contrib.grantModification(merged)
                else:
                    echo('Unexpected link type: {}'.format(key))
                    raise click.Abort()
                # print 'Updated {} - {}'.format(key, contrib)
            else:
                # This results in inconsistent data in redis, but since we flush the redis
                # links after a successful merge, that's not an issue. Also, we only reach
                # this branch if someone is using different versions of this script...
                echo('Unexpected link type: {}'.format(key))
                raise click.Abort()
    if not click.confirm('Do you want to commit the changes now?'):
        transaction.abort()  # not really necessary, but let's stay on the safe side
        raise click.Abort()
    transaction.commit()
    # Refresh redis links
    avatar_links.delete_avatar(orig)
    avatar_links.delete_avatar(merged)
    avatar_links.init_links(orig)
    avatar_links.init_links(merged)
    # Delete suggestions
    suggestions.delete_avatar(orig)
    suggestions.delete_avatar(merged)
Пример #6
0
 def update(self, old_token, new_token):
     ObjectHolder.remove(self, old_token)
     Catalog.getIdx('user_oauth_request_token').unindex_obj(old_token)
     ObjectHolder.add(self, new_token)
     Catalog.getIdx('user_oauth_request_token').index_obj(new_token)
Пример #7
0
 def add(self, token):
     ObjectHolder.add(self, token)
     Catalog.getIdx('user_oauth_request_token').index_obj(token)