from twisted.web.woven import page, view, widgets from twisted.web.microdom import lmx from twisted.internet import defer class Thingie: pass class ThingWidget(widgets.Widget): def setUp(self, request, node, data): l = lmx(node) l.text('foo') def generate(self, request, node): print 'GENERATE', [request, node] data = self.getData(request) if isinstance(data, defer.Deferred): data.addCallback(self.setDataCallback, request, node) data.addErrback(utils.renderFailure, request) return data return self._regenerate(request, node, data) view.registerViewForModel(ThingWidget, Thingie) class Broken(page.Page): """This fails with a Deferred model if you remove the middle model=. level. fzZzy said it's DeferredWidget's fault.""" template = '''\