[Web-SIG] WSGI in standard library (was: A trivial template API counter-proposal)

Ian Bicking ianb at colorstudy.com
Sun Feb 5 00:07:21 CET 2006


Phillip J. Eby wrote:
>> Perhaps wsgiref
>>should go into the Python 2.5 standard library?)
> 
> 
> Sure.  I'd suggest that we might want to expand it a little to include some 
> of the fine contributions of other authors, such as Ian's "lint" middleware 
> (which sits between an app and a server and checks both for compliance) and 
> maybe even his "Python debugger in the browser" middleware.  There have 
> also been people who've written a few utilities for CGI-in-WSGI, WSGI in 
> mod_python, etc.  And it'd be nice to squeeze in a FastCGI implementation 
> if somebody's got a suitable one.  Docs are also nonexistent at the 
> moment.  I'd be happy to co-ordinate and consolidate the additions, and of 
> course I'll write documentation, though any assistance people can offer 
> would be greatly appreciated.  Some people have written nice WSGI tutorials 
> or explanations, so if anybody wants to offer those up for consolidation 
> into docs, that would be good too.

There's some pieces that I think are not yet ready for standardization. 
  For instance, the error catching middleware would deserve a much 
larger discussion, I think, as it also involves the question of how to 
extend tracebacks (it uses Zope's code that uses magic local variables). 
  Also, the interactive implementation is complex enough (including 
Javascript) that I can't envision it stabablizing sufficiently.  (Paste 
includes a cgitb-based catching middleware as well)

I think a WSGI-based HTTP server is fairly easy to stabalize.  Clark 
Evans contributed a server based on SimpleHTTPServer, which I think is 
both pretty complete and doesn't do anything besides HTTP serving (e.g., 
no static file serving): 
http://svn.pythonpaste.org/Paste/trunk/paste/httpserver.py

The CGI server in wsgiref is also very stable -- there's not much for it 
to do.  Flup includes FastCGI, SCGI, and AJK, both forking and threaded. 
  I think all these pieces have relatively few dependencies, which could 
be extracted.  No forking WSGI HTTP server exists that I know of.

paste.lint is pretty stable and complete, I think.

With a little adaptation, paste.urlparser.StaticURLParser and 
paste.urlparser.PkgResourceParser also could be useful -- these are 
static file serving apps (they should be renamed, of course).  Serving 
with pkg_resources doesn't make sense unless pkg_resources is in the 
standard library.  But both those are based on paste.fileapp.FileApp -- 
which serves a single file -- and while Clark has also done some work on 
that and it is improved, I feel less confident that it is complete (but 
it could be completed -- its scope is well-understood).  Finding a file 
is easy (that's what StaticURLParser does), but actually serving a file 
with full HTTP support is a little more complex.  Also support for 
encoding and expiration times is missing from those -- mostly a matter 
of passing related configuration.  I think a good static file serving 
implementation is really valuable.

paste.cgiapp is relatively simple (runs a CGI script).  I think 
paste.proxy (just added) would be a really nice contribution to the 
standard library -- an HTTP proxy to another server, appearing as a WSGI 
application -- but the implementation is rough and only a couple of days 
old.

There's also a bunch of the routines in paste.request, paste.response, 
and paste.wsgilib could be good for the standard library.  There's also 
some code in paste.httpheaders, which perhaps could be made simpler and 
more primitive-feeling -- for things like parsing header values 
according to their meaning in HTTP.

There's several other bits of Paste that are pretty straight-forward, 
but not necessarily important.  E.g., a middleware that profiles the 
internal request and includes that in the output.  And some parts that I 
think are really useful, but abstract in a way that might not make 
everyone comfortable -- like paste.urlmap for mounting applications, or 
paste.cascade for trying multiple apps in a row until one "succedes" 
(where success usually means doesn't-return-404).

If stuff was put into the standard library, I think it would be 
important to consider up-front how the code would be backported.  I'm 
not really happy with the ad hoc backporting of libraries that currently 
occurs.  And I don't want to maintain the same code in Paste and a 
standard library module, or use cascading imports in my code.

-- 
Ian Bicking  |  ianb at colorstudy.com  |  http://blog.ianbicking.org


More information about the Web-SIG mailing list