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 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)