[Zope3-Users] Validation of schemas?
adam at 4js.com.au
Thu Nov 3 08:09:37 EST 2005
Thanks for the help so far. Using schemas I can do the following:
"""Provides access to basic buddy information"""
fullname = TextLine(title=_("Name"))
email = TextLine(title=_("Email Address"), required=False)
phone = TextLine(title=_("Phone Contact"), required=False)
raise zope.interface.Invalid("Names cannot start with Z")
if ob.email is None and ob.phone is None:
raise zope.interface.Invalid("Email and Phone cannot
both be None")
def __init__(self,fullname=None, email=None, phone=None):
self.fullname = fullname
self.email = email
self.phone = phone
This will do the validation on add. But how do I get the schema to be
validated on an
update to it?
One way I can see is to have update method with named parameters (which
does the validation at the end of the method), but then (I think) I lose
the ability to have a <browser:editform> directive to generate the html
form based on the schema for free.
Thanks in advance,
gnotari at linkgroup.it wrote:
>zope3-users-bounces at zope.org wrote on 31/10/2005 06.12.43:
>>Just added this to FAQ (http://zissue.berlios.de/z3/z3faq.html).
>>I expects more contribution in coming months.
>>How to validate two or more fields simultaneously?
>>Use `invariants` to control more fields.
>>Look at zope.interface/README.txt for details.
>>Let's consider this more specific question asked to list:
>> How do I implement a validation rule that says either email or phone
>> have to exist, but not necissarily both.
>> Using the buddy demo as an example, with the following interface::
>> class IBuddy(zope.interface.Interface):
>> """Provides access to basic buddy information"""
>> fullname = TextLine(title=_("Name"))
>> email = TextLine(title=_("Email Address"))
>> phone = TextLine(title=_("Phone Contact"))
>>First we have to make a callable object, either a simple function or
>>callable instance of a class::
>> def contacts_invariant(obj):
>> if not (obj.email or obj.phone):
>> raise Exception("At least one contact info is rquired")
>>Now use `validateInvariants` method of the interface to validate::
>> buddy = Buddy()
>> buddy.email = u"user.id at some.address.com"
>What I would want to be further explained is: When should I call
>Of course I would call it when I'm creating or editing the object. Then,
>frequently, just after an add or edit form.
>More: can I then use auto generated forms (by using events after the form,
>but how?), or I just have do define a custom form?
>And then: what do I do if the validation falils? How do I return the form,
>possibly with an error message?
>I feel these are genuine FAQs, and I still don't have answers for many of
>them. Working through them at a steday pace, though ;)
>Thanks for all your help, really.
>Zope3-users mailing list
>Zope3-users at zope.org
More information about the Zope3-users