コード例 #1
0
ファイル: migrate_users.py プロジェクト: mchampanis/core-hq
    def test_web_user_migration(self):
        old_couch_user = old_couch_user_models.CouchUser.get(WEB_USER['_id'])
        web_user = CouchUser.from_old_couch_user(old_couch_user)
        web_user.save(force_update=True)

        django_user = web_user.get_django_user()
        self.assertEqual(django_user.username, web_user.username)

        output = web_user.to_json()
        del output['_rev']
        self.assertEqual(
            json.dumps(output, sort_keys=True),
            json.dumps(WEB_USER_TARGET, sort_keys=True)
        )
コード例 #2
0
ファイル: migrate_users.py プロジェクト: mchampanis/core-hq
    def handle(self, *args, **options):
        old_couch_users = old_couch_user_models.CouchUser.view('users/old_users', include_docs=True)
        print "Loaded all (old) CouchUser docs into memory."
        for old_couch_user in old_couch_users:
            try:
                couch_user = CouchUser.from_old_couch_user(old_couch_user)
                couch_user.old_couch_user_id = old_couch_user.get_id
                couch_user.save(force_update=True)
            except Exception as e:
                print "There was an error migrating CouchUser with _id %s: %s" % (
                    old_couch_user._id.encode('utf-8'),
                    str(e)
                )
            else:
                print "Migrated %s (%s)" % (couch_user.username.encode('utf-8'), couch_user.user_id.encode('utf-8'))

        print "Creating old => new user _id map"
        couch_users = CouchUser.all()
        id_map = {}
        for couch_user in couch_users:
            try:
                old_id = couch_user.old_couch_user_id
            except KeyError:
                pass
            else:
                id_map[old_id] = couch_user.user_id
            try:
                couch_user.save()
            except Exception as e:
                print 'Failed to save %s: %s' % (couch_user.user_id.encode('utf-8'), str(e))

        print "Cleaning up references..."

        print "* Group"
        group_ids = set()
        for group in Group.view('groups/by_user', keys=id_map.keys(), include_docs=True):
            if group._id in group_ids:
                continue
            for i, user_id in enumerate(group.users):
                if user_id in id_map:
                    group.users[i] = id_map[user_id]
            group.save()
            group_ids.add(group._id)

        print "* ReportNotification"
        notification_ids = set()
        for notification in ReportNotification.view('reports/user_notifications',
                                                    keys=id_map.keys(),
                                                    include_docs=True):
            if notification._id in notification_ids:
                continue
            for i, user_id in enumerate(notification.user_ids):
                if user_id in id_map:
                    notification.user_ids[i] = id_map[user_id]
            notification.save()
            notification_ids.add(notification._id)

        print "* MessageLog"
        messages = MessageLog.objects.all()
        count = 0
        for message in messages:
            if message.couch_recipient in id_map:
                message.couch_recipient = id_map[message.couch_recipient]
                count += 1
        print "    %s/%s changed (just in case you were curious)" % (count, messages.count())