[ckan-dev] Custom Validator Question

Ian Ward ian at excess.org
Mon Jan 4 18:03:59 UTC 2016


I use IValidator when I'm planning to share validators between CKAN
extensions, or when using validation within ckanext-scheming. Your solution
of adding the function directly in your schema is perfectly fine.

Ian

On Mon, Jan 4, 2016 at 11:46 AM, Pedro G Silva <pedro.gracio at deimos.com.pt>
wrote:

> Thank you for your answer and help! I will use it as its the most correct
> way, anyway I just found out i could do
>
> schema.update({
>
>         'cloud_cover' : [ tk.get_converter('convert_to_extras'),
>                          tk.get_validator('ignore_missing'),
>                           cloud_coverage_val]
>         })
>
>
> instead of
>
> schema.update({
>         'cloud_cover' : [ tk.get_converter('convert_to_extras'),
>                          tk.get_validator('ignore_missing'),
>                           tk.get_validator('cloud_coverage_val')]
>         })
>
>
> On Mon, Jan 4, 2016 at 4:30 PM, Stefan Oderbolz <stefan.oderbolz at liip.ch>
> wrote:
>
>> Hi Pedro,
>>
>> you must implement the IValidators interface in order to use your own
>> custom validator, so this would work like that in your code:
>>
>> class ExtrafieldsPlugin(p.SingletonPlugin, tk.DefaultDatasetForm):
>>     p.implements(p.IDatasetForm)
>>     p.implements(p.IConfigurer)    p.implements(p.IValidators)
>>
>>     def get_validators(self):
>>         return { 'cloud_coverage_val': cloud_coverage_val }
>>
>>
>> Here is the corresponding documentation:
>> http://docs.ckan.org/en/latest/extensions/plugin-interfaces.html#ckan.plugins.interfaces.IValidators
>>
>> Hope this helps.
>>
>> - Stefan
>>
>>
>> On Mon, Jan 4, 2016 at 5:05 PM, Pedro G Silva <pedro.gracio at deimos.com.pt
>> > wrote:
>>
>>> Hi
>>>
>>> Im trying to construct my own validator using
>>> http://docs.ckan.org/en/latest/extensions/adding-custom-fields.html#custom-validators
>>>  trying to do no. 5. a callable object taking two parameters
>>> validator(value, context). When trying to use it I get an error:
>>> UnknownValidator: Validator `cloud_coverage_val` does not exist
>>>
>>> Any ideas why? I also tried option no1 wuth no success.
>>> I have the following code:
>>>
>>> import ckan.plugins as p
>>> import ckan.plugins.toolkit as tk
>>>
>>> from ckan.plugins.toolkit import Invalid
>>> def cloud_coverage_val(value, context):
>>>     if not value.isdigit():
>>>         raise Invalid("Invalid cloud coverage value, must be number between 0.0 and 100.0")
>>>     return float(value)
>>>
>>> class ExtrafieldsPlugin(p.SingletonPlugin, tk.DefaultDatasetForm):
>>>     p.implements(p.IDatasetForm)
>>>     #########
>>>     p.implements(p.IConfigurer)
>>>
>>>     # IConfigurer
>>>     def update_config(self, config_):
>>>         tk.add_template_directory(config_, 'templates')
>>>         tk.add_public_directory(config_, 'public')
>>>         tk.add_resource('fanstatic', 'extrafields')
>>>
>>>
>>> *[OMITTED CODE]*
>>>
>>>     def show_package_schema(self):
>>>         schema = super(ExtrafieldsPlugin, self).show_package_schema()
>>>
>>>         # Add our custom_text field to the dataset schema.
>>>         # schema.update({
>>>         #     'CloudCover': [tk.get_converter('convert_from_extras'),
>>>         #                     tk.get_validator('ignore_missing')]
>>>         # })
>>>
>>>         schema.update({
>>>                 'cloud_cover' : [ tk.get_converter('convert_from_extras'),
>>>                                  tk.get_validator('ignore_missing'),
>>>                                   tk.get_validator('cloud_coverage_val')]
>>>             })
>>>
>>>         schema['resources'].update({
>>>                 'cloud_cover_resource' : [ tk.get_validator('ignore_missing') ]
>>>             })
>>>         return schema
>>>
>>> --
>>>
>>>
>>> [image: DEIMOS Engenharia, SA] <http://www.deimos.pt>
>>> *Pedro Gracio Silva*
>>> Aerospace Systems / Production Center
>>>
>>> *Av. D. Joao II, Lt 1.17.01, 10 • 1998-023 Lisboa, Portugal*
>>> Ph: +351 21 893 3020 • Fax: +351 21 896 9099
>>>
>>>
>>> _______________________________________________
>>> ckan-dev mailing list
>>> ckan-dev at lists.okfn.org
>>> https://lists.okfn.org/mailman/listinfo/ckan-dev
>>> Unsubscribe: https://lists.okfn.org/mailman/options/ckan-dev
>>>
>>>
>>
>>
>> --
>> Liip AG  // Limmatstrasse 183 //  CH-8005 Zürich
>> Tel +41 43 500 39 80 // GnuPG 0x7B588C67 // www.liip.ch
>>
>
>
>
> --
>
>
> [image: DEIMOS Engenharia, SA] <http://www.deimos.pt>
> *Pedro Gracio Silva*
> Aerospace Systems / Production Center
>
> *Av. D. Joao II, Lt 1.17.01, 10 • 1998-023 Lisboa, Portugal*
> Ph: +351 21 893 3020 • Fax: +351 21 896 9099
>
>
> _______________________________________________
> ckan-dev mailing list
> ckan-dev at lists.okfn.org
> https://lists.okfn.org/mailman/listinfo/ckan-dev
> Unsubscribe: https://lists.okfn.org/mailman/options/ckan-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20160104/3d417708/attachment-0003.html>


More information about the ckan-dev mailing list