[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