Beispiel #1
0
def migrate(targets):
    collections = targets.pop('collections')
    assert len(targets), 'Must specify object to create new guid for'
    assert len(
        targets) == 1, 'Can only create new guid for one object at a time'
    old_id = targets.values()[0]
    node = Node.load(old_id)
    new_guid = Guid.generate(referent=node)
    logger.info('* Created new guid {} for node {}'.format(
        new_guid._id, old_id))
    logger.info('* Preparing to set references.')
    fix_backrefs(node)
    node.reload()
    node._id = new_guid._id
    node.save()
    new_guid.referent = node
    new_guid.save()

    for collection, _id_list in collections.iteritems():
        assert type(
            _id_list
        ) == list, 'Expected type list for collection {} ids, got {}'.format(
            collection, type(_id_list))
        for _id in _id_list:
            logger.info('** Updating {} ({})'.format(_id, collection))
            doc = clean_dict(database[collection].find_one({'_id': _id}))
            replacement = json.loads(
                re.sub(r'\b{}\b'.format(old_id), new_guid._id,
                       json.dumps(doc)))
            database[collection].find_and_modify({'_id': _id},
                                                 {'$set': replacement})
            logger.info('*** Updated {} ({}): \n{}\n'.format(
                _id, collection, replacement))

    logger.info('Successfully migrate {} to {}'.format(old_id, new_guid._id))
Beispiel #2
0
    def test_restore_file(self):
        root = models.StoredFileNode(
            path='root',
            name='rootfolder',
            is_file=False,
            node=self.node,
            provider='test',
            materialized_path='/long/path/to',
        ).wrapped()
        root.save()

        fn = models.StoredFileNode(
            parent=root._id,
            path='afile',
            name='name',
            is_file=True,
            node=self.node,
            provider='test',
            materialized_path='/long/path/to/name',
        ).wrapped()

        guid = Guid.generate(fn)

        before = fn.to_storage()
        trashed = fn.delete(user=self.user)

        restored = trashed.restore()
        assert_equal(restored.to_storage(), before)

        assert_equal(models.TrashedFileNode.load(trashed._id), None)

        # Guid is repointed
        guid.reload()
        assert_equal(guid.referent, restored)
Beispiel #3
0
    def test_restore_file(self):
        root = models.StoredFileNode(
            path='root',
            name='rootfolder',
            is_file=False,
            node=self.node,
            provider='test',
            materialized_path='/long/path/to',
        ).wrapped()
        root.save()

        fn = models.StoredFileNode(
            parent=root._id,
            path='afile',
            name='name',
            is_file=True,
            node=self.node,
            provider='test',
            materialized_path='/long/path/to/name',
        ).wrapped()

        guid = Guid.generate(fn)

        before = fn.to_storage()
        trashed = fn.delete(user=self.user)

        restored = trashed.restore()
        assert_equal(
            restored.to_storage(),
            before
        )

        assert_equal(models.TrashedFileNode.load(trashed._id), None)

        # Guid is repointed
        guid.reload()
        assert_equal(guid.referent, restored)