| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026 |
- 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.
|