def request_show(context, data_dict):
    '''Return the metadata of a requestdata.

    :param id: The id of a requestdata.
    :type id: string

    :rtype: dictionary

    '''

    data, errors = df.validate(data_dict, schema.request_show_schema(),
                               context)

    if errors:
        raise toolkit.ValidationError(errors)

    check_access('requestdata_request_show', context, data_dict)

    id = data.get('id')

    requestdata = ckanextRequestdata.get(id=id)

    if requestdata is None:
        raise NotFound('Request with provided \'id\' cannot be found')

    out = requestdata.as_dict()

    return out
def request_patch(context, data_dict):
    '''Patch a request.

    :param id: The id of a request.
    :type id: string

    :returns: A patched request
    :rtype: dictionary

    '''

    request_patch_schema = schema.request_patch_schema()
    fields = request_patch_schema.keys()

    # Exclude fields from the schema that are not in data_dict
    for field in fields:
        if field not in data_dict.keys() and\
           (field != 'id' and field != 'package_id'):
            request_patch_schema.pop(field)

    data, errors = df.validate(data_dict, request_patch_schema, context)

    if errors:
        raise toolkit.ValidationError(errors)

    check_access('requestdata_request_patch', context, data_dict)

    id = data.get('id')
    package_id = data.get('package_id')

    payload = {'id': id, 'package_id': package_id}

    request = ckanextRequestdata.get(**payload)

    if request is None:
        raise NotFound

    request_patch_schema.pop('id')
    request_patch_schema.pop('package_id')

    fields = request_patch_schema.keys()

    for field in fields:
        setattr(request, field, data.get(field))

    request.modified_at = datetime.datetime.now()

    request.save()

    out = request.as_dict()

    return out
示例#3
0
    def test_create_and_delete_requestable_dataset(self, plugin_c_mock):
        test_username = '******'
        mock_helper.populate_mock_as_c(plugin_c_mock, test_username)

        package = {
            "package_creator": "test function",
            "private": False,
            "dataset_date": "01/01/1960-12/31/2012",
            "indicator": "0",
            "caveats": "These are the caveats",
            "license_other": "TEST OTHER LICENSE",
            "methodology": "This is a test methodology",
            "dataset_source": "World Bank",
            "license_id": "hdx-other",
            "name": "test_activity_3",
            "notes": "This is a test activity",
            "title": "Test Activity 3",
            "groups": [{"name": "roger"}],
            "owner_org": "hdx-test-org",
            "maintainer": "tester",
            "is_requestdata_type": True,
            "file_types": ["csv"],
            "field_names": ["field1", "field2"]
        }

        testsysadmin = model.User.by_name('testsysadmin')

        # Real username is still needed even with ignore_auth otherwise
        # some fields ( like groups ) will not be saved
        context = {'ignore_auth': True,
                   'model': model, 'session': model.Session, 'user': '******'}

        self._get_action('organization_create')(context, organization)

        self._get_action('package_create')(context, package)

        p = self._get_action('package_show')(context, {"id": package['name']})

        test_url = h.url_for(controller='ckanext.hdx_package.controllers.dataset_controller:DatasetController',
                             action='read', id=package['name'])
        result = self.app.post(test_url, extra_environ={'Authorization': str(testsysadmin.apikey)})
        assert '200' in str(result)

        assert 'Request data directly from the maintainer of this dataset.' in str(result)

        assert 'This data is by request only' in str(result)

        context['user'] = '******'
        data_dict = {
            'package_id': p['id'],
            'sender_name': 'John Doe',
            'message_content': 'I want to add additional data.',
            'organization': 'Google',
            'email_address': '*****@*****.**',
        }

        req_result = self._get_action('requestdata_request_create')(context, data_dict)

        assert 'requestdata_id' in req_result

        requestdata_id = req_result.get('requestdata_id')

        data_dict_show = {
            'id': requestdata_id,
            'package_id': data_dict['package_id']
        }

        context['user'] = '******'
        result = self._get_action('requestdata_request_show')(context, data_dict_show)

        assert result['package_id'] == data_dict['package_id']
        assert result['sender_name'] == data_dict['sender_name']
        assert result['message_content'] == data_dict['message_content']
        assert result['email_address'] == data_dict['email_address']
        assert result['data_shared'] is False
        assert result['state'] == 'new'

        result = self._get_action('hdx_dataset_purge')(context, {'id': data_dict['package_id']})

        assert result is None

        with assert_raises(logic.NotFound) as cm:
            self._get_action('package_show')( context,  {'id': data_dict['package_id']})

        ex = cm.exception
        assert ex.message == ""
        # result = self._get_action('package_show')(context, {'id': data_dict['package_id']})

        rq = ckanextRequestdata.get(id=requestdata_id)
        assert rq is None