reworking
[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
6 class DeferredResource(resource.Resource):
7     def render(self, request):
8         def finish(x):
9             if request._disconnected:
10                 return
11             if x is not None:
12                 request.write(x)
13             request.finish()
14         
15         def finish_error(fail):
16             if request._disconnected:
17                 return
18             request.setResponseCode(500) # won't do anything if already written to
19             request.write('---ERROR---')
20             request.finish()
21             fail.printTraceback()
22         
23         defer.maybeDeferred(resource.Resource.render, self, request).addCallbacks(finish, finish_error)
24         return server.NOT_DONE_YET