[ckan-dev] Custom Validator Question

Pedro G Silva pedro.gracio at deimos.com.pt
Mon Jan 4 16:46:18 UTC 2016


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20160104/edb09906/attachment-0003.html>


More information about the ckan-dev mailing list