[Zope3-Users] Formlib and invariants?

mats.nordgren mats at ronin-group.org
Thu May 4 10:26:30 EDT 2006


Bernd,

That took care of it.  Thanks a million.

Mats

On Thu, 4 May 2006 05:51:52 +0200, Bernd Dorn wrote
> yes, this should really be fixed up in the default implementation of 
>  formlib
> 
> because interface.Invalid has no registered multiadapter to
>   zope.app.form.browser.interfaces.IWidgetInputErrorView
> 
> you have to raise a WidgetInputError
> 
> an example for such an error:
> 
> from zope.schema import Datetime,Bool,ValidationError
> from zope.app.form.interfaces import IWidgetInputError
> 
> class FromGreaterThanTo(ValidationError):
>      u"""From-Date is after To-Date"""
> 
>      # this is needed to adapt to a view for formlib
>      implements(IWidgetInputError)
> 
> On 03.05.2006, at 20:59, mats.nordgren wrote:
> 
> > I'm trying to do a join form with formlib and are getting errors  
> > when checking
> > invariants.
> >
> > I have my form interface IJoinForm
> >
> > class IJoinForm(Interface):
> >     """a join form"""
> >
> >     username = schema.TextLine(
> >         title=_('User Name'),
> >         required=True)
> >     password = schema.Password(
> >         title=_('Password'))
> >     password_check = schema.Password(
> >         title=_('Enter Password Again'))
> >     title = schema.TextLine(
> >         title=_('Title'))
> >
> >     @invariant
> >     def checkPasswords(obj):
> >         if obj.password != obj.password_check:
> >             raise Invalid("Passwords do not match")
> >
> > And then I have my implementation of form.Form:
> >
> > class JoinMetroSite(form.Form):
> >     form_fields = form.Fields(IJoinForm)
> >
> >     @form.action('Join')
> >     def handle_join_action(self, action, data):
> >         principal_folder = zapi.getUtility(IAuthenticatorPlugin,  
> > 'principal')
> >         principal = InternalPrincipal(data['username'], data 
> > ['password'],
> > data['title'])
> >         principal_folder[data['username']] = principal
> >
> > My form in registered with:
> >
> > <page
> >         for="*"
> >         class=".metrositeforms.JoinMetroSite"
> >         name="join.html"
> >         permission="zope.View"
> >         menu="zmi_views" title="Join" />
> >
> > When I try the join.html form I get the following error:
> >
> > Traceback (innermost last):
> >   Module zope.publisher.publish, line 138, in publish
> >     result = publication.callObject(request, object)
> >   Module zope.app.publication.zopepublication, line 161, in callObject
> >     return mapply(ob, request.getPositionalArguments(), request)
> >   Module zope.publisher.publish, line 113, in mapply
> >     return debug_call(object, args)
> >    - __traceback_info__: <security proxied
> > zope.app.publisher.browser.viewmeta.JoinMetroSite instance at  
> > 0x034C9B50>
> >   Module zope.publisher.publish, line 119, in debug_call
> >     return object(*args)
> >   Module zope.formlib.form, line 739, in __call__
> >     return self.render()
> >   Module zope.formlib.form, line 733, in render
> >     self.form_result = self.template()
> >   Module zope.app.pagetemplate.viewpagetemplatefile, line 83, in  
> > __call__
> >     return self.im_func(im_self, *args, **kw)
> >   Module zope.app.pagetemplate.viewpagetemplatefile, line 51, in  
> > __call__
> >     sourceAnnotations=getattr(debug_flags, 'sourceAnnotations', 0),
> >   Module zope.pagetemplate.pagetemplate, line 117, in pt_render
> >     strictinsert=0, sourceAnnotations=sourceAnnotations)()
> >   Module zope.tal.talinterpreter, line 277, in __call__
> >     self.interpret(self.program)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 878, in do_defineMacro
> >     self.interpret(macro)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 926, in do_extendMacro
> >     definingName, extending)
> >   Module zope.tal.talinterpreter, line 908, in do_useMacro
> >     self.interpret(macro)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 538, in do_optTag_tal
> >     self.do_optTag(stuff)
> >   Module zope.tal.talinterpreter, line 523, in do_optTag
> >     return self.no_tag(start, program)
> >   Module zope.tal.talinterpreter, line 518, in no_tag
> >     self.interpret(program)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 878, in do_defineMacro
> >     self.interpret(macro)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 976, in do_defineSlot
> >     self.interpret(block)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 966, in do_defineSlot
> >     self.interpret(slot)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 878, in do_defineMacro
> >     self.interpret(macro)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 878, in do_defineMacro
> >     self.interpret(macro)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 976, in do_defineSlot
> >     self.interpret(block)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 878, in do_defineMacro
> >     self.interpret(macro)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 538, in do_optTag_tal
> >     self.do_optTag(stuff)
> >   Module zope.tal.talinterpreter, line 523, in do_optTag
> >     return self.no_tag(start, program)
> >   Module zope.tal.talinterpreter, line 518, in no_tag
> >     self.interpret(program)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 872, in do_condition
> >     self.interpret(block)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 872, in do_condition
> >     self.interpret(block)
> >   Module zope.tal.talinterpreter, line 352, in interpret
> >     handlers[opcode](self, args)
> >   Module zope.tal.talinterpreter, line 839, in do_loop_tal
> >     iterator = self.engine.setRepeat(name, expr)
> >   Module zope.tales.tales, line 685, in setRepeat
> >     it = self._engine.iteratorFactory(name, expr, self)
> >   Module zope.tales.tales, line 110, in __init__
> >     self._next = i.next()
> >   Module zope.formlib.form, line 748, in error_views
> >     zope.app.form.browser.interfaces.IWidgetInputErrorView)
> >   Module zope.component, line 154, in getMultiAdapter
> >     raise ComponentLookupError(objects, interface, name)
> > ComponentLookupError: ((<zope.interface.exceptions.Invalid instance at
> > 0x033ED7D8>, <zope.publisher.browser.BrowserRequest instance
> > URL=http://localhost/MetroSite/@@join.html>), <InterfaceClass
> > zope.app.form.browser.interfaces.IWidgetInputErrorView>, u'')
> >
> > What am I doing wrong?
> >
> > Sincerely,
> >
> > Mats Nordgren
> > _______________________________________________
> > Zope3-users mailing list
> > Zope3-users at zope.org
> > http://mail.zope.org/mailman/listinfo/zope3-users



More information about the Zope3-users mailing list