[Web-SIG] WSGI in standard library
Clark C. Evans
cce at clarkevans.com
Mon Feb 20 03:43:21 CET 2006
On Sun, Feb 19, 2006 at 04:33:49PM -0500, James Y Knight wrote:
| On Feb 19, 2006, at 4:22 PM, Ian Bicking wrote:
| >> - HTTP header parsing support, e.g. language codes, quality lists,
| >> etc
| >
| > This would be very nice. Clark has done some work in
| > paste.httpheaders for these; but I don't think any of us
| > (Clark included) are really satisfied with how that module
| > is layed out. Maybe it is because headers in general don't
| > have that much in common with each other. I'm not sure.
| >
| > But nevertheless, it's all very mechanical, and based on existing and
| > stable HTTP standards. So I think it is an excellent candidate for
| > the standard library.
|
| I've done a bunch of work on this in twisted.web2, and it is pretty
| much completely separable from the rest of the server (it doesn't
| import any other twisted modules). I have parsers for almost all of
| the standard HTTP headers. There is a standard header format that
| many of the headers conform to.
|
| http://svn.twistedmatrix.com/cvs/trunk/twisted/web2/http_headers.py?
| view=auto
Something like this would be excellent in the standard library; the
sheer coverage of header parsing in your Twisted module is more complete
than what I did (for example, your date parsing and cookie handling
code). We have a solid overlap in the general pattern which points
to the need of a standard python version of this stuff:
For each header, there are two primary functions: a 'parse' function
for reading headers, and a 'compose' function for generating them.
The rest of the module is more or less implementation details and
user-interface issues:
- a class to store a collection of headers (found in your
module and in wsgiref, but not in my implementation);
- a mechanism to enumerate and list headers; both of our
implementations do this;
- specific objects for more complicated headers (ETag and
Cookie) - your module provides this (mine doesn't);
- providing for a mechanism to "extend" the header parsing
mechanism so that header parse/compose pairs for custom
or less common headers can be provided by "plug-in"
libraries (I use objects, you use a dict of tuples);
- nice doc strings (your module could use a bit of help
in this regard - plus cross reference to the particular
RFC for the given header)
- handling the fundmental distinction between headers that
have a single value, have multiple values as described
by section 4.2 of RFC 2616, and headers which are not
compliant with RFC 2616; and
- integration /w WSGI; my module provides a uniform mechanism
for accessing/setting headers in a WSGI ``environ`` dict or
``response_headers`` list.
In any case, it probably wouldn't be too much effort (a few days?)
to integrate the modules and document them for inclusion.
Kind Regards,
Clark
More information about the Web-SIG
mailing list