Error in the documentation for validators.FormValidator

James Brotchie <[email protected]> Thu, 10 Dec 2009 12:35:26 +1000
Newsgroups gmane.comp.python.formencode
Message-ID <[email protected]>
Hi,

The docstring for FromValidator in validators.py states:

   The important method is .validate(), of course.  It gets passed a
   dictionary of the (processed) values from the form.  If you have
   .validate_partial_form set to True, then it will get the incomplete
   values as well -- use .has_key() to test if the field was able to
   process any particular field.

   Anyway, .validate() should return a string or a dictionary.  If a
   string, it's an error message that applies to the whole form.  If
   not, then it should be a dictionary of fieldName: errorMessage.
   The special key "form" is the error message for the form as a whole
   (i.e., a string is equivalent to {"form": string}).

Naively I create a class derived from FormValidator to use as in the
chained_validators of a schema.

   class SpamCriteriaFormValidator(FormValidator):
       def validate(self, data, state):
           if data['not'] == True and data['spf'] == 'all':
               return {'not' : 'Must be off when spf is all',
                       'spf' : 'Cannot be all when not is on'}
           return None

This validate method conforms to the interface described in the
FormValidator's docstring. It turns out that validate is never called.

I poked around a fresh svn checkout of formencode and it looks like
that the validate method isn't defined or called anywhere within the
FormValidator -> FancyValidator -> Validator inheritance chain. I
ended up overriding the _to_python method and doing my validation
there.

Does this mean the docstring for FormValidator is incorrect and the
validate method is now deprecated?

Cheers,
James Brotchie

------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev