[Web-SIG] WSGI 2.0
Phillip J. Eby
pje at telecommunity.com
Thu Oct 4 16:29:27 CEST 2007
At 03:47 PM 10/4/2007 +0200, Manlio Perillo wrote:
>Ian Bicking ha scritto:
> > PJE wants to talk about WSGI 2. That's cool; I remind everyone that
> > there's a page to bring up issues you might want to discuss for 2.0:
> > http://wsgi.org/wsgi/WSGI_2.0
> >
> > Feel free to add to, or discuss, issues on that page...
> >
>
>I'll write my ideas here:
>1) start_response should no more return a write callable.
> I don't know how many application use it, but I think that
> I can't implement it in a conforming way for nginx mod_wsgi,
> so I will not implement it.
>
>2) start_response should no more accept a exc_info parameter.
> I don't know how many applications use it, but I think that
> WSGI applications should not change their mind.
> They should delay calling start_response until they are able
> to produce a "final" response.
>
>3) start_response should accept, as an optional parameter, a
> flush argument.
> flush default to False, and when it is True, the WSGI gateway
> must write the headers as soon as start_response is called.
WSGI 2.0 does not have a start_response() callable in the first
place, so none of these apply.
In WSGI 2.0, an application looks like this:
def an_app(environ):
return "200 OK", [('content-type', 'text/plain')], ["Hello, world!"]
i.e., no start_response(), no write(), no statefulness at all. It
just returns a tuple of (status, headers, iterable), where all three
are defined by the WSGI 1.0 spec.
The third item in the tuple is a WSGI 1.0 app_iter, so it can be a
generator, have a close() method, etc. Here's a WSGI 1 middleware
application that converts a WSGI 2 application to WSGI 1:
def wsgi_1_app(environ, start_response):
status, headers, body = wsgi_2_app(environ)
start_response(status, headers)
return body
In other words, WSGI 2 is basically WSGI 1 with start_response() and
write() taken out.
>4) the environ dictionary should have a new WSGI-defined variable:
> wsgi.asynchronous.
> This value should evaluate to true when the server is asynchonous,
> that is, the WSGI application is executed in the main process loop
> of the server and the WSGI application can be paused after it yields
> some data.
It's always the case that a WSGI application can be paused after it
yields data, even in WSGI 1.0.
More information about the Web-SIG
mailing list