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.6.tar.gz
(21.7 kB
view details)
Built Distribution
ckantools-0.0.6-py3-none-any.whl
(22.6 kB
view details)
File details
Details for the file ckantools-0.0.6.tar.gz
.
File metadata
- Download URL: ckantools-0.0.6.tar.gz
- Upload date:
- Size: 21.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb5d0e8dbb07e54e60f4fff6b5b211c41cfb315d0ed0571114b3ecb2168ae576 |
|
MD5 | 23fba0e5a8705faa5b25b1593b1c112e |
|
BLAKE2b-256 | 67909599dc7503117249e1824c93401f2ff2929a82f81141b9ee5247a7a97d03 |
File details
Details for the file ckantools-0.0.6-py3-none-any.whl
.
File metadata
- Download URL: ckantools-0.0.6-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 | 94d54bfe6647df9bb5590083e36e2f617356f216d22a7f5616d478ccf03b55a5 |
|
MD5 | ae6eba93f493a410645f1153ead75521 |
|
BLAKE2b-256 | d7557ad7baca62bf11dce4c67d4fc35e1bb2fc9f975fd5217477de3f609e247f |