Skip to main content

Utilities for ckan extensions.

Project description

ckantools

CKAN Python

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 first
  • keymapping: if the keys are different between this auth function and the proxy auth function, use this to rename them
  • anon: boolean, if true, apply the toolkit.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


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.3.1.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

ckantools-0.3.1-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

File details

Details for the file ckantools-0.3.1.tar.gz.

File metadata

  • Download URL: ckantools-0.3.1.tar.gz
  • Upload date:
  • Size: 23.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for ckantools-0.3.1.tar.gz
Algorithm Hash digest
SHA256 a027fb1a5807fc2e852e23d4c46f164a98a04720cc6d2fba3eaa1f51fb0729e5
MD5 09869d2e58bc2a8fd725d5e5f63cf1c4
BLAKE2b-256 9319fdbe9e345041e2cc5b77d61227f14c0dfeedcd21b147b8e129703943b310

See more details on using hashes here.

File details

Details for the file ckantools-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: ckantools-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 24.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for ckantools-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0ff156a85d2bf9cfb82baba9e48fda277e4b2664ff87caec91e4edf59af8de81
MD5 8b6097aeeeb5b22be23b0fb7e488f1aa
BLAKE2b-256 f9835ca72fba1df5774942cc2339514c0aa6d9540f130d529feb85dd675999fa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page