Python 如何在CKAN 2.2中定义自定义验证器

Python 如何在CKAN 2.2中定义自定义验证器,python,validation,ckan,Python,Validation,Ckan,我需要在CKAN 2.2的扩展中为日期定义一个新的验证器。IValidators接口不工作。您能帮我吗?目前有可供定制验证器使用的验证器。下面是一个使用原型的自定义日期字符串验证器的示例,该原型采用文档链接中的两个参数选项5。此类型必须返回字段的最终值。相反,它能够在存储前更改该值: import ckan.plugins as plugins import ckan.plugins.toolkit as tk from ckan.plugins.toolkit import Invalid

我需要在CKAN 2.2的扩展中为日期定义一个新的验证器。IValidators接口不工作。您能帮我吗?

目前有可供定制验证器使用的验证器。下面是一个使用原型的自定义日期字符串验证器的示例,该原型采用文档链接中的两个参数选项5。此类型必须返回字段的最终值。相反,它能够在存储前更改该值:

import ckan.plugins as plugins
import ckan.plugins.toolkit as tk  
from ckan.plugins.toolkit import Invalid

def date_str_validator(value, context):
    valid_date = tk.get_validator('isodate')(value, context)
    if not valid_date or not isinstance(valid_date, datetime.datetime):
        raise Invalid("Invalid date")
    return value

class MyPlugin(plugins.SingletonPlugin, tk.DefaultDatasetForm):

    plugins.implements(plugins.IDatasetForm, inherit=False)

    def _modify_package_schema(self, schema):
        schema.update({
            # Custom extras
            'origination_date':[tk.get_validator('ignore_missing'),
                                date_str_validator,
                                tk.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()

        schema.update({
            # Custom extras
            'origination_date':[tk.get_converter('convert_from_extras'),
                                tk.get_validator('ignore_missing'),
                                date_str_validator]
        })

        return schema

请注意,验证器和转换器是按顺序调用的,因此此处显示的顺序在_modify_package_模式和show_package_模式中都很重要。

验证器的顺序是否会影响表单提交上显示验证错误的顺序?根据我的经验,似乎不是这样。我试图找出如何使验证错误以与页面上显示的字段相同的顺序出现,这些字段是自定义字段和默认字段的混合。