Skip to content

Commit

Permalink
Merge pull request #4069 from klikstermkd/4065-remove-rest-api
Browse files Browse the repository at this point in the history
Remove REST API related code
  • Loading branch information
Konstantin Sivakov committed Mar 20, 2018
2 parents 1071f58 + beaf2ba commit 7e52722
Show file tree
Hide file tree
Showing 18 changed files with 45 additions and 577 deletions.
30 changes: 0 additions & 30 deletions ckan/config/routing.py
Expand Up @@ -131,36 +131,6 @@ def make_map():
ver='/1') as m:
m.connect('/search/{register}', action='search')

# /api ver 1, 2 or none
with SubMapper(map, controller='api', path_prefix='/api{ver:/1|/2|}',
ver='/1') as m:
m.connect('/rest', action='index')

# /api/rest ver 1, 2 or none
with SubMapper(map, controller='api', path_prefix='/api{ver:/1|/2|}',
ver='/1', requirements=dict(register=register_list_str)
) as m:

m.connect('/rest/{register}', action='list', conditions=GET)
m.connect('/rest/{register}', action='create', conditions=POST)
m.connect('/rest/{register}/{id}', action='show', conditions=GET)
m.connect('/rest/{register}/{id}', action='update', conditions=PUT)
m.connect('/rest/{register}/{id}', action='update', conditions=POST)
m.connect('/rest/{register}/{id}', action='delete', conditions=DELETE)
m.connect('/rest/{register}/{id}/:subregister', action='list',
conditions=GET)
m.connect('/rest/{register}/{id}/:subregister', action='create',
conditions=POST)
m.connect('/rest/{register}/{id}/:subregister/{id2}', action='create',
conditions=POST)
m.connect('/rest/{register}/{id}/:subregister/{id2}', action='show',
conditions=GET)
m.connect('/rest/{register}/{id}/:subregister/{id2}', action='update',
conditions=PUT)
m.connect('/rest/{register}/{id}/:subregister/{id2}', action='delete',
conditions=DELETE)


# /api/util ver 1, 2 or none
with SubMapper(map, controller='api', path_prefix='/api{ver:/1|/2|}',
ver='/1') as m:
Expand Down
210 changes: 0 additions & 210 deletions ckan/controllers/api.py
Expand Up @@ -271,216 +271,6 @@ def _get_action_from_map(self, action_map, register, subregister):
if action:
return get_action(action)

def list(self, ver=None, register=None, subregister=None, id=None):
context = {'model': model, 'session': model.Session,
'user': c.user, 'api_version': ver,
'auth_user_obj': c.userobj}
log.debug('listing: %s', context)
action_map = {
'revision': 'revision_list',
'group': 'group_list',
'dataset': 'package_list',
'tag': 'tag_list',
'licenses': 'license_list',
('dataset', 'relationships'): 'package_relationships_list',
('dataset', 'revisions'): 'package_revision_list',
('dataset', 'activity'): 'package_activity_list',
('group', 'activity'): 'group_activity_list',
('user', 'activity'): 'user_activity_list',
('user', 'dashboard_activity'): 'dashboard_activity_list',
('activity', 'details'): 'activity_detail_list',
}

action = self._get_action_from_map(action_map, register, subregister)
if not action:
return self._finish_bad_request(
_('Cannot list entity of this type: %s') % register)
try:
return self._finish_ok(action(context, {'id': id}))
except NotFound as e:
return self._finish_not_found(text_type(e))
except NotAuthorized as e:
return self._finish_not_authz(text_type(e))

def show(self, ver=None, register=None, subregister=None,
id=None, id2=None):
action_map = {
'revision': 'revision_show',
'group': 'group_show_rest',
'tag': 'tag_show_rest',
'dataset': 'package_show_rest',
('dataset', 'relationships'): 'package_relationships_list',
}
for type in model.PackageRelationship.get_all_types():
action_map[('dataset', type)] = 'package_relationships_list'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver, 'auth_user_obj': c.userobj}
data_dict = {'id': id, 'id2': id2, 'rel': subregister}

log.debug('show: %s', context)

action = self._get_action_from_map(action_map, register, subregister)
if not action:
return self._finish_bad_request(
_('Cannot read entity of this type: %s') % register)
try:
return self._finish_ok(action(context, data_dict))
except NotFound as e:
return self._finish_not_found(text_type(e))
except NotAuthorized as e:
return self._finish_not_authz(text_type(e))

