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)
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()
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
def _create_group(id_): group = LocalGroup() group.id = id_ group.name = f'dummy-{id_}' db.session.add(group) db.session.flush() return group.proxy
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()
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()
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())
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())
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.'))
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)
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()
def _checkParams(self): self.group = LocalGroup.get(request.view_args["group_id"]) if self.group is None: raise NotFound
def group(self): """The underlying :class:`.LocalGroup`""" return LocalGroup.get(self.id)
def _process_args(self): self.group = LocalGroup.get(request.view_args['group_id']) if self.group is None: raise NotFound
def has_data(self): return bool(LocalGroup.find().count())
def _checkParams(self): self.group = LocalGroup.get(request.view_args['group_id']) if self.group is None: raise NotFound
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.'))