Hi,

The z3c.form doctests make it look like raising zope.interface.Invalid() 
would be an acceptable thing for a validator to do. It also makes it 
look like the argument passed to the Invalid() constructor is a string 
that would be displayed as an error message.

However, when I do this (in a constraint or a IValidator adapter), the 
exception is not caught, and so causes a traceback. In field.py, we have::

           try:
                 widget.setErrors = self.setErrors
                 raw = widget.extract()
                 if raw is not interfaces.NO_VALUE:
                     value = 
interfaces.IDataConverter(widget).toFieldValue(raw)
                 zope.component.getMultiAdapter(
                     (self.content,
                      self.request,
                      self.form,
                      getattr(widget, 'field', None),
                      widget),
                     interfaces.IValidator).validate(value)
             except (zope.schema.ValidationError,
                     ValueError, MultipleErrors), error:
                 view = zope.component.getMultiAdapter(
                     (error, self.request, widget, widget.field,
                      self.form, self.content), 
interfaces.IErrorViewSnippet)
                 view.update()
                 if self.setErrors:
                     widget.error = view
                 errors += (view,)

And indeed, this doesn't catch Invalid. In error.py, on the other hand, 
there is an InvalidErrorViewSnippet.

Is this intentional?

Martin

-- 
Author of `Professional Plone Development`, a book for developers who
want to work with Plone. See http://martinaspeli.net/plone-book

_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )

Reply via email to