def create(self, ver=None, register=None, subregister=None,
id=None, id2=None):

action_map = {
'group': 'group_create_rest',
'dataset': 'package_create_rest',
'rating': 'rating_create',
('dataset', 'relationships'): 'package_relationship_create_rest',
}
for type in model.PackageRelationship.get_all_types():
action_map[('dataset', type)] = 'package_relationship_create_rest'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver, 'auth_user_obj': c.userobj}
log.debug('create: %s', (context))
try:
request_data = self._get_request_data()
data_dict = {'id': id, 'id2': id2, 'rel': subregister}
data_dict.update(request_data)
except ValueError as inst:
return self._finish_bad_request(
_('JSON Error: %s') % inst)

action = self._get_action_from_map(action_map, register, subregister)
if not action:
return self._finish_bad_request(
_('Cannot create new entity of this type: %s %s') %
(register, subregister))

try:
response_data = action(context, data_dict)
location = None
if "id" in data_dict:
location = str('%s/%s' % (request.path.replace('package',
'dataset'),
data_dict.get("id")))
return self._finish_ok(response_data,
resource_location=location)
except NotAuthorized as e:
return self._finish_not_authz(text_type(e))
except NotFound as e:
return self._finish_not_found(text_type(e))
except ValidationError as e:
# CS: nasty_string ignore
log.info('Validation error (REST create): %r', str(e.error_dict))
return self._finish(409, e.error_dict, content_type='json')
except DataError as e:
log.info('Format incorrect (REST create): %s - %s',
e.error, request_data)
error_dict = {
'success': False,
'error': {'__type': 'Integrity Error',
'message': e.error,
'data': request_data}}
return self._finish(400, error_dict, content_type='json')
except search.SearchIndexError:
log.error('Unable to add package to search index: %s',
request_data)
return self._finish(500,
_(u'Unable to add package to search index') %
request_data)
except:
model.Session.rollback()
raise

def update(self, ver=None, register=None, subregister=None,
id=None, id2=None):
action_map = {
'dataset': 'package_update_rest',
'group': 'group_update_rest',
('dataset', 'relationships'): 'package_relationship_update_rest',
}
for type in model.PackageRelationship.get_all_types():
action_map[('dataset', type)] = 'package_relationship_update_rest'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver, 'id': id, 'auth_user_obj': c.userobj}
log.debug('update: %s', context)
try:
request_data = self._get_request_data()
data_dict = {'id': id, 'id2': id2, 'rel': subregister}
data_dict.update(request_data)
except ValueError as inst:
return self._finish_bad_request(
_('JSON Error: %s') % inst)

action = self._get_action_from_map(action_map, register, subregister)
if not action:
return self._finish_bad_request(
_('Cannot update entity of this type: %s') %
register.encode('utf-8'))
try:
response_data = action(context, data_dict)
return self._finish_ok(response_data)
except NotAuthorized as e:
return self._finish_not_authz(text_type(e))
except NotFound as e:
return self._finish_not_found(text_type(e))
except ValidationError as e:
# CS: nasty_string ignore
log.info('Validation error (REST update): %r', str(e.error_dict))
return self._finish(409, e.error_dict, content_type='json')
except DataError as e:
log.info('Format incorrect (REST update): %s - %s',
e.error, request_data)
error_dict = {
'success': False,
'error': {'__type': 'Integrity Error',
'message': e.error,
'data': request_data}}
return self._finish(400, error_dict, content_type='json')
except search.SearchIndexError:
log.error('Unable to update search index: %s', request_data)
return self._finish(500, _(u'Unable to update search index') %
request_data)

def delete(self, ver=None, register=None, subregister=None,
id=None, id2=None):
action_map = {
'group': 'group_delete',
'dataset': 'package_delete',
('dataset', 'relationships'): 'package_relationship_delete_rest',
}
for type in model.PackageRelationship.get_all_types():
action_map[('dataset', type)] = 'package_relationship_delete_rest'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver, 'auth_user_obj': c.userobj}

data_dict = {'id': id, 'id2': id2, 'rel': subregister}

