Normalize and make absolute the paths passed to :class:`paste.urlparser.StaticURLParser` (before passing a relative-to-cwd path to that class would cause Forbidden errors).
Deprecate :func:`paste.fixture.setup_module`
Fixed bug in :class:`paste.fixture.TestApp` that would submit forms with unnamed fields (like an unnamed submit button). Also made checkboxes with no explicit value send on instead of checked (which is what browsers do).
Fixed bug in :mod:`paste.httpserver` where environ['wsgi.input'].readline(max_size) ignored the max_size argument, which can lead to large memory usage (from Jakub Stolarski)
Make :mod:`paste.cascade` notice sockets that have stopped producing data. From Casey Zednick.
In :class:`paste.fixture.TestApp` Accept MultiDict values for the params argument in requests. (Anything with a .items() method will have its items encoded as the request parameters.)
Fix :mod:`paste.httpserver` to allow binding to port 0.
In :mod:`paste.auth.auth_tkt`, set the same cookies (with the same domains) in set_cookie as get unset in logout_user_cookie.
In :mod:`paste.translogger` save REQUEST_METHOD in case it gets overridden somewhere (e.g., when using errordocuments POST would show up as GET).
Exceptions with unicode messages don't cause the collector to fail.
Sometimes :class:`paste.exceptions.errormiddleware.ErrorMiddleware` would not call start_response properly; this is fixed (from Andreas Kloecker).
:mod:`paste.fixture.TestApp` can store multiple cookie values (previously only one cookie was stored; from Andrey Lebedev)
u'' in TestApp(app).get('/') will work when the body isn't ASCII (before it would give a unicode error). This problem wasn't present in the recommended WebTest.
:mod:`paste.debug.profile` won't break when content is served with no Content-Type.
Accept relative paths and paths with /../ in them for :class:`paste.urlparser.StaticURLParser` (from Eric Larson). Also fix problem with case normalization on Windows (from Ionel Maries Cristian).
:class:`paste.registry.StackedObjectProxy`'s now include the proxied object's names via __dir__ (for Python 2.6).
Use environ['wsgi.file_wrapper'] when available (in paste.fileapp).
Make :mod:`paste.debug.prints` compatible with App Engine.
Fix the domain keyword in :method:`paste.wsgiwrappers.WSGIResponse.delete_cookie`.
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 testapp.post(params={})
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).