[Zope3-Users] Re: broken formlib - form.txt example

Jürgen Kartnaller juergen at kartnaller.at
Wed Feb 7 01:55:26 EST 2007


Vinny,
why not using form.Form to derive from :

class MyForm(form.Form):
     form_fields = form.Fields(IOrder, omit_readonly=True)

Register this as a page and you are up and running.

Jürgen


Vinny wrote:
> Hello,
> 
> Platform details:
> 
> # pkg_info | grep zope
> zope-3.3.0          An object-based web application platform
> # uname -a
> FreeBSD the.palaceofretention.ca 6.2-RELEASE #1:
> # python
> Python 2.4.3 (#2, Dec 26 2006, 16:13:56)
> [GCC 3.4.4 [FreeBSD] 20050518] on freebsd6
> 
> Using IDLE 1.1.3
> 
> Using instructions from:
> /usr/local/www/Zope3/lib/python/zope/formlib/form.txt
> 
> With code straight out of it typed into the IDLE editor, saved
> as form.py and run using the F5 command:
> 
> =================== 8< ========
> from zope import interface, schema
> class IOrder(interface.Interface):
>     identifier = schema.Int(title=u"Identifier", readonly=True)
>     name = schema.TextLine(title=u"Name")
>     min_size = schema.Float(title=u"Minimum size")
>     max_size = schema.Float(title=u"Maximum size")
>     now = schema.Datetime(title=u"Now", readonly=True)
> 
> from zope.formlib import form
> class MyForm:
>     form_fields = form.Fields(IOrder)
> 
> #This sets up a set of form fields from the interface, IOrder.
> 
> print len(MyForm.form_fields)
> 
> print [w.__name__ for w in MyForm.form_fields]
> 
> class MyForm:
>     form_fields = form.Fields(IOrder, omit_readonly=True)
> 
>     def __init__(self, context, request):
>         self.context, self.request = context, request
> 
>     def __call__(self, ignore_request=False):
>         widgets = form.setUpWidgets(
>             self.form_fields, 'form', self.context, self.request,
>             ignore_request=ignore_request)
>         return '\n'.join([w() for w in widgets])
> 
> from zope.publisher.browser import TestRequest
> request = TestRequest()
> print MyForm(None, request)() # doctest: +NORMALIZE_WHITESPACE
> 
> Saving and running this gives: 
> 
>>>> =================== RESTART ========================
>>>>
> 5
> ['identifier', 'name', 'min_size', 'max_size', 'now']
> 
> Traceback (most recent call last):
>   File "/usr/local/www/Zope3/mv/lib/python/hello/form.py", line 33, in
> -toplevel-
>     print MyForm(None, request)() # doctest: +NORMALIZE_WHITESPACE
>   File "/usr/local/www/Zope3/mv/lib/python/hello/form.py", line 28, in
> __call__
>     ignore_request=ignore_request)
>   File "/usr/local/www/Zope3/lib/python/zope/formlib/form.py", line
> 256, in setUpWidgets
>     IInputWidget)
>   File "/usr/local/www/Zope3/lib/python/zope/component/_api.py", line
> 103, in getMultiAdapter
>     raise ComponentLookupError(objects, interface, name)
> ComponentLookupError: ((<zope.schema._bootstrapfields.TextLine object
> at 0x8cf53cc>, <zope.publisher.browser.TestRequest instance
> URL=http://127.0.0.1>), <InterfaceClass
> zope.app.form.interfaces.IInputWidget>, u'')
> 
> 
> Sigh.  Am I jinxed?  I've been trying to learn zope 3 for six
> months now.  All I want is to be able to make a form from an
> interface and display the dang thing.  Is that too much to
> ask?  /rant
> 
> Does anyone know what's going wrong?  Do I need to upgrade
> anything?
> 
> Thanks in advance.
> 
> Vinny



More information about the Zope3-users mailing list