[Twisted-Python] Resource.render() returning NOT_DONE_YET
Clark C. Evans
cce at clarkevans.com
Fri May 9 21:22:23 MDT 2003
On Fri, May 09, 2003 at 05:02:30PM +0200, Matthias Urlichs wrote:
| Clark C. Evans schrub am Mon, 28 Apr 2003 16:09:35 +0000:
| > 2. Alternatively, allow a Deferred to be a return
| > value. Then the underlying caller can add result.finish() to the
| > deferred chain. This has the advantage of not requiring finish()
| > to really be managed.
|
| I think that wouldn't work. Consider:
|
| def render(self,req):
| d = somewhere.GetDeferredData()
| d.addCallback(self.render_more,req)
| return d
| def render_more(self,data,req):
| d = somewhere.GetMoreDeferredData(data)
| d.addCallback(self.render_even_more,req)
| return d
| def render_even_more(self,data,req):
| req.write("Done!")
|
| This ends up calling req.finish() befor req.write().
Just beacuse you can write code that will violate a
given protocol doesn't mean it's a bad protocol. The
suggestion would work just fine... you just picked
a way to get around the intent of returning Deferred.
IMHO,
Clark
More information about the Twisted-Python
mailing list