[Twisted-web] Buffered requests

Peter Hunt floydophone at gmail.com
Thu Nov 4 14:27:11 MST 2004


Will that include the HTTP response code and headers?


On Thu, 4 Nov 2004 13:02:14 -0800, Donovan Preston <dp at ulaluma.com> wrote:
> 
> 
> 
> On Nov 4, 2004, at 10:35 AM, Peter Hunt wrote:
> 
> > I'm wondering if there is a way that I can "buffer" a request, store
> > the output it would normally send to the client in a string, and then
> > output something different, such as a redirect, to the client.
> >
> > For example, it'd be nice if it worked like this:
> >
> > buffered_request.setHeader("Content-type","text/html")
> > buffered_request.write("<html>Hello %s</html>" %
> > buffered_request.args.get("name",["world"])[0])
> > buffered_request.finish()
> > output = buffered_request.getOutput()
> > request.setHeader("Content-type","text/plain")
> > request.write("The output that will be written to the client is:\n " +
> > output)
> >
> > The end result (in the browser) should be:
> >
> > The output that will be written to the client is:
> > 200 OK
> > Content-type: text/plain
> >
> > <html>Hello world</html>
> >
> > I've tried playing around with something called "queued", but I'm not
> > sure if that's what I want. Essentially I just want to capture the
> > output of a request in a string.
> 
> You'll have to do it yourself. You could just do it explicitly by
> constructing an object around the request and doing the buffering in
> that. Or you could try being really tricky and doing something like
> this (untested):
> 
> class Foo(Resource):
>     def render_GET(self, request):
>         buffer = StringIO()
>         original_write = request.write
>         request.write = buffer.write
>         original_finish = request.finish
>         request.finish = lambda: (original_write(buffer.getvalue()),
> original_finish())
>         self.renderTheActualPage()
>         return NOT_DONE_YET
> 
> nevow's rend.Page has a "buffered" attribute which, when set, does all
> this for you, so you can set headers any time during the rendering
> process and the headers will not be written until the entire body has
> been rendered.
> 
> dp
> 
>



More information about the Twisted-web mailing list