A CKAN extension is a Python package that modifies or extends CKAN.
. /usr/lib/ckan/default/bin/activate
cd /usr/lib/ckan/default/src
paster --plugin=ckan create
-t ckanext
ckanext-iauthfunctions
(all on one line)
ckanext-iauthfunctions/
ckanext/
__init__.py
iauthfunctions/
__init__.py
ckanext_iauthfunctions.egg-info/
...
setup.py
Each extension contains
one or more plugins that
provide the extension’s features.
ckanext-iauthfunctions/
ckanext/
__init__.py
iauthfunctions/
__init__.py
plugin.py
ckanext_iauthfunctions.egg-info/
setup.py
import ckan.plugins as plugins
class ExampleIAuthFunctionsPlugin(plugins.SingletonPlugin):
pass
ckanext-iauthfunctions/
ckanext/
__init__.py
iauthfunctions/
__init__.py
plugin.py
ckanext_iauthfunctions.egg-info/
setup.py
entry_points='''
[ckan.plugins]
iauthfunctions=ckanext.iauthfunctions.plugin:ExampleIAuthFunctionsPlugin
''',
. /usr/lib/ckan/default/bin/activate
cd /usr/lib/ckan/default/src/ckanext-iauthfunctions
python setup.py develop
ckan.plugins = stats text_preview recline_preview iauthfunctions
paster serve /etc/ckan/default/development.ini
Starting server in PID 13961.
serving on 0.0.0.0:5000 view at http://127.0.0.1:5000
import ckan.plugins as plugins
class IAuthFunctions(Interface):
'''Override CKAN's authorization functions, or add new ones.'''
def get_auth_functions(self):
'''Return the authorization functions provided by this plugin.
Return a dictionary mapping authorization function names
(strings) to functions. For example::
{'user_create': my_custom_user_create_function,
'group_create': my_custom_group_create}
'''
ckanext-iauthfunctions/
ckanext/
__init__.py
iauthfunctions/
__init__.py
plugin.py
ckanext_iauthfunctions.egg-info/
setup.py
import ckan.plugins as plugins
def group_create(context, data_dict=None):
return {'success': False,
'msg': 'No one can create groups'}
class ExampleIAuthFunctionsPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IAuthFunctions, inherit=False)
def get_auth_functions(self):
return {'group_create': group_create}
import ckan.plugins.toolkit as toolkit
def group_create(context, data_dict=None):
user_name = context['user']
member_list = toolkit.get_action('member_list')
members = member_list(
data_dict={'id': 'curators', 'object_type': 'user'})
member_ids = [member_tuple[0] for member_tuple in members]
context['session'] = context['model'].Session
convert_user_name_or_id_to_id = toolkit.get_converter(
'convert_user_name_or_id_to_id')
usr_id = convert_user_name_or_id_to_id(user_name, context)
if usr_id in member_ids:
return {'success': True}
else:
return {'success': False,
'msg': 'Only curators can create groups'}
{
"user": "seanh",
}
{'description': u'A really cool group',
'image_url': u'',
'name': u'my_group',
'title': u'My Group',
'type': 'group',
'users': [{'capacity': 'admin',
'name': u'seanh'}]}