This is an error
> string
On Mon, 2005-15-08 at 09:48 -0700, Al Pacifico wrote:
> I was experimenting with the Form widgets and reading along in the Quixote
> Cookbook and found either an error in the Cookbook or a bug in the Widget
> code (Quixote 2.1).
>
Yes, I fell over this behaviour but didn't spend long enough trying to
reproduce it: it went away and I felt better. I probably had, as you
suggest, added a property and caused the problem to disappear. Certainly
I feel that the Form and Widget classes should operate independently of
the Publisher.
Chris
> It can be reproduced with: (almost verbatim from page 10 of the Cookbook
> revision 0.4, output copied from my terminal screen)
>
> $ python
> Python 2.4.1 (#1, May 16 2005, 15:19:29)
> [GCC 4.0.0 20050512 (Red Hat 4.0.0-5)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import quixote
> >>> from quixote.form import widget
> >>> x=widget.StringWidget('name',size=20)
> >>> x
>
> >>> print x.render()
> Traceback (most recent call last):
> File "", line 1, in ?
> File "/usr/lib/python2.4/site-packages/quixote/form/widget.py", line 172,
> in render
> r += self.render_error(self.get_error())
> File "/usr/lib/python2.4/site-packages/quixote/form/widget.py", line 96,
> in get_error
> self.parse(request=request)
> File "/usr/lib/python2.4/site-packages/quixote/form/widget.py", line 125,
> in parse
> request = get_request()
> File "/usr/lib/python2.4/site-packages/quixote/publish.py", line 302, in
> get_request
> return _publisher.get_request()
> AttributeError: 'NoneType' object has no attribute 'get_request'
> >>>
>
> The problem is that widget.py imports get_request which is from the
> Publisher class. In this context, there is no Publisher instance. The funny
> thing, though, is that once you set an attribute of the widget, the error
> goes away. For example:
>
> python
> Python 2.4.1 (#1, May 16 2005, 15:19:29)
> [GCC 4.0.0 20050512 (Red Hat 4.0.0-5)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import quixote
> >>> from quixote.form import widget
> >>> x=widget.StringWidget('name',size=20)
> >>> print x.render()
> Traceback (most recent call last):
> File "", line 1, in ?
> File "/usr/lib/python2.4/site-packages/quixote/form/widget.py", line 172,
> in render
> r += self.render_error(self.get_error())
> File "/usr/lib/python2.4/site-packages/quixote/form/widget.py", line 96,
> in get_error
> self.parse(request=request)
> File "/usr/lib/python2.4/site-packages/quixote/form/widget.py", line 125,
> in parse
> request = get_request()
> File "/usr/lib/python2.4/site-packages/quixote/publish.py", line 302, in
> get_request
> return _publisher.get_request()
> AttributeError: 'NoneType' object has no attribute 'get_request'
> >>> x.set_error('This is an error string')
> >>> print x.render()
>
>
> >>>
>
> After a brief review of the code, the cause of this behavior wasn't
> immediately evident to me.
>
> For development, it would be nice to be able to use the widgets outside of a
> publisher context. Any thoughts on this?
>
> -al
>
>
> Al Pacifico
> Seattle, WA
>
>
>
>