* Moved repository from svn location to
+* Arguments to :meth:`Accept.best_match` must be specific types,
+ not wildcards. The server should know a list of specic types it can
+ offer and use ``best_match`` to select a specific one.
+* With ``req.accept.best_match([types])`` prefer the first type in the
+ list (previously it preferred later types).
+* Also, make sure that if the user-agent accepts multiple types and
+ there are multiple matches to the types that the application offers,
+ ``req.accept.best_match([..])`` returns the most specific match.
+ So if the server can satisfy either ``image/*`` and or ``text/plain``
+ types, the latter will be picked independent from the order the accepted
+ or offered types are listed (given they have the same quality rating).
+* Fix Range, Content-Range and AppIter support all of which were broken
+ in many ways, incorrectly parsing ranges, reporting incorrect
+ content-ranges, failing to generate the correct body to satisfy the range
+* Support passing Unicode bodies to :class:`WSGIHTTPException`
+* Make ``bool(req.accept)`` return ``False`` for requests with missing
+* Add HTTP version to :meth:`Request.__str__` output.
+* Resolve deprecation warnings for parse_qsl on Python 2.6 and newer.
+* Fix :meth:`Response.md5_etag` setting Content-MD5 in incorrect
+* Add ``Request.authorization`` property for Autorization header.
+* Make sure ETag value is always quoted (required by RFC)
* Moved most ``Request`` behavior into a new class named
``BaseRequest``. The ``Request`` class is now a superclass for
``BaseRequest`` and a simple mixin which manages
* Made the case of the Content-Type header consistent (note: this
might break some doctests).
-* With ``req.accept.best_match([types])`` prefer the first type in the
- list (previously it preferred later types).
* Make ``req.GET`` settable, such that ``req.environ['QUERY_STRING']``
* Fix problem with ``req.POST`` causing a re-parse of the body when
you instantiate multiple ``Request`` objects over the same environ
- (e.g., when using middleware that looks at ``req.POST``).
+ (e.g., when using middleware that looks at ``req.POST``).
* Recreate the request body properly when a ``POST`` includes file
* When ``req.POST`` is updated, the generated body will include the
+* Fix `Request.blank('/').copy()` raising an exception.
* Fix a potential memory leak with HEAD requests and 304 responses.
* Make :func:`webob.html_escape` respect the ``.__html__()`` magic
+* Make sure that if changing the body the Content-MD5 header is
+ removed. (Otherwise a lot of middleware would accidentally
+* Fixed `Response.encode_content('identity')` case (was a no-op even
+* Fixed :meth:`Request.remove_conditional_headers` that was removing
+ If-Match header instead of If-None-Match.
* Fixed ``resp.set_cookie(max_age=timedelta(...))``
* ``request.POST`` now supports PUT requests with the appropriate
+* Add more arguments to :meth:`Request.remove_conditional_headers`
+ for more fine-grained control: `remove_encoding`, `remove_range`,
+ `remove_match`, `remove_modified`. All of them are `True` by default.
+* Add an `set_content_md5` argument to :meth:`Response.md5_etag`
+ that calculates and sets Content-MD5 reponse header from current
* Change formatting of cookie expires, to use the more traditional
format ``Wed, 5-May-2001 15:34:10 GMT`` (dashes instead of spaces).
Browsers should deal with either format, but some other code expects
* Set the Expires property on cookies when using
``response.set_cookie()``. This is inherited from ``max_age``.
+* Support Unicode cookie values