在CKAN上使用LGA ESD标准的助手

ckanext-esdstandards的Python项目详细描述


https://travis-ci.org/okfn/ckanext-esdstandards.svg?branch=masterhttps://coveralls.io/repos/okfn/ckanext-esdstandards/badge.png?branch=masterLatest VersionSupported Python versionsLicense

ckanext esd标准

与ckan上lga的ESD standards一起工作的助手。

此扩展名包含:

  • 用于自动完成ESD功能和服务查找的操作函数
  • 窗体小部件和验证器,用于轻松集成ESD功能和服务字段 在自定义模式中(添加la_functionla_service字段, 当将数据集捕获到http://data.gov.uk时支持
  • 用于在数据集页上呈现ESD函数和服务的代码段。

有关详细信息,请参见Integrating it on your own extension

安装

要安装ckanext esd标准:

  1. 激活您的CKAN虚拟环境,例如:

    source /usr/lib/ckan/default/bin/activate
    
  2. 将ckanext esdstandards python包安装到虚拟环境中:

    pip install ckanext-esdstandards
    
  3. esd添加到ckan中的ckan.plugins设置 配置文件(默认情况下,配置文件位于 /etc/ckan/default/production.ini)。

  4. 通过运行以下命令填充数据库表:

    paster --plugin=ckanext-esdstandards esd initdb -c /etc/ckan/default/production.ini
    paster --plugin=ckanext-esdstandards esd load -c /etc/ckan/default/production.ini
    
  5. 重启CKAN例如,如果您在Ubuntu上使用Apache部署了CKAN:

    sudo service apache2 reload
    

在自己的扩展上集成它

默认情况下,此扩展不会向ckan实例添加任何内容(除了 从一些助手操作和函数)。您需要修改架构并 在项目扩展上添加字段和小部件的模板。

la_functionla_service字段添加到自定义架构中

您需要扩展默认的CKAN架构 使用IDatasetForm接口(如tutorial中所述)。

扩展提供了两个要使用的验证器生成的字段 应作为附加项存储名为la_functionla_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 %}

您应该会看到添加了两个新字段,与定义标记的字段类似:

http://i.imgur.com/sPqeK7q.png

在“数据集”页上添加字段值

只需在自己的扩展上扩展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传递给代码段以完全隐藏 行(如果未定义值)。

代码片段将显示如下呈现的字段:

http://i.imgur.com/0HFUwcw.png

开发安装

要安装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上注册项目 步骤:

  1. 创建项目的源分发:

    python setup.py sdist
    
  2. 注册项目:

    python setup.py register
    
  3. 将源分发上载到pypi:

    python setup.py sdist upload
    
  4. 在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,请执行以下步骤:

  1. 更新setup.py文件中的版本号。 见PEP 440 如何选择版本号。

  2. 创建新版本的源发行版:

    python setup.py sdist
    
  3. 将源分发上载到pypi:

    python setup.py sdist upload
    
  4. 在github上标记项目的新版本,版本号为 setup.py文件。例如,setup.py中的版本号是 0.0.2然后:

    git tag 0.0.2
    git push --tags
    

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从提供的列表中获取非重复值   java为什么Thymeleaf从HashMap返回字符串?   java将矩阵推到窗口的中心   java如何包含webapp_配置。txt到播放的dist-zip?   java实现产品密钥   WebSphereJava。lang.UnsupportedClassVersionError:JVMCFRE003错误的主要版本;class=org/slf4j/impl/StaticLoggerBinder,偏移量=6   使用java创建动态树结构   java为什么JVM在一次繁忙的旋转暂停后,会对同一代码块显示更多的延迟?   java无法使用distrolessdebug访问jarfile docker   java JMeter如何将多行响应数据传递给ForEach控制器请求   java空指针异常碎片活动   java改变JFileChooser的外观   性能Java位集:高效地查找所有真实位?   java可扩展的recyclerview实现