ianb at colorstudy.com
Thu Aug 16 04:55:53 CEST 2007
Lately I got on a kick and extracted/refined/reimplemented a bunch of
stuff from Paste. The result is the not-quite-released WebOb (I don't
want to do a release until I think people should use it instead of
Paste, to the degree the two overlap -- and it's not *quite* ready for
Anyway, I'd be interested in feedback. We've talked a little about a
shared request object -- only a little, and I don't know if it is really
a realistic goal to even try. But I think this request object is a
considerably higher quality than any other request objects out there.
The response object provides a nice symmetry, as well as facilitating
testing. And it's also a very nice response object.
They are both fairly reasonable to subclass, if there are minor naming
issues (if there's really missing features, I'd like to add them
directly -- though for the response object in particular it's likely
you'll want to subclass to give application defaults, like a default
It's based strictly on WSGI, with the request object an almost-stateless
wrapper around a WSGI environment, and the response object a WSGI
application that contains mutable status/headers/app_iter.
Almost all the defined HTTP headers are available as attributes on the
request and/or response. I try to parse these in as sensible a way as
possible, e.g., req.if_modified_since is a datetime object (of course
unparsed access is also available). Several objects like
response.cache_control are a bit more complex, since there's no data
structure that exactly represents them. I've tried to make them as easy
to use as possible for realistic web tasks.
I'm very interested to get any feedback, especially right now when there
are no backward compatibility concerns. Right now no critique is too
large or small.
It's in svn at:
And there are fairly complete docs at:
A quick summary of differences in the API and some other
request/response objects out there:
I'd include more frameworks, if you can point me to their
request/response API documentation (e.g., I looked but couldn't find any
for Zope 3).
WebOb has a lot more methods and attributes than other libraries, but
this document points out only things where there are differing names or
things not in WebOb. Most other such objects also don't have the same
WSGI-oriented scope (with the exception of Yaro and paste.wsgiwrappers).
The Request and Response API (extracted docs):
Ian Bicking : ianb at colorstudy.com : http://blog.ianbicking.org
: Write code, do good : http://topp.openplans.org/careers
More information about the Web-SIG