[Twisted-Python] Resource.render() returning NOT_DONE_YET

Clark C. Evans cce at clarkevans.com
Fri May 9 23:22:23 EDT 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