[Web-SIG] Latest WSGI Draft
Phillip J. Eby
pje at telecommunity.com
Mon Aug 23 17:37:03 CEST 2004
At 01:53 AM 8/23/04 -0500, Ian Bicking wrote:
>Phillip J. Eby wrote:
>>Fine. I just don't like it being anything other than a heuristic.
>>Suppose I'm running acceptance tests? My CGI runner will say "you're
>>being run only once", except then I'll run it again when the acceptance
>>test tests another input. But, I want the acceptance test to test the
>>operation of the application when it's in "cgi mode", effectively.
>If you're running multiple unit tests in a single process, you aren't in
>CGI mode, and you shouldn't set that key. You're in some other mode. If
>CGI mode really matters, the only test that is accurate is one where you
>are actually launching a separate process.
Not if the purpose is to test the code branch that e.g. saves your sessions
when it's run in CGI mode.
What I'm getting at here is that the purpose of this "CGI mode" is to tell
the app to perform certain behaviors on a different heuristic
pattern. There's nothing about that, that requires a guarantee of being
only run once. I say that because a CGI application is going to get run
more than once, anyway, so obviously whatever it does can be done more than
once. And, it's hard to test it if you need to run a new process every
time it runs.
>>>I can see that working for extensions to the request, but what about
>>>extensions to the response? E.g., some mod_python extension could allow
>>>for internal redirects -- a useful feature that won't fit into WSGI.
>>Really? Why not? Let's say that mod_python provides the function, the
>>app calls it, doesn't call 'start_response', and doesn't return an
>>iterator. What does middleware do? Well, presumably it does nothing.
>>Definitely it does nothing if it's an output transformer, or if it just
>>adds things to the request. So, where's the problem?
>Well, let's say mod_python adds two extensions. One is to do a local
>redirect, the other is to do a recursive call. The local redirect would
>be in wsgi.extensions (if it existed), but the recursive call would
>not. With wsgi.extensions, the middleware would eliminate the local
>redirect, and the application would be forced to use the recursive call
>and write out the result of that. Which is what you would want, because
>then the middleware would have an opportunity to modify the output.
In that case, why not have the local_redirect function require the
start_response callable as one of its parameters? It can then refuse if
the output has been captured by middleware.
>I still can't think of a good way to define wsgi.extensions or give rules
>for what should go in there. I can see some case for it, but since it's
>vague I don't think it should be included in the spec. There's room to add
>it later if it turns out to be important.
We don't need wsgi.extensions, we just need for servers and gateways to
make their extension APIs middleware-safe, by verifying that things the
APIs depend on haven't been changed by middleware. I'll write up an
explanation of this in the spec.
More information about the Web-SIG