log.debug('delete %s/%s/%s/%s', register, id, subregister, id2)

action = self._get_action_from_map(action_map, register, subregister)
if not action:
return self._finish_bad_request(
_('Cannot delete entity of this type: %s %s') %
(register, subregister or ''))
try:
response_data = action(context, data_dict)
return self._finish_ok(response_data)
except NotAuthorized as e:
return self._finish_not_authz(text_type(e))
except NotFound as e:
return self._finish_not_found(text_type(e))
except ValidationError as e:
# CS: nasty_string ignore
log.info('Validation error (REST delete): %r', str(e.error_dict))
return self._finish(409, e.error_dict, content_type='json')

def search(self, ver=None, register=None):

log.debug('search %s params: %r', register, request.params)
Expand Down
37 changes: 0 additions & 37 deletions ckan/logic/action/create.py
Expand Up @@ -1099,28 +1099,6 @@ def _get_random_username_from_email(email):
return cleaned_localpart


# Modifications for rest api

def package_create_rest(context, data_dict):
_check_access('package_create_rest', context, data_dict)
dictized_package = model_save.package_api_to_dict(data_dict, context)
dictized_after = _get_action('package_create')(context, dictized_package)
pkg = context['package']
package_dict = model_dictize.package_to_api(pkg, context)
data_dict['id'] = pkg.id
return package_dict


def group_create_rest(context, data_dict):
_check_access('group_create_rest', context, data_dict)
dictized_group = model_save.group_api_to_dict(data_dict, context)
dictized_after = _get_action('group_create')(context, dictized_group)
group = context['group']
group_dict = model_dictize.group_to_api(group, context)
data_dict['id'] = group.id
return group_dict


def vocabulary_create(context, data_dict):
'''Create a new tag vocabulary.
Expand Down Expand Up @@ -1218,21 +1196,6 @@ def activity_create(context, activity_dict, **kw):
return model_dictize.activity_dictize(activity, context)


def package_relationship_create_rest(context, data_dict):
# rename keys
key_map = {'id': 'subject',
'id2': 'object',
'rel': 'type'}
# Don't be destructive to enable parameter values for
# object and type to override the URL parameters.
data_dict = ckan.logic.action.rename_keys(data_dict, key_map,
destructive=False)

relationship_dict = _get_action('package_relationship_create')(
context, data_dict)
return relationship_dict


def tag_create(context, data_dict):
'''Create a new vocabulary tag.
Expand Down
13 changes: 0 additions & 13 deletions ckan/logic/action/delete.py
Expand Up @@ -598,19 +598,6 @@ def tag_delete(context, data_dict):
tag_obj.delete()
model.repo.commit()

def package_relationship_delete_rest(context, data_dict):

# rename keys
key_map = {'id': 'subject',
'id2': 'object',
'rel': 'type'}
# We want 'destructive', so that the value of the subject,
# object and rel in the URI overwrite any values for these
# in params. This is because you are not allowed to change
# these values.
data_dict = ckan.logic.action.rename_keys(data_dict, key_map, destructive=True)

package_relationship_delete(context, data_dict)

def _unfollow(context, data_dict, schema, FollowerClass):
model = context['model']
Expand Down
34 changes: 0 additions & 34 deletions ckan/logic/action/get.py
Expand Up @@ -1480,40 +1480,6 @@ def user_show(context, data_dict):
return user_dict


def package_show_rest(context, data_dict):
_check_access('package_show_rest', context, data_dict)

logic.get_action('package_show')(context, data_dict)

pkg = context['package']

package_dict = model_dictize.package_to_api(pkg, context)

return package_dict


def group_show_rest(context, data_dict):
_check_access('group_show_rest', context, data_dict)

logic.get_action('group_show')(context, data_dict)
group = context['group']

group_dict = model_dictize.group_to_api(group, context)

return group_dict


def tag_show_rest(context, data_dict):
_check_access('tag_show_rest', context, data_dict)

logic.get_action('tag_show')(context, data_dict)
tag = context['tag']

tag_dict = model_dictize.tag_to_api(tag, context)

return tag_dict


@logic.validate(logic.schema.default_autocomplete_schema)
def package_autocomplete(context, data_dict):
'''Return a list of datasets (packages) that match a string.
Expand Down

0 comments on commit 7e52722

Please sign in to comment.