This CKAN extension adds support for different versions of a dataset. Sometimes is is desirable to store and display together different versions of a dataset, for example a daily situation report-style map during a humanitarian crisis.
This plugin provides an action dataset_version_create
, for example:
toolkit.get_action('dataset_version_create')( context, { 'id': dataset['id'], 'base_name': base_name, 'owner_org': owner_org } )
The plugin models dataset versions internally by creating a parent dataset, with minimal metadata and no resources. A child dataset is created for each version.
dataset_version_create
will create a parent-child relationship between the
dataset specified by base_name
and that specified by id
. If the dataset
specified by base_name
does not exist, it will be created.
Note that this plugin overrides CKAN's package_show
action. The original
package_show
is made available as ckan_package_show
.
For datasets with different versions, the overridden package_show
will
return:
- The latest, public, active version of the dataset if the parent name or id is specified
- A specific version of the dataset if the child name or id is specified
The version ordering is determined by the integer value of version
in the
dataset metadata.
In addition, package_show
will return a list of the names and URLs of all
active versions as _versions
in the dictionary.
The plugin provides templates to list versions of a dataset alongside that currently viewed and to warn the user if they are looking at an old version of a dataset.
This plugin will not work 'out of the box'. You will need to write code to call
the dataset_version_create
action. A site-specific example is available at
https://github.com/aptivate/ckanext-mapactionimporter
This is known to work with CKAN 2.5.2, though note there are problems when purging datasets with relationships. See:
To install ckanext-datasetversions:
Activate your CKAN virtual environment, for example:
. /usr/lib/ckan/default/bin/activate
Install the ckanext-datasetversions Python package into your virtual environment:
pip install ckanext-datasetversions
Add
datasetversions
to theckan.plugins
setting in your CKAN config file (by default the config file is located at/etc/ckan/default/production.ini
).Restart CKAN. For example if you've deployed CKAN with Apache on Ubuntu:
sudo service apache2 reload
None
To install ckanext-datasetversions for development, activate your CKAN virtualenv and do:
git clone https://github.com/aptivate/ckanext-datasetversions.git cd ckanext-datasetversions python setup.py develop pip install -r dev-requirements.txt
To run the tests, do:
nosetests --nologcapture --with-pylons=test.ini
To run the tests and produce a coverage report, first make sure you have
coverage installed in your virtualenv (pip install coverage
) then run:
nosetests --nologcapture --with-pylons=test.ini --with-coverage --cover-package=ckanext.datasetversions --cover-inclusive --cover-erase --cover-tests
ckanext-datasetversions should be availabe on PyPI as https://pypi.python.org/pypi/ckanext-datasetversions. If that link doesn't work, then you can register the project on PyPI for the first time by following these steps:
Create a source distribution of the project:
python setup.py sdist
Register the project:
python setup.py register
Upload the source distribution to PyPI:
python setup.py sdist upload
Tag the first release of the project on GitHub with the version number from the
setup.py
file. For example if the version number insetup.py
is 0.0.1 then do:git tag 0.0.1 git push --tags
ckanext-datasetversions is availabe on PyPI as https://pypi.python.org/pypi/ckanext-datasetversions. To publish a new version to PyPI follow these steps:
Update the version number in the
setup.py
file. See PEP 440 for how to choose version numbers.Create a source distribution of the new version:
python setup.py sdist
Upload the source distribution to PyPI:
python setup.py sdist upload
Tag the new release of the project on GitHub with the version number from the
setup.py
file. For example if the version number insetup.py
is 0.0.2 then do:git tag 0.0.2 git push --tags
Copyright (c) 2016 MapAction. Developed by Aptivate.
Development of v1 of this plugin was funded by ECHO.