diff options
author | Marc Abramowitz <marc@marc-abramowitz.com> | 2015-04-30 16:42:17 -0700 |
---|---|---|
committer | Marc Abramowitz <marc@marc-abramowitz.com> | 2015-04-30 16:42:17 -0700 |
commit | 12a3f1f4cfa7f88478dc1b0e949fcc095b9fc804 (patch) | |
tree | ddb8079523d846f0b074437fc33fa5e28b508183 /docs/news.txt | |
download | paste-git-12a3f1f4cfa7f88478dc1b0e949fcc095b9fc804.tar.gz |
Replace cgi.parse_qsl w/ six.moves.urllib.parse.parse_sqleliminate_cgi_parse_qsl_2eliminate_cgi_parse_qsl
because `cgi.parse_qsl` is deprecated, according to
https://docs.python.org/2/library/cgi.html#cgi.parse_qsl
Diffstat (limited to 'docs/news.txt')
-rw-r--r-- | docs/news.txt | 1026 |
1 files changed, 1026 insertions, 0 deletions
diff --git a/docs/news.txt b/docs/news.txt new file mode 100644 index 0000000..7b2a7e5 --- /dev/null +++ b/docs/news.txt @@ -0,0 +1,1026 @@ +News +==== + +.. contents:: + +2.0.1 +----- + +* Fix setup.py for six dependency: move the six dependency from extras_require + to install_requires. + +* Port paste.proxy to Python 3. + +* Fix paste.exceptions.serial_number_generator.hash_identifier() on Python 3. + +* Fix paste.util.threadedprint.uninstall(). Rename duplicated uninstall() + function to uninstall_stdin() and fix typo in variable name (_oldstin => + _oldstdin). + +* Add README.rst file. + +2.0 +--- + +* Experimental Python 3 support. + +* paste now requires the six module. + +* Drop support of Python 2.5 and older. + +* Fixed ``egg:Paste#cgi`` + +* In ``paste.httpserver``: give a 100 Continue response even when the + server has been configured as an HTTP/1.0 server (clients may send + ``Expect: 100-Continue`` before they know the version), and wrap + 100 Continue ``environ['wsgi.input']`` files with LimitedLengthFile + just like normal request bodies are wrapped, keeping WSGI + applications from over-reading from the socket. + +* Fixed parsing of paths beginning with multiple forward slashes. + +* Add tox.ini to run tests with tox on Python 2.6, 2.7 and 3.4. + +1.7.5.1 +------- + +* Fix bug introduced in :mod:`paste.auth.auth_tkt` (with ``url_unquote``) + +1.7.5 +----- + +* Won't install ``tests/`` directory (also caused installation + problems on some Mac systems). + +* Fixed problem with gzip middleware and zero-length responses. + +* Use ``X-Forwarded-For`` header in :mod:`paste.translogger` + +* Fixed problems with mimeparse code + +* Fixed some corner cases with CGI scripts + +* :mod:`paste.auth.auth_tkt` will URL-quote usernames, avoiding some + errors with usernames with ``!`` in them. + +* Improve handling of errors in fetching error pages in + :mod:`paste.errordocument`. + +1.7.4 +----- + +* Fix XSS bug (security issue) with not found handlers for + :class:`paste.urlparser.StaticURLParser` and + :class:`paste.urlmap.URLMap`. If you ask for a path with + ``/--><script>...`` that will be inserted in the error page and can + execute Javascript. Reported by Tim Wintle with further details + from Georg-Christian Pranschke. + +* Replaced :func:`paste.util.mimeparse.desired_match` + +1.7.3.1 +------- + +* Removed directory name from 404 errors in + :class:`paste.urlparser.StaticURLParser`. + +* Fixed packaging to include Javascript and images for + :mod:`paste.evalexception` + +1.7.3 +----- + +* I got a fever and the only prescription is more :mod:`paste.cowbell`! + +* Fix :mod:`paste.httpserver` on Python 2.6. + +* Fix :mod:`paste.auth.cookie`, which would insert newlines for long + cookies. + +* :mod:`paste.util.mimeparse` parses a single ``*`` in Accept headers + (sent by IE 6). + +* Fix some problems with the ``wdg_validate`` middleware. + +* Improvements to :mod:`paste.auth.auth_tkt`: add httponly support, + don't always aggressively set cookies without the + ``wildcard_cookie`` option. Also on logout, make cookies expire. + +* In :class:`paste.proxy.Proxy` handle Content-Length of -1. + +* In :mod:`paste.httpexceptions` avoid some unicode errors. + +* In :mod:`paste.httpserver` handle ``.read()`` from 100 Continue + properly (because of a typo it was doing a readline). + +* Update ``paste.util.mimeparse`` from `upstream + <http://code.google.com/p/mimeparse/>`_. + +1.7.2 +----- + +* In :mod:`paste.proxy`, added some more headers that are disallowed + in WSGI (e.g., Keep-Alive). Send Content-Length. Also fix the + missing query string when using :class:`paste.proxy.Proxy` + (:class:`paste.proxy.TransparentProxy` already worked). + +* Make :mod:`paste.debug.prints` work with Google App Engine. + +* Make ``environ['wsgi.input']`` with :mod:`paste.httpserver` only + have a ``seek`` method if it is wrapping something with a seek + method (which usually it is not). + +* In :mod:`paste.httpserver` re-raise KeyboardInterrupt in worker + threads. + +* Added support for the ``HttpOnly`` Cookie property to + :mod:`paste.wsgiwrappers` + +* Added :func:`paste.reloader.add_file_callback`, which lets you watch + files based on a callback. + +* Quiet Python 2.6 deprecation warnings. + +* Fix :mod:`paste.auth.cookie` generating bad headers. + +* Added :class:`paste.reloader.JythonMonitor` for an experimental, + optimized reloader on Jython. + +1.7.1 +----- + +* 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` + +1.7 +--- + +* 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 <http://pythonpaste.org/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 + :meth:`paste.wsgiwrappers.WSGIResponse.delete_cookie`. + +1.6.1 +----- + +* Fixed bug in paste lint where PATH_INFO would become unicode. + +1.6 +--- + +* Make the import of ``socket.sslerror`` conditional in + ``paste.exceptions.reporter`` (needed for Python interpreters + compiled without SSL support). + +* In ``paste.proxy.TransparentProxy``, don't overwrite + ``X-Forwarded-For`` header if it is already in the environment. + +* Added ``226 IM Used`` status code to ``paste.wsgiwrappers`` + +* In ``paste.fixture.TestApp`` treat ``<image type="image">`` the same + as a submit button. + +* Use ``OpenSSL.tsafe.Connection`` for https with + ``paste.httpserver``, avoiding some possible errors (``sslv3 alert + bad record mac``). + +* Fix small issue with ``paste.cgiapp`` and mod_wsgi. + +* Use ``BaseCookie`` instead of ``SimpleCookie`` for storing cookies + (avoids quoting cookie values). + +1.5.1 +----- + +* Make ``paste.cascade`` more tolerant of a missing or invalid + Content-Length. + +1.5 +--- + +* Fixed memory leak with ``paste.registry`` not properly removing + all references to registered objects should register be called + multiple times during a single context for a StackedObjectProxy. + +* ``paste.httpheaders.CONTENT_RANGE`` returns ``bytes + START-END/LENGTH`` instead of just ``START-END/LENGTH`` + +* In ``paste.fixture.TestApp`` set ``CONTENT_TYPE`` to + ``'application/x-www-form-urlencoded'`` whenever there are + parameters (and no other content type was provided). + +* In ``paste.session``, when cleaning files ignore files that aren't + session files. + +* ``paste.httpexceptions.HTTPExceptionHandler`` will no longer catch + exceptions raised during the app_iter iteration. + +* ``paste.cascade.Cascade`` copies ``wsgi.input`` when cascading, so + that one of the applications cannot read the input and leave a later + application blocked when it tries to read the input. + +* Fix assigning to ``WSGIResponse.charset`` breaking the content-type. + +* SMTP authentication is supported for the exception handler. You may + now set ``smtp_username``, ``smtp_password`` and ``smtp_use_tls`` to + control this behavior. From pthy. + +1.4.2 +----- + +* Remove FreeBSD threadpool condition in paste.httpserver (which was + also breaking code for Windows users). + +* Fix problem with ``paste.wsgilib.intercept_output`` and passing up + exceptions. + +1.4.1 +----- + +* Allow customization of the ``paste.config.ConfigMiddleware`` environ + key. + +* Added a ``current`` method (an alias of ``current_conf``) to + ``paste.config.DispatchingConfig``. + +* Make test response ``.form`` attribute work when you have a single + named form. + +* Try to encode any unicode input to ``paste.auth.auth_tkt`` + +* ``paste.wsgiwrappers.WSGIResponse`` now has a ``.content_type`` + attribute (that does not include parameters), and a ``.charset`` + attribute (that gets the charset parameter). + +* Inherit inherit show_exceptions_in_wsgi_errors from global + configuration. Inherit ``debug`` more properly. + +1.4 +--- + +* In ``paste.httpserver`` added lots of functionality to the + threadpool. See `the paste.httpserver threadpool documentation + <paste-httpserver-threadpool.html>`_ for details. This catches + worker threads (and WSGI apps) that take too long to complete their + task; killing them eventually, adding more worker threads when the + pool is exhausted and it doesn't look good that it'll clear soon, + and optionally killing the process when there are too many + lost/zombie threads (you must be using some kind supervisor process + for this last response to make sense). + +* Save host and scheme information during real HTTP proxy requests to + ``paste.httpserver``, into the keys + ``paste.httpserver.proxy.scheme`` and + ``paste.httpserver.proxy.host`` + +* In ``paste.exceptions`` always call ``start_response``; may help + problems when there is an exception in ``start_response`` itself. + +* Added method to ``paste.registry.StackedObjectProxy``, + ``_object_stack()``, which returns a list of all the registered + objects. Useful if you want to search through the effective history + of a stacked object. + +* Fixed infinite recursion problem with + ``paste.request.EnvironHeaders.keys()``. + +* Fix ``paste.wsgiwrappers.WSGIRequest.urlvars`` to use + ``wsgiorg.routing_args`` + +* Remove port from ``paste.request.construct_url`` if it's the default + port (e.g., port 80 for ``http``). + +* ``paste.proxy`` works with headers with continuations in the + response (i.e., a header that spans multiple lines). Also, treat a + missing Content-Length as 0, not unlimited (may have previously + caused freeze ups for some kinds of requests). + +* ``StackedObjectProxy`` supports ``__call__`` (i.e., you can use + ``StackedObjectProxy`` with callable objects). + +* Fixed ``ProfileMiddleware`` not calling ``close()`` on consumed + app_iters. + +* ``httpheaders.AcceptLanguage`` now won't give an exception when + there is a malformed parameter in the header. + +* Fix ``paste.auth.form.auth_form`` Paste Deploy entry point. + +* Added REST methods to ``paste.fixture.TestApp``, so you can more + easily do requests like PUT and DELETE. From Anders Pearson. + +* Added ``{{default var=default_value}}`` command to + ``paste.util.template``. Make ``{{# comment}}`` work. + +1.3 +--- + +* In ``paste.httpserver`` remove the reverse DNS lookup to set + ``REMOTE_HOST`` + +* In ``paste.fileapp``, if the client sends both If-None-Match and + If-Modified-Since, prefer If-None-Match. Make ETags include the + size as well as last modified timestamp. Make it possible to + override how mimetypes are guessed. + +* ``HTTPException`` objects now have a ``exc.response(environ)`` + method that returns a ``WSGIResponse`` object. + +* ``egg:Paste#watch_threads`` will show tracebacks of each thread + under Python 2.5. + +* Made ``paste.util.template`` trim whitespace around statements that + are on their own line. + +* ``paste.fileapp.DataApp`` now accepts ``allowed_headers=[...]`` to + specify the allowed headers. By default only ``GET`` and ``HEAD`` + are allowed. + +* Added ``paste.util.import_string.try_import_module``, which imports + modules and catches ``ImportError``, but only if it's an error + importing the specific module, not an uncaught ``ImportError`` in + the module being imported. + +1.2.1 +----- + +* ``paste.httpserver`` didn't implement the ``readline`` that the + ``cgi`` module wants (regression in 1.2). + +1.2 +--- + +* **Backward incompatible change**: ``paste.fileapp.FileApp`` properly + supports request methods, including HEAD. If you were subclassing + ``FileApp`` or ``DataApp`` and overriding ``__call__()`` you may have + to subclass ``get()`` instead. + +* paste.httpheaders now parses the HTTP Accept-Language header and returns + a list of languages the browser supports in the order it prefers them. + +* paste.mimeparse module added that handles parsing HTTP Accept headers + for quality and mime-types. + +* ``paste.request.construct_url`` was adding ``SERVER_PORT`` to + ``HTTP_HOST``; but ``HTTP_HOST`` (from the Host header) generally + contains a port when necessary, and ``SERVER_PORT`` should only be + used with ``SERVER_NAME``. + +* Added entry point for ``paste.registry.RegistryManager`` + (``egg:Paste#registry``). + +* ``paste.request.HeaderDict`` fixed to know that ``Content-Length`` + maps to ``CONTENT_LENGTH``. + +* Can use ``paste.urlparser.StaticURLParser`` with sub-instances other + than ``paste.fileapp.FileApp`` (if you subclass and override + ``make_app``) + +* ``paste.fixture.TestApp.get(status=X)`` takes a list of allowed + status codes for ``X``. + +* Added a small templating system for internal use (``paste.util.template``) + +* Removed a bunch of long-deprecated modules (generally modules that + have been moved to other names). + +In paste.wsgiwrappers +~~~~~~~~~~~~~~~~~~~~~ + +* ``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: + + ``language``: + 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``. + +In paste.httpserver +~~~~~~~~~~~~~~~~~~~ + +* Regression in 1.1 fixed, where Paste's HTTP server would drop + trailing slashes from paths. + +* ``paste.httpserver`` now puts a key in the environment when using a + thread pool that allows you to track the thread pool and see any + wedged threads. ``egg:Paste#watch_threads`` is an application that + can display this information. + +* ``paste.httpserver`` now accepts all request methods, not just + ``GET``, ``PUT``, etc. (Methods like ``MKCOL`` were previously + rejected.) + +* ``paste.httpserver`` has a ``wsgi.input`` that now does not block if + you try to read past the end (it is limited to returning the number + of bytes given in ``Content-Length``). Double-reading from + ``wsgi.input`` won't give you the same data, but it won't cause + blocking. + +1.1.1 +----- + +* Fixed major issue with serving static files on Windows (a regression + in Paste 1.1 where most static files would return 404 Not Found). + +* Fixed ``parse_dict_querystring`` returning empty dicts instead of + ``MultiDict``\ s. + +* Added ``paste.config``, a rewrite of ``paste.deploy.config`` using + ``paste.registry``. This version of ``ConfigMiddleware`` will + enable use of ``paste.config.CONFIG`` within the ``EvalException`` + interactive debugger. + +* Fixed problem where ``paste.recursive`` would leave ``wsgi.input`` + and ``CONTENT_LENGTH`` set for recursive requests. + +* Changed the static file servers to give 404 Not Found responses when + you have extra parts after a static file, instead of 400 Bad + Request (like when you request ``/file.html/extra/path``) + +1.1 +--- + +* Security fix for ``paste.urlparser.StaticURLParser``. The problem + allowed escaping the root (and reading files) when used with + ``paste.httpserver`` (this does not effect other servers, and does + not apply when proxying requests from Apache to + ``paste.httpserver``). + +* ``paste.httpserver`` and ``paste.fixture.TestApp`` url-unquote + ``SCRIPT_NAME`` and ``PATH_INFO``, as specified in the CGI spec. + Thanks to Jon Nelson for pointing out both these issues. + +* ``paste.registry`` now works within the ``EvalException`` + interactive debugger. + +* Fixed ``paste.auth.open_id`` failures not returning a correct + response. + +* Changed ``paste.httpexceptions.HTTPUnauthorized`` so that the + ``WWW-Authenticate`` header is not required. 401 responses don't + *have* to have that header. + +* In ``paste.fixture.TestApp``: ``<form>`` tags that have to + ``action`` will preserve the existing query string. (Generally + relative links that are completely empty should but were not + preserving the query string) + +* Made ``paste.*`` compatible with `py2exe <http://www.py2exe.org/>`_ + by adding a ``modulefinder`` call in ``__init__.py`` + +* The ``paste.gzipper`` gzipping middleware wasn't changing the + Content-Length header properly; thanks to Brad Clements for the fix. + +* Fixed ``paste.proxy`` to not use anything based on the dict form of + ``httplib..HTTPMessage``. This form folds headers together in a way + that breaks ``Set-Cookie`` headers (two ``Set-Cookie`` headers would + be merged into one). + +* ``paste.request.parse_formvars`` didn't accept parameters in + ``CONTENT_TYPE``. ``prototype.js`` sets a ``charset`` parameter, + which caused a problem. + +* Added a ``__traceback_decorator__`` magic local variable, to allow + arbitrary manipulation of the output of + ``paste.exceptions.collector`` before formatting. + +* Added unicorn power to ``paste.pony`` (from Chad Whitacre) + +* For ``paste.httpserver`` SSL support: add support loading an + explicit certificate context, and using ``ssl_pem='*'`` create an + unsigned SSL certificate (from Jason Kirtland). + +* Fix some cases where ``paste.httpserver`` can have an orphaned + thread pool (causing the process to not shut down properly). Patch + from jek. + +1.0 +--- + +* Fixed ``parsed_formvars`` potentially locking up on wsgi.input + after modification of ``QUERY_STRING``. + +* Fixed problem where ``paste.exceptions.errormiddleware`` didn't + expose the ``.close()`` method of the app_iter that it wraps (to + catch exceptions). This is a problem if the server about the + errormiddleware aborts the request; it should then call + ``.close()``, but won't necessarily exhaust the iterator to do so. + +* Added entry point for ``paste.translogger`` + (``egg:Paste#translogger``) + +* Fixed some cases where long data (e.g., a file upload) would show up + in the error report, creating a very very large report. Also, put + in a monkeypatch for the ``cgi`` module so that + ``repr(uploaded_field)`` won't load the entire field into memory + (from its temporary file location). + +* Added a ``force_host`` option to ``paste.proxy.TransparentProxy``, + which will force all incoming requests to the same host, but leave + the ``Host`` header intact. + +* Added automatic cleanup of old sessions for ``paste.session``, from + Amir Salihefendic. + +* Quote the function name in tracebacks in the exception formatter; + Genshi has function names that use ``<>``. + +0.9.9 +----- + +* Fixed ``paste.response.HeaderDict`` ``get`` and ``setdefault`` + methods to be case insensitive + +* Fix use of ``TestApp().post(params={'key': ['list of', + 'values']})`` as reported by Syver Enstad. + +* ``paste.fileapp.DataApp`` is now directly usable (was previously + only usable as an abstract base class). + +0.9.8 +----- + +* Fixed ``wsgiwrappers.WSGIResponse.delete_cookie``. It also now takes + optional path and domain arguments + +* ``wsgiwrappers.WSGIResponse`` now handles generator/iterator content + more cleanly, and properly encodes unicode content according to its + specified charset + +* Fixed ``wsgiwrappers.WSGIResponse`` mishandling multiple headers of + the same name + +* Added a Paste Deploy entry point for ``paste.auth.cookie`` + +* Moved Paste Deploy dependencies out of top-level modules and into + Paste-Deploy-specific entry point functions. This should make Paste + more-or-less Paste Deploy independent. ``paste.urlparser`` and + ``paste.exceptions.errormiddleware`` still have some leftover bits. + +* Added another redirector type to ``paste.recursive``, + ``environ['paste.recursive.include_app_iter']`` which gives access + to the original app_iter. + +* Bug with ``wsgilib.catch_errors`` and app_iters with no ``close()`` + method. + +* Long words in tracebacks weren't being wrapped correctly at all. + Also, large data would cause the wrapping routine to give a + recursion error. Now large data is truncated (at 1000 characters), + and recursion won't be a problem. Also, wrapping shouldn't lose + characters. + +* Better exception if you try to put a non-str into environ when using + ``paste.auth.cookie`` + +* ``paste.exceptions.collector`` produces an + ``exc_data.exception_type`` that is a class, not a string. This + helps it get formatted better in Python 2.5. + +* All the tests pass on Python 2.5! + +* Added ``paste.proxy.TransparentProxy``, which just sends the request + described in the WSGI environ on without any modification. More + useful for WSGI clients than servers, it effectively allows any + WSGI-based request mechanism to act like an httplib-based request + mechanism. + +* Added a ``cache_max_age`` argument to + ``paste.urlparser.StaticURLParser``, which allows you to encourage + the caching of static files. Patch from Brad Clements. + +* Added ``suppress_http_headers`` to ``paste.proxy.Proxy``, which will + filter out HTTP headers from the request before passing it on. + Patch from Brad Clements. + +0.9.7 +----- + +* The ``EvalException`` 'full traceback' button is now only displayed + when the full traceback differs from the regular (includes hidden + frames). + +* Fixed ``EvalException`` returning a Content-type of 'text-html' + instead of 'text/html' in some cases. + +0.9.6 +----- + +* Renamed the ``paste.util.multidict.multidict`` class to + ``paste.util.multidict.MultiDict`` + +0.9.5 +----- + +* 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``). + +0.9.4 +----- + +* This released was lost in a tragic clerical accident. + +0.9.3 +----- + +* 0.9.2 Included a version of MochiKit that was no longer compatible with + evalexception; 0.9.3 reverts to a previous version. + +* Change wsgi.run_once=False for ``paste.httpserver`` + +* Added entry points for debug apps + +0.9.2 +----- + +* Fix in paste.urlmap when connecting with host:port. + +* Added ``/_debug/summary`` to evalexception, which gives a + JSON-formatted list of all the exceptions in memory. + +0.9.1 +----- + +* A fix for paste.errordocument, when doing an internal redirect from + a POST request (the request is rewritten as a GET request) + +0.9 +--- + +* Added `paste.request.WSGIRequest + <class-paste.request.WSGIRequest.html>`_, a request object that + wraps the WSGI environment. + +* Added `paste.registry <module-paste.registry.html>`_, which is + middleware for registering threadlocal objects in a request. + +* Avoid annoying warning from paste.recursive + +* ``paste.httpserver`` now removes HTTPServer's transaction logging, + which was doing a reverse DNS lookup. + +* Added ``has_session`` to ``paste.session`` + +* Allow for conditional ``paste.wsgilib.intercept_output`` which + should be slightly faster (and streamable) compared to doing the + condition manually. + +* Added entry point for `paste.proxy <module-paste.proxy.html>`_, plus + improvements from Brad Clements (support path in target, filter + request methods) + +* Added `paste.pony <module-paste.pony.html>`_ so pony power can be + added to any WSGI application. + +* Added port matching to ``paste.urlmap``. + +0.5 +--- + +* Added `paste.auth.auth_tkt <module-paste.auth.auth_tkt.html>`_ + +* Added `paste.auth.grantip <module-paste.auth.grantip.html>`_ + +0.4.1 +----- + +* Some bug fixes to the `built-in HTTP server + <module-paste.httpserver.html>`_. + +* Experimental `paste.progress <module-paste.progress.html>`_ + middleware for tracking upload progress + +* Some tweaking of how `paste.reload <module-paste.reload.html>`_ + works, especially with respect to shutdown. + +0.4 +--- + +* Fixed up paste documentation (especially for new packages/modules) + +* Added `paste.auth <module-paste.auth.html>`_ package for authentication + related WSGI middle-ware components: + + - ``basic`` and ``digest`` HTTP authentication as described by RFC 2617 + + - support for Yale's Central Authentication System (``cas``) + + - ``open_id`` supports single sign-on originally developed for + LiveJournal (see http://openid.net) + + - ``cookie`` digitally signs cookies to record the current + authenticated user (``REMOTE_USER``), session identifier + (``REMOTE_SESSION``), and other WSGI entries in the ``environ``. + + - a ``form`` module (to be used with ``cookie`` or an equivalent) + provides a simple HTML based form authentication. + + - the ``multi`` module is an *experimental* mechanism for choosing + an authentication mechanism based on the WSGI ``environ`` + +* Added `paste.httpserver <module-paste.httpserver.html>`_ module which + provides a very simple WSGI server built upon python's + ``BaseHTTPServer``; this server has support for several features: + + - support for SSL connections via OpenSSL + + - support for HTTP/1.1 ``100 Continue`` messages as required by the + WSGI specification (many HTTP server implementations don't do this) + + - implemented as a Mix-In so that it can be used with other + more enchanted versions of ``BaseHTTPServer`` + + - support for 'Keep-Alive' (standard in HTTP/1.1) by either providing + a content-length or closing a connection if one is not available + +* Improved the `paste.httpexceptions <module-paste.httpexceptions.html>`_ + module: + + - added missing exception objects, and better descriptions + + - fixed several bugs in how exceptions are caught and propagated + + - usage as a ``wsgi_application()`` enables exceptions to be + returned without throwing or catching the error + + - support for plain/text messages for text-only clients such as + curl, python's urllib, or Microsoft Excel + + - allows customization of the HTML template for higher-level frameworks + +* Added `paste.httpheaders <module-paste.httpheaders.html>`_ module + to provide a uniform mechanism to access/update standard HTTP headers + in a WSGI ``environ`` and ``response_headers`` collection; it includes + specific support for: + + - providing "common" header names and sorting them as suggested + by RFC 2616 + + - validated support for ``Cache-Control`` header construction + + - validated support for ``Content-Disposition`` header construction + + - parsing of ``If-Modified-Since`` and other date oriented headers + + - parsing of Range header for partial-content delivery + + - composition of HTTP/1.1 digest ``Authorization`` responses + +* Improved `paste.fileapp <module-paste.fileapp.html>`_ to support: + + - static in-memory resources + + - incremental downloading of files from disk + + - responding to 'Range' requests to handle partial downloads + + - allowing cache settings to be easily provided; including + support for HTTP/1.0 'Expires' and HTTP/1.1 'Cache-Control' + +* Added an *experimental* `paste.transaction + <module-paste.transaction.html>`_ module for handling + commit/rollback of standard DBAPI database connections + +* Added a `paste.util.datetimeutil <module-paste.util.datetimeutil.html>`_ + module for parsing standard date/time user-generated text values + +* Added a `debug <module-paste.debug.html>`_ package, which includes: + + - previous top-level modules ``prints``, ``profile``, + ``wdg_validate`` and ``doctest_webapp`` + + - a ``testserver`` module suitable to test HTTP socket + connections via ``py.test`` + +* Re-factored `paste.wsgilib <module-paste.wsgilib.html>`_ into + several other modules: + + - functions regarding header manipulation moved to + `paste.response <module-paste.response.html>`_ + + - functions regarding cookies and arguments moved to + `paste.request <module-paste.request.html>`_ + +* Significant improvements to ``wsgiutils.wsgilib`` module: + + - added a ``dump_environ`` application to help debugging + + - fixes to ``raw_interactive`` to comply with WSGI specifications + + - ``raw_interactive`` now logs all 5xx exceptions and sets HTTP_HOST + +* Added an argument ``no_profile`` to + `paste.debug.profile.profile_decorator + <module-paste.debug.profile.html#profile_decorator>`_; if that + option is false, then don't profile the function at all. + +* Changed `paste.lint <module-paste.lint.html>`_ to check that the + status contains a message (e.g., ``"404 Not Found"`` instead of just + ``"404"``). Check that environmental variables + ``HTTP_CONTENT_TYPE`` and ``HTTP_CONTENT_LENGTH`` are no present. + Made unknown ``REQUEST_METHOD`` a warning (not an error). + +* Added parameter ``cwd`` to `TestFileEnvironment.run + <class-paste.fixture.TestFileEnvironment.html#run>`_ + +* `paste.fixture.TestApp <class-paste.fixture.TestApp.html>`_: + + - Form filling code (use ``response.forms[0]`` to get a `form object + <class-paste.fixture.Form.html>`_) + + - Added `click method + <class-paste.fixture.TestResponse.html#click>`_. + + - Better attribute errors. + + - You can force set hidden fields using + ``form.fields[name].force_value(value)`` (normally setting the + value of a hidden field is an error). + + - Frameworks can now add custom attributes to the response object. + +* ``paste.wsgilib.capture_output`` is deprecated in favor of + `paste.wsgilib.intercept_output + <module-paste.wsgilib.html#intercept_output>`_ + +* Remove use of exceptions in `paste.cascade.Cascade + <class-paste.cascade.Cascade.html>`_, which causes weird effects in + some cases. Generally we aren't using exceptions internally now, + only return status codes. Also in cascade, be careful to keep + cascaded requests from sharing the same environment. + +* ``paste.wsgilib.error_response`` is deprecated + (`paste.httpexceptions <module-paste.httpexceptions.html>`_ replaces + this with exception's ``.wsgi_application`` method). + +* Moved ``paste.login`` to the attic, since `paste.auth + <module-paste.auth.html>`_ pretty much replaces it. + +* `paste.urlparser <module-paste.urlparser.html>`_ improvements: + + - Added an application `urlparser.StaticURLParser + <class-paste.urlparser.StaticURLParser.html>`_ for serving static + files. + + - Added an application `urlparser.PkgResourcesParser + <class-paste.urlparser.PkgResourcesParser.html>`_ for serving static + files found with ``pkg_resources`` (e.g., out of zipped Eggs). + + - Be less picky about ambiguous filenames when using `URLParser + <class-paste.urlparser.URLParser.html>`_; if an exact file match + exists, use that. (``file.gif.bak`` would cause a request for + ``file.gif`` to be ambiguous before) + + - Now looks for a ``.wsgi_application`` attribute when serving + Python files/modules, as a general hook for returning a WSGI + application version of an object. + +* The `ErrorMiddleware + <class-paste.exceptions.errormiddleware.ErrorMiddleware.html>`_: + + - Returns trimmed-down exceptions if there is a ``_`` GET variable + in the request (which is meant to signal an XMLHttpRequest). + Exceptions displayed in this context are best when they are smaller + and easier to display. + + - Includes a text version of the traceback, for easier + copy-and-paste. + + - Avoid printing exceptions to ``wsgi.errors`` if they are already + displayed elsewhere (at least by default). + + - Highlight Python code. + +* Use ``pkg_resources.declare_namespace`` so that there are less + problems about confusing the ``paste`` package that is provided by + Paste, Paste Script, Paste Deploy, and Paste WebKit. Before you + could get one of these at random if you didn't use + ``pkg_resources.require`` first. + +* Cleaned up use of ``exc_info`` argument in ``start_response`` calls + (both accepting and producing), in a variety of places. |