예제 #1
0
def version_download(id, resource_id, version_id):
    """Download resource blueprint supporting version id.

    This download blueprint gets the activity_id from the version and redirects
    to a download url that can handle it. Currently is working with
    blob_storage extension but can work with any download endpoint that knows
    how to handle activities for resources.
    """
    context = {
        'model': model,
        'user': toolkit.c.user
    }

    try:
        version = action.version_show(
            context, {'resource_id': resource_id, 'version_id': version_id}
            )
        activity_id = version['activity_id']
    except toolkit.ObjectNotFound:
        toolkit.abort(404, toolkit._(u'Version not found'))

    download_url = toolkit.url_for(
        'resource.download',
        id=id,
        resource_id=resource_id,
        activity_id=activity_id,
        qualified=True
        )
    return toolkit.redirect_to(download_url)
예제 #2
0
    def test_version_delete(self):
        dataset = factories.Dataset()
        resource = factories.Resource(package_id=dataset['id'],
                                      name='First name')
        user = factories.Sysadmin()
        context = get_context(user)

        version = resource_version_create(context, {
            'resource_id': resource['id'],
            'name': '1',
            'notes': 'Version notes'
        })

        assert version

        version_delete(context, {'version_id': version['id']})

        with pytest.raises(toolkit.ObjectNotFound):
            version_show(context, {'version_id': version['id']})
예제 #3
0
    def test_version_show(self):
        dataset = factories.Dataset()
        resource = factories.Resource(package_id=dataset['id'],
                                      name='First name')
        user = factories.Sysadmin()
        context = get_context(user)

        version = resource_version_create(context, {
            'resource_id': resource['id'],
            'name': '1',
            'notes': 'Version notes'
        })

        result = version_show(context, {'version_id': version['id']})

        assert result['id'] == version['id']
        assert result['name'] == '1'
        assert result['notes'] == 'Version notes'
        assert result['creator_user_id'] == user['id']
def dataset_version_restore(context, data_dict):
    """Restores dataset version by restoring dataset
    metadata and creating a new version with it

    :param dataset_id: the id or name of the dataset
    :type dataset_id: string
    :param version_id: the id or name of the dataset
    :type version_id: string
    :returns: restored dataset
    :rtype: dict
    """
    model = context.get('model', core_model)
    dataset_name_or_id, version_name_or_id = toolkit.get_or_bust(
        data_dict, ['dataset_id', 'version_id'])

    dataset = model.Package.get(dataset_name_or_id)
    if not dataset:
        raise toolkit.ObjectNotFound("Dataset not found")
    dataset_id = dataset.id
    toolkit.check_access('version_create', context, {"package_id": dataset_id})

    version = version_show(context, data_dict)
    if not version:
        raise toolkit.ObjectNotFound("Version not found")
    v_name = "restored_{}".format(version['name'])
    v_notes = "Restored from version: {}".format(version['name'])
    old_dataset = activity_dataset_show(context, {
        'activity_id': version['activity_id'],
        'dataset_id': dataset_id
    })
    restored_dataset = toolkit.get_action('package_update')(context,
                                                            old_dataset)
    dataset_version_create(context, {
        'dataset_id': dataset.id,
        'name': v_name,
        'notes': v_notes
    })

    return restored_dataset