def _flattenElement(element, ctx): """ Use the new flattener implementation to flatten the given L{IRenderable} in a manner appropriate for the specified context. """ if ctx.precompile: return element synchronous = [] accumulator = [] request = IRequest(ctx, None) # XXX None case is DEPRECATED finished = deferflatten(request, element, ctx.isAttrib, True, accumulator.append) def cbFinished(ignored): if synchronous is not None: synchronous.append(None) return accumulator def ebFinished(err): if synchronous is not None: synchronous.append(err) else: return err finished.addCallbacks(cbFinished, ebFinished) if synchronous: if synchronous[0] is None: return accumulator synchronous[0].raiseException() synchronous = None return finished
def test_textNodeString(self): """ An instance of L{str} is flattened with XML quoting rules if C{True} is passed for C{inXML}. """ result = [] finished = deferflatten(None, '"&<>', False, True, result.append) finished.addCallback(lambda ignored: "".join(result)) finished.addCallback(self.assertStringEqual, '"&<>') return finished
def deferflatten(self, root, request=None): """ Helper to get a string from L{deferflatten}. """ result = [] d = deferflatten(request, root, False, False, result.append) def cbFlattened(ignored): return "".join(result) d.addCallback(cbFlattened) return d