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