durusmail: quixote-users: Form widgets usable outside context of a Publisher?
Form widgets usable outside context of a Publisher?
2005-08-15
Re: Form widgets usable outside context of a Publisher?
2005-08-15
Form widgets usable outside context of a Publisher?
2005-08-15
Form widgets usable outside context of a Publisher?
2005-08-15
Form widgets usable outside context of a Publisher?
Al Pacifico
2005-08-15
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).

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()
This is an error string

>>> 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
reply