[Zope3-Users] Formlib and invariants?
Bernd Dorn
zope-mailinglist at mopa.at
Wed May 3 23:51:52 EDT 2006
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