Utilities for ckan extensions.
Project description
ckantools
Utilities and common methods for CKAN extensions.
Overview
A collection of methods, decorators, and anything else that might be useful.
ckantools is still very much in development, and is prone to frequent changes that may or may not work.
Installation
pip install ckantools
Usage
Actions
Use the @action
decorator to add actions:
# logic/actions/module_name.py
from ckantools.decorators import action
schema = {
'parameter_1': [not_missing, str],
'parameter_2': [ignore_missing, int_validator]
}
helptext = 'This action only exists as an example, so does not actually anything.'
@action(schema, helptext, get=False, other_decorator_1, other_decorator_2)
def example_action(parameter_1, parameter_2):
# ...
Or the @basic_action
decorator if you want to load the action but don't want any of the other features (schema loading, auto auth, etc):
from ckantools.decorators import basic_action
@basic_action
@toolkit.chained_action
def example_action(next_func, context, data_dict):
# ...
And then load the action(s) in plugin.py
:
# plugin.py
from .logic.actions import module_name
from ckantools.loaders import create_actions
from ckan.plugins import implements, interfaces, SingletonPlugin
class ExamplePlugin(SingletonPlugin):
implements(interfaces.IActions)
# IActions
def get_actions(self):
return create_actions(module_name)
Main benefits to using the decorator:
- automatically calls relevant auth function
- injects items defined in schema as function args
- allows you to define long or complex schemas and helptexts without cluttering up code and/or affecting readability
- neater and easier to maintain than having to list out all of the actions you want to load, e.g.
## IActions def get_actions(self): return { 'example_action': module_name.example_action, 'other_action': module_name.other_action, 'other_other_action': module_name.other_other_action, # etc }
Auth
Loading auth functions is similar to actions, i.e. use the @auth
decorator.
The decorator has three args, all of which are optional:
proxy
: the name of an existing auth function to call that function firstkeymapping
: if the keys are different between this auth function and the proxy auth function, use this to rename themanon
: boolean, if true, apply thetoolkit.auth_allow_anonymous_access
decorator.
# logic/auth/module_name.py
from ckantools.decorators import auth
# all of the args are optional
@auth(anon=True)
def example_action(context, data_dict):
# no proxy
# anonymous access is allowed
# then the custom auth logic:
return {'success': data_dict.get('parameter_2') == 'carrots'}
# with args
@auth('example_action', {'param_1': 'parameter_2'})
def other_action(context, data_dict):
# checks access to example_action first
# the arg param_1 from this action is the same as parameter_2 in example_action (not all args/parameters have to be mapped, just the relevant ones)
# anonymous access is not allowed
# if it passes all that:
return {'success': True}
The auth functions can then be loaded in plugin.py
:
# plugin.py
from .logic.auth import module_name
from ckantools.loaders import create_auth
from ckan.plugins import implements, interfaces, SingletonPlugin
class ExamplePlugin(SingletonPlugin):
implements(interfaces.IActions)
# IAuthFunctions
def get_auth_functions(self):
return create_auth(module_name)
Main benefits to using the decorator:
- reduces repetition of complex auth logic
- as with the action decorator, it's neater and easier to maintain than having to list out all of the auth functions to load
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ckantools-0.3.2.tar.gz
.
File metadata
- Download URL: ckantools-0.3.2.tar.gz
- Upload date:
- Size: 23.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0593bd28054306065a2d2a07db061f3c562738e4673bae7c4579f4073557c558 |
|
MD5 | 7d39bdd4510f4602ea2f2fa07196129c |
|
BLAKE2b-256 | 490207b4ced2562f01c179da35ce705533b2e3241815ef975b5696561ed34546 |
File details
Details for the file ckantools-0.3.2-py3-none-any.whl
.
File metadata
- Download URL: ckantools-0.3.2-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c19c4b560dd383391f03b93643f0a3530923a6b78eb4cfffbb45e879b03e1750 |
|
MD5 | 6ac855e6a7b37bdd0ba81474694411dc |
|
BLAKE2b-256 | 856e1f4722b9edbc00ccf8fbf9bfd1740a10590db2a2e93a59d923636cc6519a |