Esempio n. 1
0
    def migrate_groups(self):
        print cformat('%{white!}migrating groups')

        for old_group in committing_iterator(self.zodb_root['groups'].itervalues()):
            if old_group.__class__.__name__ != 'Group':
                continue
            group = LocalGroup(id=int(old_group.id), name=convert_to_unicode(old_group.name).strip())
            print cformat('%{green}+++%{reset} %{white!}{:6d}%{reset} %{cyan}{}%{reset}').format(group.id, group.name)
            members = set()
            for old_member in old_group.members:
                if old_member.__class__.__name__ != 'Avatar':
                    print cformat('%{yellow!}!!!        Unsupported group member type: {}').format(
                        old_member.__class__.__name__)
                    continue
                user = User.get(int(old_member.id))
                if user is None:
                    print cformat('%{yellow!}!!!        User not found: {}').format(old_member.id)
                    continue
                while user.merged_into_user:
                    user = user.merged_into_user
                if user.is_deleted:
                    print cformat('%{yellow!}!!!        User deleted: {}').format(user.id)
                    continue
                members.add(user)
            for member in sorted(members, key=attrgetter('full_name')):
                print cformat('%{blue!}<->%{reset}        %{white!}{:6d} %{yellow}{} ({})').format(
                    member.id, member.full_name, member.email)
            group.members = members
            db.session.add(group)
Esempio n. 2
0
 def migrate_groups(self):
     it = committing_iterator(self.zodb_root['groups'].itervalues())
     used_names = set()
     for old_group in self.logger.progress_iterator('Migrating groups', it, len(self.zodb_root['groups']),
                                                    attrgetter('id'), lambda x: ''):
         if old_group.__class__.__name__ != 'Group':
             continue
         group_name = orig_group_name = convert_to_unicode(old_group.name).strip()
         n = 0
         while group_name.lower() in used_names:
             group_name = '{}-{}'.format(orig_group_name, n)
             n += 1
             self.print_warning('Duplicate group name: {}, using {} instead'.format(orig_group_name, group_name))
         used_names.add(group_name.lower())
         group = LocalGroup(id=int(old_group.id), name=group_name)
         self.print_success('%[white!]{:6d}%[reset] %[cyan]{}%[reset]'.format(group.id, group.name))
         members = set()
         for old_member in old_group.members:
             if old_member.__class__.__name__ != 'Avatar':
                 self.print_warning('Unsupported group member type: {}'.format(old_member.__class__.__name__))
                 continue
             user = self.global_ns.avatar_merged_user.get(old_member.id)
             if user is None:
                 self.print_warning('User not found: {}'.format(old_member.id))
                 continue
             members.add(user)
         for member in sorted(members, key=attrgetter('full_name')):
             self.print_info('%[blue!]<->%[reset]        %[white!]{:6d} %[yellow]{} ({})'.format(
                 member.id, member.full_name, member.email))
         group.members = members
         self.global_ns.all_groups[group.id] = group
         db.session.add(group)
     db.session.flush()
Esempio n. 3
0
 def _create_group(id_):
     group = LocalGroup()
     group.id = id_
     group.name = u'dummy-{}'.format(id_)
     db.session.add(group)
     db.session.flush()
     return group.proxy
Esempio n. 4
0
 def _create_group(id_):
     group = LocalGroup()
     group.id = id_
     group.name = f'dummy-{id_}'
     db.session.add(group)
     db.session.flush()
     return group.proxy
Esempio n. 5
0
    def migrate_groups(self):
        print cformat('%{white!}migrating groups')

        for old_group in committing_iterator(self.zodb_root['groups'].itervalues()):
            if old_group.__class__.__name__ != 'Group':
                continue
            group = LocalGroup(id=int(old_group.id), name=convert_to_unicode(old_group.name).strip())
            print cformat('%{green}+++%{reset} %{white!}{:6d}%{reset} %{cyan}{}%{reset}').format(group.id, group.name)
            members = set()
            for old_member in old_group.members:
                if old_member.__class__.__name__ != 'Avatar':
                    print cformat('%{yellow!}!!!        Unsupported group member type: {}').format(
                        old_member.__class__.__name__)
                    continue
                user = User.get(int(old_member.id))
                if user is None:
                    print cformat('%{yellow!}!!!        User not found: {}').format(old_member.id)
                    continue
                while user.merged_into_user:
                    user = user.merged_into_user
                if user.is_deleted:
                    print cformat('%{yellow!}!!!        User deleted: {}').format(user.id)
                    continue
                members.add(user)
            for member in sorted(members, key=attrgetter('full_name')):
                print cformat('%{blue!}<->%{reset}        %{white!}{:6d} %{yellow}{} ({})').format(
                    member.id, member.full_name, member.email)
            group.members = members
            db.session.add(group)
Esempio n. 6
0
 def _create_group(id_):
     group = LocalGroup()
     group.id = id_
     group.name = u'dummy-{}'.format(id_)
     db.session.add(group)
     db.session.flush()
     return group.proxy
