[Twisted-web] Patch to nevow for deferrable beforeRender and
afterRender
J Turner
jamwt-twistedlist at jamwt.com
Tue Dec 28 14:35:36 MST 2004
I'm attaching a patch to the current svn trunk that allows beforeRender
and afterRender to return a Deferred.
It's been tested, and I've scanned it past dp a few times.
- jamwt
-------------- next part --------------
Index: rend.py
===================================================================
--- rend.py (revision 992)
+++ rend.py (working copy)
@@ -23,6 +23,8 @@
import warnings
import traceback
+from twisted.internet.defer import maybeDeferred
+
from nevow.context import WovenContext, NodeNotFound, PageContext, RequestContext
from nevow import compy
from nevow import inevow
@@ -390,11 +392,12 @@
flattenFactory = flat.flattenFactory
- def renderHTTP(self, ctx):
+ def renderHTTP(self, ctx, doBefore=True):
## XXX request is really ctx now, change the name here
request = inevow.IRequest(ctx)
- if self.beforeRender is not None:
- self.beforeRender(ctx)
+ if doBefore and self.beforeRender is not None:
+ return maybeDeferred(self.beforeRender,ctx).addCallback(
+ lambda result,ctx: self.renderHTTP(ctx,False),ctx)
if self.addSlash and inevow.ICurrentSegments(ctx)[-1] != '':
request.redirect(request.URLPath().child(''))
return ''
@@ -409,20 +412,18 @@
del _CARRYOVER[carryover]
self.context = None
if self.afterRender is not None:
- self.afterRender(ctx)
+ return maybeDeferred(self.afterRender,ctx)
if self.buffered:
io = StringIO()
writer = io.write
def finisher(result):
request.write(io.getvalue())
- finishRequest()
- return result
+ return maybeDeferred(finishRequest).addCallback(lambda r: result)
else:
writer = request.write
def finisher(result):
- finishRequest()
- return result
+ return maybeDeferred(finishRequest).addCallback(lambda r: result)
doc = self.docFactory.load()
ctx = WovenContext(ctx, tags.invisible[doc])
More information about the Twisted-web
mailing list