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.1.0.tar.gz
(22.0 kB
view details)
Built Distribution
ckantools-0.1.0-py3-none-any.whl
(23.0 kB
view details)
File details
Details for the file ckantools-0.1.0.tar.gz
.
File metadata
- Download URL: ckantools-0.1.0.tar.gz
- Upload date:
- Size: 22.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e03674fe50f57e454bf5222391900a5902abb05f0facc6dee25c4ba975152111 |
|
MD5 | ce7bd020c61be545af25fec37feb0d9c |
|
BLAKE2b-256 | 8cb8038b8065d05204188b92e8c4f0e8da69565be52bfaa37289dbac9d915cde |
File details
Details for the file ckantools-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: ckantools-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.0 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 | 65a88963db54d345200e9a6f3918300a2b5c920a1709c2be15226782cbab51e4 |
|
MD5 | bac118040d1fb68baf3fae4c06a1bb52 |
|
BLAKE2b-256 | 6c0c57dcd030f60921fbc5ecc1e63589de0ac1fa844f40bdb5f1cb767c5c10f2 |