Esempio n. 7
0
 def _process_args(self):
     if 'group_id' in request.view_args:
         self.new_group = False
         self.group = LocalGroup.get(request.view_args['group_id'])
         if self.group is None:
             raise NotFound
     else:
         self.new_group = True
         self.group = LocalGroup()
Esempio n. 8
0
 def _process_args(self):
     if not config.LOCAL_GROUPS:
         raise Forbidden('Local groups are disabled.')
     if 'group_id' in request.view_args:
         self.new_group = False
         self.group = LocalGroup.get(request.view_args['group_id'])
         if self.group is None:
             raise NotFound
     else:
         self.new_group = True
         self.group = LocalGroup()
Esempio n. 9
0
    def search(cls, name, exact=False, providers=None):
        """Search for groups.

        :param name: The group name to search for.
        :param exact: If only exact matches should be found (much faster)
        :param providers: ``None`` to search in all providers and
                          local groups. May be a set specifying
                          providers to search in. For local groups, the
                          ``'indico'`` provider name may be used.
        """
        name = name.strip()
        if not name:
            return []
        if exact:
            criterion = db.func.lower(LocalGroup.name) == name.lower()
        else:
            criterion = db.func.lower(LocalGroup.name).contains(name.lower())
        result = set()
        if (providers is None
                or 'indico' in providers) and config.LOCAL_GROUPS:
            result |= {g.proxy for g in LocalGroup.find(criterion)}
        result |= {
            GroupProxy(g.name, g.provider.name, _group=g)
            for g in multipass.search_groups(
                name, providers=providers, exact=exact)
        }
        return sorted(result, key=lambda x: x.name.lower())
Esempio n. 10
0
    def search(cls, name, exact=False, providers=None):
        """Searches for groups

        :param name: The group name to search for.
        :param exact: If only exact matches should be found (much faster)
        :param providers: ``None`` to search in all providers and
                          local groups. May be a set specifying
                          providers to search in. For local groups, the
                          ``'indico'`` provider name may be used.
        """
        name = name.strip()
        if not name:
            return []
        if exact:
            criterion = db.func.lower(LocalGroup.name) == name.lower()
        else:
            criterion = db.func.lower(LocalGroup.name).contains(name.lower())
        result = set()
        if providers is None or "indico" in providers:
            result |= {g.proxy for g in LocalGroup.find(criterion)}
        result |= {
            GroupProxy(g.name, g.provider.name, _group=g)
            for g in multipass.search_groups(name, providers=providers, exact=exact)
        }
        return sorted(result, key=lambda x: x.name.lower())
Esempio n. 11
0
 def validate_name(self, field):
     query = LocalGroup.find(
         db.func.lower(LocalGroup.name) == field.data.lower())
     if self.group:
         query = query.filter(LocalGroup.id != self.group.id)
     if query.count():
         raise ValidationError(_('A group with this name already exists.'))
Esempio n. 12
0
 def group(self):
     """The underlying :class:`.LocalGroup`"""
     if not config.LOCAL_GROUPS:
         # pretend local groups do not exist if they are disabled
         # this way they'll be rejected in acl fields
         return None
     return LocalGroup.get(self.id)
Esempio n. 13
0
 def _process_args(self):
     if 'group_id' in request.view_args:
         self.new_group = False
         self.group = LocalGroup.get(request.view_args['group_id'])
         if self.group is None:
             raise NotFound
     else:
         self.new_group = True
         self.group = LocalGroup()
Esempio n. 14
0
 def _checkParams(self):
     if "group_id" in request.view_args:
         self.new_group = False
         self.group = LocalGroup.get(request.view_args["group_id"])
         if self.group is None:
             raise NotFound
     else:
         self.new_group = True
         self.group = LocalGroup()
Esempio n. 15
0
 def _checkParams(self):
     self.group = LocalGroup.get(request.view_args["group_id"])
     if self.group is None:
         raise NotFound
Esempio n. 16
0
 def group(self):
     """The underlying :class:`.LocalGroup`"""
     return LocalGroup.get(self.id)
Esempio n. 17
0
 def _process_args(self):
     self.group = LocalGroup.get(request.view_args['group_id'])
     if self.group is None:
         raise NotFound
Esempio n. 18
0
 def group(self):
     """The underlying :class:`.LocalGroup`"""
     return LocalGroup.get(self.id)
Esempio n. 19
0
 def has_data(self):
     return bool(LocalGroup.find().count())
Esempio n. 20
0
 def _process_args(self):
     self.group = LocalGroup.get(request.view_args['group_id'])
     if self.group is None:
         raise NotFound
Esempio n. 21
0
 def _checkParams(self):
     self.group = LocalGroup.get(request.view_args['group_id'])
     if self.group is None:
         raise NotFound
Esempio n. 22
0
 def validate_name(self, field):
     query = LocalGroup.find(db.func.lower(LocalGroup.name) == field.data.lower())
     if self.group:
         query = query.filter(LocalGroup.id != self.group.id)
     if query.count():
         raise ValidationError(_('A group with this name already exists.'))
Esempio n. 23
0
 def has_data(self):
     return bool(LocalGroup.find().count())