Hello,

recently I started working with Zope3 and z3c.form.
The figures in the form should be checked, for instance that the first name and 
the surname are not identical.
Therefore I write an invariant-check:

class IAddress(zope.interface.Interface):
   """Address Interface"""

   firstname = zope.schema.TextLine(
       title=u'firstname',
       description=u'')
   surname = zope.schema.TextLine(
       title=u'name',
       description=u'')

   @zope.interface.invariant
   def areEqual( address ):
       if address.firstname == address.surname:
           raise zope.interface.Invalid(u"first name and surname are same")

I was expecting that the error would be shown in the form.
Unfortunately, zope canceled the  action:
File 
"buildout-eggs/zope.app.pagetemplate-3.4.0b1dev_r75616-py2.4.egg/zope/app/pagetemplate/engine.py",
 line 68, in __call__
  request=request)
File 
"buildout-eggs/zope.traversing-3.4.0a1-py2.4.egg/zope/traversing/adapters.py", 
line 164, in traversePathElement
  return traversable.traverse(nm, further_path)
 - __traceback_info__: (<zope.interface.exceptions.Invalid instance at 
0x2aaab13cf7a0>, 'widget')
File 
"buildout-eggs/zope.traversing-3.4.0a1-py2.4.egg/zope/traversing/adapters.py", 
line 49, in traverse
  return subject[name]
 - __traceback_info__: (<zope.interface.exceptions.Invalid instance at 
0x2aaab13cf7a0>, 'widget', ['label'])
TypeError: tuple indices must be integers

With the pdb you can see that the method traverse (in adapters.py) is executed 
twice with name='widget' and name='label':




Second try with own validator:

class
AddressValidator(z3c.form.validator.InvariantsValidator):
   def validateObject(self, obj):
       import pdb; pdb.set_trace()
       errors = super(AddressValidator,
self).validateObject(obj)
       if obj.firstname == obj.surname:
           errors += (zope.interface.Invalid('Firstname and Surname can not be 
equals.'),)
       return errors

configure.zcml: <adapter factory=".interfaces.AddressValidator"/>

If I try with the same figure twice, then Zope cancels the action same as above.

What should I do in order to get the error message correctly shown in the form?

Thanks a lot,
Peter

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to