What's New in WebOb 1.8

Feature

  • Request.POST now supports any requests with the appropriate Content-Type. Allowing any HTTP method to access form encoded content, including DELETE, PUT, and others. See https://github.com/Pylons/webob/pull/352

Compatibility

  • WebOb is no longer officially supported on Python 3.3 which was EOL'ed on 2017-09-29.

    Please pin to WebOb~=1.7 which was tested against Python 3.3, and upgrade your Python version.

Backwards Incompatibilities

  • Many changes have been made to the way WebOb does Accept handling, not just for the Accept header itself, but also for Accept-Charset, Accept-Encoding and Accept-Language. This was a Google Summer of Code project completed by Whiteroses (https://github.com/whiteroses). Many thanks to Google for running GSoC, the Python Software Foundation for organising and a huge thanks to Ira for completing the work. See https://github.com/Pylons/webob/pull/338 and https://github.com/Pylons/webob/pull/335.

    If you were previously using the Accept class or the MIMEAccept class directly, please take a look at the documentation for create_accept_header(), create_accept_charset_header(), create_accept_encoding_header() and create_accept_language_header().

    These functions will accept a header value and create the appropriate object.

    The API documentation for Accept* provides more information on the available API.

  • When calling a @wsgify decorated function, the default arguments passed to @wsgify are now used when called with the request, and not as a start_response

    def hello(req, name):
        return "Hello, %s!" % name
    app = wsgify(hello, args=("Fred",))
    
    req = Request.blank('/')
    resp = req.get_response(app)  # => "Hello, Fred"
    resp2 = app(req) # => "Hello, Fred"
    

    Previously the resp2 line would have failed with a TypeError. With this change there is no way to override the default arguments with no arguments. See https://github.com/Pylons/webob/pull/203

  • When setting app_iter on a Response object the content_md5 header is no longer cleared. This behaviour is odd and disallows setting the content_md5 and then returning an iterator for chunked content encoded responses. See https://github.com/Pylons/webob/issues/86

Experimental Features

These features are experimental and may change at any point in the future. The main page provides a list of Experimental API supported by WebOb.

Bugfix

  • Request.host_url, Request.host_port, Request.domain correctly parse IPv6 Host headers as provided by a browser. See https://github.com/Pylons/webob/pull/332

  • Request.authorization would raise ValueError for unusual or malformed header values. Now it simply returns an empty value. See https://github.com/Pylons/webob/issues/231

  • Allow unnamed fields in form data to be properly transcoded when calling request.decode with an alternate encoding. See https://github.com/Pylons/webob/pull/309

  • Response.__init__ would discard app_iter when a Response had no body, this would cause issues when app_iter was an object that was tied to the life-cycle of a web application and had to be properly closed. app_iter is more advanced API for Response and thus even if it contains a body and is thus against the HTTP RFC's, we should let the users shoot themselves in the foot by returning a body. See https://github.com/Pylons/webob/issues/305