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.
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)
def example_action(parameter_1, parameter_2):
# ...
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
ckantools-0.0.7.tar.gz
(21.8 kB
view details)
Built Distribution
ckantools-0.0.7-py3-none-any.whl
(22.6 kB
view details)
File details
Details for the file ckantools-0.0.7.tar.gz
.
File metadata
- Download URL: ckantools-0.0.7.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94084239e517118639c16ab65b4012ea6e04c954c30b45b4c700995b1190c31d |
|
MD5 | adb8763d606b2faaa9f0124ff524eb1f |
|
BLAKE2b-256 | 6b63f9f736cc46355404e6ded4d6089b621ac76ef8024061ceba76e51d2cdafd |
File details
Details for the file ckantools-0.0.7-py3-none-any.whl
.
File metadata
- Download URL: ckantools-0.0.7-py3-none-any.whl
- Upload date:
- Size: 22.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9383b5073914c9b9a122048f2a09dae2f6bfdead072be6689c81255d55d90de |
|
MD5 | 2c896e5de2f0cfb3dd0253b65e90e953 |
|
BLAKE2b-256 | 8582c29fe2fcc06cdf3c681943b043567290e0bcd6f6dc4aa8ea52ac11345d77 |