示例#1
0
 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()
示例#2
0
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
示例#3
0
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)
示例#4
0
    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"))