Al Pacifico wrote:
> 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:
It's not setting an attribute that makes the error going away, it's
calling .render() a second time. The first time through, .render() calls
Widget.parse() (widget.py line 121) to get the current value. ._parse()
sets the value from the GET/POST variables and sets ._parsed to True.
Subsequent times, ._parsed is true so it returns the cached value. The
value defaults to None (or whatever you've set in the constructor), so
there are a couple ways around this:
# Tell the widget it's been parsed.
x = StringWidget('name', size=20)
x._parsed = True
print x.render()
# Supply a request so it doesn't ask the Publisher for one.
from quixote.http_request import HTTPRequest
dummy = HTTPRequest(stdin=None, environ={})
x = StringWidget('name', size=20)
x.parse(dummy)
print x.render()
Granted, the second one is ugly, and you may get into trouble with .stdin
being None.
+1 for making the widgets independent of the Publisher. Perhaps
Widget.parse() should check whether there's a Publisher and return the
existing value if not.
--
-- Mike Orr