CKAN Client: Python SDK
CKAN 3 SDK for CKAN instances with CKAN v3 style cloud storage.
This SDK will communicate with ckanext-authz-service
(using CKAN to provide authorization tokens for other related systems) and Giftless (a highly customizable and extensible Git LFS server implemented in Python) to upload data to blob storage.
Read more about it's design.
Install
Install it from the Python Package Index:
$ pip install ckan-client
Usage
ckanclient.Client
Arguments:
Name | Description |
---|
api_url | CKAN API key |
api_key | CKAN instance URL |
organization | Organization |
dataset_id | Dataset id |
lfs_url | Git LFS URL |
Example:
from ckanclient import Client
client = Client(
'771a05ad-af90-4a70-beea-cbb050059e14',
'http://localhost:5000',
'datopian',
'dailyprices',
'http://localhost:9419',
)
These settings matches the standard of ckanext-blob-storage
development environment, but you still need to create the user and organization there.
ckanclient.Client.action
Arguments:
Name | Type | Default | Description |
---|
name | str | (required) | The action name, for example, site_read , package_show … |
payload | dict | (required) | The payload being sent to CKAN. If a payload is provided for a GET request, it will be converted to URL parameters and each key will be converted to snake case. |
http_get | bool | False | Optional, if True will make GET request, otherwise POST . |
transform_payload | function | None | Function to mutate the payload before making the request (useful to convert to and from CKAN and Frictionless formats). |
transform_response | function | None | function to mutate the response data before returning it (useful to convert to and from CKAN and Frictionless formats). |
This method is used internally by the following methods.
ckanclient.Client.create
Arguments:
Name | Type | Description |
---|
dataset_name_or_metadata | str or dict | It is either a string being a valid dataset name or dictionary with meta-data for the dataset in Frictionless format. |
Example:
dataset = client.create('dailyprices')
ckanclient.Client.push
Arguments:
Name | Type | Description |
---|
dataset_metadata | dict | Dataset meta-data in Frictionless format. |
Example:
dataset_metadata = {
'id': '16d6e8d7-a848-48b1-91d0-fd393c1c6c01',
'name': 'dailyprices',
'owner_org': '57f97769-a982-4ccd-91f0-1d86dee822e3',
'title': 'dailyprices',
'type': 'dataset',
'contributors': [],
}
dataset = client.push(dataset_metadata)
ckanclient.Client.retrieve
Arguments:
Name | Type | Description |
---|
name_or_id | str | Id or name of the dataset. |
Example:
dataset = client.retrieve('dailyprices')
ckanclient.Client.push_blob
Arguments:
Name | Type | Description |
---|
resource | dict | A Frictionless resource. |
Development
All you need is Git, and Python 3.6+ with a PEP 527 compliant tool, such as Poetry.
First, clone this repository:
$ git clone https://github.com/datopian/ckan-client-py.git
Then, move to is directory:
$ cd ckan-client-py
And install the package and its dependencies, for example, with Poetry:
$ poetry install
To run tests:
$ poetry run pytest
License
This project is licensed under the MIT License - see the LICENSE file for details