A thin wrapper around CKAN's action API
ckanapi may be used from within a plugin or separate from CKAN.
import ckanapi
import pprint
demo = ckanapi.RemoteCKAN('http://demo.ckan.org')
groups = demo.action.group_list(id='data-explorer')
pprint.pprint(groups)
result:
{u'help': u'Return a list of the names of the site\'s ...
u'result': [u'data-explorer',
u'example-group',
u'geo-examples',
u'skeenawild'],
u'success': True}
Failures are raised as exceptions just like when calling get_action from a plugin:
import ckanapi
demo = ckanapi.RemoteCKAN('http://demo.ckan.org', api_key='phony-key')
try:
pkg = demo.action.package_create(name='my-dataset', title='not going to work')
except ckanapi.NotAuthorized:
print 'denied'
result:
denied
A similar class is provided for accessing local CKAN instances from a plugin in the same way as remote CKAN instances. This class defaults to using the site user with full access.
import ckanapi
registry = ckanapi.LocalCKAN()
try:
registry.action.package_create(name='my-dataset', title='this will work fine')
except ckanapi.ValidationError:
print 'unless my-dataset already exists'
The RemoteCKAN class may be passed a callable to use for making requests. This allows using a different library for the request:
import ckanapi
import requests
def requests_ftw(url, data, headers):
r = requests.post(url, data, headers=headers)
return r.status_code, r.text
demo = ckanapi.RemoteCKAN('http://demo.ckan.org', request_fn=requests_ftw)
groups = demo.action.group_list(id='data-explorer')
A class is provided for making action requests to a paste.fixture.TestApp instance for use in CKAN tests:
import ckanapi
import paste.fixture
test_app = paste.fixture.TestApp(...)
demo = ckanapi.TestAppCKAN(test_app, api_key='my-test-key')
groups = demo.action.group_list(id='data-explorer')