fixed DeferredResource using an attribute on twisted.web.http.Request not present...
[p2pool.git] / p2pool / util / deferred_resource.py
1 from __future__ import division
2
3 from twisted.internet import defer
4 from twisted.web import resource, server
5 from twisted.python import log
6
7 class DeferredResource(resource.Resource):
8     def render(self, request):
9         def finish(x):
10             if request.channel is None: # disconnected
11                 return
12             if x is not None:
13                 request.write(x)
14             request.finish()
15         
16         def finish_error(fail):
17             if request.channel is None: # disconnected
18                 return
19             request.setResponseCode(500) # won't do anything if already written to
20             request.write('---ERROR---')
21             request.finish()
22             log.err(fail, "Error in DeferredResource handler:")
23         
24         defer.maybeDeferred(resource.Resource.render, self, request).addCallbacks(finish, finish_error)
25         return server.NOT_DONE_YET