在CKAN上使用LGA ESD标准的助手
ckanext-esdstandards的Python项目详细描述
ckanext esd标准
与ckan上lga的ESD standards一起工作的助手。
此扩展名包含:
- 用于自动完成ESD功能和服务查找的操作函数
- 窗体小部件和验证器,用于轻松集成ESD功能和服务字段 在自定义模式中(添加la_function和la_service字段, 当将数据集捕获到http://data.gov.uk时支持
- 用于在数据集页上呈现ESD函数和服务的代码段。
有关详细信息,请参见Integrating it on your own extension
安装
要安装ckanext esd标准:
激活您的CKAN虚拟环境,例如:
source /usr/lib/ckan/default/bin/activate
将ckanext esdstandards python包安装到虚拟环境中:
pip install ckanext-esdstandards
将esd添加到ckan中的ckan.plugins设置 配置文件(默认情况下,配置文件位于 /etc/ckan/default/production.ini)。
通过运行以下命令填充数据库表:
paster --plugin=ckanext-esdstandards esd initdb -c /etc/ckan/default/production.ini paster --plugin=ckanext-esdstandards esd load -c /etc/ckan/default/production.ini
重启CKAN例如,如果您在Ubuntu上使用Apache部署了CKAN:
sudo service apache2 reload
在自己的扩展上集成它
默认情况下,此扩展不会向ckan实例添加任何内容(除了 从一些助手操作和函数)。您需要修改架构并 在项目扩展上添加字段和小部件的模板。
将la_function和la_service字段添加到自定义架构中
您需要扩展默认的CKAN架构 使用IDatasetForm接口(如tutorial中所述)。
扩展提供了两个要使用的验证器生成的字段 应作为附加项存储名为la_function和la_service (根据data.gov.uk harvesting guide的附录B)
这个片段应该很容易理解(note:这假设CKAN>;=2.3):
import ckan.plugins as plugins import ckan.plugins.toolkit as toolkit class MyPlugin(plugins.SingletonPlugin, toolkit.DefaultDatasetForm): plugins.implements(plugins.IDatasetForm) # IDatasetForm def _modify_package_schema(self, schema): schema.update({ 'la_function': [toolkit.get_validator('ignore_missing'), toolkit.get_validator('esd_function_validator'), toolkit.get_converter('convert_to_extras')], 'la_service': [toolkit.get_validator('ignore_missing'), toolkit.get_validator('esd_service_validator'), toolkit.get_converter('convert_to_extras')], }) return schema def create_package_schema(self): schema = super(MyPlugin, self).create_package_schema() schema = self._modify_package_schema(schema) return schema def update_package_schema(self): schema = super(MyPlugin, self).update_package_schema() schema = self._modify_package_schema(schema) return schema def show_package_schema(self): schema = super(MyPlugin, self).show_package_schema() default_validators = [toolkit.get_converter('convert_from_extras'), toolkit.get_validator('ignore_missing')] schema.update({ 'la_function': default_validators, 'la_service': default_validators, }) return schema
对于低于2.3的ckan版本,需要显式导入验证器:
import ckan.plugins as plugins import ckan.plugins.toolkit as toolkit from ckanext.esdstandards.validators import (esd_function_validator, esd_service_validator) class MyPlugin(plugins.SingletonPlugin, toolkit.DefaultDatasetForm): plugins.implements(plugins.IDatasetForm) # IDatasetForm def _modify_package_schema(self, schema): schema.update({ 'la_function': [toolkit.get_validator('ignore_missing'), esd_function_validator, toolkit.get_converter('convert_to_extras')], 'la_service': [toolkit.get_validator('ignore_missing'), esd_service_validator, toolkit.get_converter('convert_to_extras')], }) return schema def create_package_schema(self): schema = super(MyPlugin, self).create_package_schema() schema = self._modify_package_schema(schema) return schema def update_package_schema(self): schema = super(MyPlugin, self).update_package_schema() schema = self._modify_package_schema(schema) return schema def show_package_schema(self): schema = super(MyPlugin, self).show_package_schema() default_validators = [toolkit.get_converter('convert_from_extras'), toolkit.get_validator('ignore_missing')] schema.update({ 'la_function': default_validators, 'la_service': default_validators, }) return schema
将函数和服务字段添加到数据集窗体中
扩展提供了两个令人垂涎的片段,它们将添加所有必需的 模板的标记和脚本您需要扩展package_basic_fields.html 在您自己的扩展上使用以下模板:
# ckanext-yourext/ckanext/yourext/templates/package/snippets/package_basic_fields.html {% ckan_extends %} {% block package_basic_fields_custom %} {% snippet 'snippets/esd_functions.html', data=data, errors=errors %} {% snippet 'snippets/esd_services.html', data=data, errors=errors %} {% endblock %}
您应该会看到添加了两个新字段,与定义标记的字段类似:
在“数据集”页上添加字段值
只需在自己的扩展上扩展additional_info.html模板,如下所示:
# ckanext-yourext/ckanext/yourext/templates/package/snippets/additional_info.html {% ckan_extends %} {% block extras %} {{ super() }} {% snippet 'snippets/esd_functions_additional_info.html', data=pkg_dict %} {% snippet 'snippets/esd_services_additional_info.html', data=pkg_dict %} {% endblock %}
您可以将display_row_if_missing=False传递给代码段以完全隐藏 行(如果未定义值)。
代码片段将显示如下呈现的字段:
开发安装
要安装ckanext esd开发标准,请激活ckan virtualenv并 做:
git clone https://github.com/okfn/ckanext-esdstandards.git cd ckanext-esdstandards python setup.py develop
运行测试
要运行测试,请执行:
nosetests --nologcapture --ckan --with-pylons=test.ini
在pypi上注册ckanext esd标准
PyPI上应提供ckanext esd标准 https://pypi.python.org/pypi/ckanext-esdstandards如果链接不起作用,那么 您可以按照以下步骤第一次在pypi上注册项目 步骤:
创建项目的源分发:
python setup.py sdist
注册项目:
python setup.py register
将源分发上载到pypi:
python setup.py sdist upload
在GitHub上标记项目的第一个版本,版本号为 setup.py文件。例如,setup.py中的版本号是 0.0.1然后执行:
git tag 0.0.1 git push --tags
发布新版本的ckanext esd标准
ckanext esd标准作为https://pypi.python.org/pypi/ckanext-esdstandards在PyPI上可用。 要将新版本发布到pypi,请执行以下步骤:
更新setup.py文件中的版本号。 见PEP 440 如何选择版本号。
创建新版本的源发行版:
python setup.py sdist
将源分发上载到pypi:
python setup.py sdist upload
在github上标记项目的新版本,版本号为 setup.py文件。例如,setup.py中的版本号是 0.0.2然后:
git tag 0.0.2 git push --tags