我需要在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_schema
和中都很重要show_package_schema
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句