paste.wsgiwrappers.WSGIRequest has match_accept() function to screen incoming HTPT Accept values against a list of mime-types.
paste.wsgiwrappers.WSGIRequest.defaults now accepts a new key:
The i18n language that should be used as the fallback should a translation not occur in a language file. See docs for details.
paste.wsgiwrappers.WSGIRequest can now optionally decode form parameters to unicode when it has a charset value set.
Deprecated the paste.wsgiwrappers.settings StackedObjectProxy dictionary for paste.wsgiwrappers.WSGIResponse.defaults.
Fixed a security vulnerability in paste.urlparser‘s StaticURLParser and PkgResourcesParser where, with some servers, you could escape the document root.
Significantly improved paste.httpserver‘s (egg:Paste#http) performance. It now uses a thread pool: previously it created a new thread for every request. To revert back to the old, slower behavior, set:
use_threadpool = false
in the [server:main] section of the config file.
More control of where the output of paste.debug.prints goes.
Added a warning to paste.wsgilib.add_close if the upstream app_iter consumer doesn’t call the app_iter.close() method.
Fixed paste.translogger.TransLogger to log to the Apache combined log format as advertised.
Fixed paste.urlparser classes to handle quoted characters (e.g. %20) in URL paths.
Changed paste.session to allow manipulating a session for the first time after start_response is called.
Added paste.wsgilib.add_start_close which calls a function just before returning the first chunk of the app_iter.
Changed paste.urlmap so that it matches domain-specific mappings before domain-neutral mappings.
Fixed IE 6 potentially receiving the following "400 Bad Request" error on file downloads:
Please check your system clock. According to this server, the time provided in the If-Modified-Since header is in the future.
Added a ‘no’ keyword argument to TestResponse.mustcontain, so you can assert that a response does contain some strings at the same time that you assert that a response does not contain other strings, like:
res = app.get('/') res.mustcontain('this must be there', no=['error', 'unexpected'])
Fixed fileapp.FileApp to pay attention to the If-None-Match header, which does ETag matching; before only If-Modified-Since was supported, even though an ETag header was being sent; in particular Firefox would then only send If-None-Match and so conditional requests never worked.
Changed usage of paste.request.MultiDict to paste.util.multidict, particularly in paste.wsgiwrappers where request.GET returns a new style of dictionary interface.
Be more careful in paste.request.parse_formvars not to let the cgi module read from wsgi.input when there are no parsable variables in the input (based on CONTENT_TYPE).