def route(request: IRequest) -> Deferred: sproc = SessionProcurer(mss) request.write(b"oops...") with self.assertRaises(TooLateForCookies): yield sproc.procureSession(request) request.write(b"bye") request.finish()
def renderElement( request: IRequest, element: IRenderable, doctype: Optional[bytes] = b"<!DOCTYPE html>", _failElement: Optional[Callable[[Failure], "Element"]] = None, ) -> object: """ Render an element or other L{IRenderable}. @param request: The L{IRequest} being rendered to. @param element: An L{IRenderable} which will be rendered. @param doctype: A L{bytes} which will be written as the first line of the request, or L{None} to disable writing of a doctype. The argument should not include a trailing newline and will default to the HTML5 doctype C{'<!DOCTYPE html>'}. @returns: NOT_DONE_YET @since: 12.1 """ if doctype is not None: request.write(doctype) request.write(b"\n") if _failElement is None: _failElement = twisted.web.util.FailureElement d = flatten(request, element, request.write) def eb(failure: Failure) -> Optional[Deferred[None]]: _moduleLog.failure("An error occurred while rendering the response.", failure=failure) site: Optional["twisted.web.server.Site"] = getattr( request, "site", None) if site is not None and site.displayTracebacks: assert _failElement is not None return flatten(request, _failElement(failure), request.write) else: request.write( b'<div style="font-size:800%;' b"background-color:#FFF;" b"color:#F00" b'">An error occurred while rendering the response.</div>') return None def finish(result: object, *, request: IRequest = request) -> object: request.finish() return result d.addErrback(eb) d.addBoth(finish) return NOT_DONE_YET
def writeJSONStream( request: IRequest, jsonStream: Iterable[bytes], etag: Optional[str] = None, ) -> None: """ Respond with a stream of JSON data. """ request.setHeader(HeaderName.contentType.value, ContentType.json.value) if etag is not None: request.setHeader(HeaderName.etag.value, etag) for line in jsonStream: request.write(line)
def _playback(self, listener: IRequest, lastEventID: Optional[str]) -> None: if lastEventID is None: return observerID, counterString = lastEventID.split(":") if observerID == str(id(self)): counter = int(counterString) else: # lastEventID came from a different observer counter = 0 for eventCounter, event in self._events: if eventCounter >= counter: listener.write(event.render().encode("utf-8"))
def _playback( self, listener: IRequest, lastEventID: Optional[str] ) -> None: if lastEventID is None: return observerID, counterString = lastEventID.split(":") if observerID == str(id(self)): counter = int(counterString) else: # lastEventID came from a different observer counter = 0 for eventCounter, event in self._events: if eventCounter >= counter: listener.write(event.render().encode("utf-8"))