NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4710 most downloaded on PyPI
Tools for using a Web Server Gateway Interface stack
Last release 2 years ago
no release in 18 months
Ships unpredictably
gaps range from 2 weeks to 1.7 years
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
21 years old
76 releases · first in 2005
Correct packaging and testing when not in a clean virtualenv.
Move development to https://github.com/pasteorg/paste
With version 3.10.0 Paste development moves to the pasteorg GitHub organization and will be going deeper into maintenance mode unless more active maintainers step forward to take over. "Deeper" in this case means that releases will be much less frequent and patches will only be accepted for security issues or major problems. Current consumers of Paste should prepare to migrate away to more modern solutions.
One column per quarter.
Remove dead format_environ code in watchthread.py app.
Remove remainder of Python 2 code. Thanks a-detiste.
Nothing published for this version
Tiny release to confirm release automation.
Provide kwarg for timestamp format in Translogger.
Use importlib instead of imp with Python 3.
Additional fixes to next in iterators.
Thanks to cjwatson.
Replace deprecated threading.currentThread, getName and setDaemon with threading.current_thread, name and daemon.
Thanks to hugovk.
Python 3 fixes to auth and wsgi.errors handling; notably making wsgi.errors text.
Thanks to brondsem.
Explicit pkg_resource dependency to easy packaging.
Thanks to mgorny.
Remove deprecated dependencies paste/fixture.py.
Thanks to jhance.
Update setup.py to work with setuptools 50.1.0+
Thanks to hrnciar for the patch.
Patch auth ticket to be python3 compatible.
Thanks to TilmanSchaefer for the patch.
Correct sorting of items() in EvalHTMLFormatter.
Thanks to amitmarkel for the patch.
Fix next in iterators in wsgilib.py.
Allow binding IPv6 address when starting a server.
Thanks to Lekinho for this patch.
Use six.BytesIO when reading wsgi.input.
Python 3 updates for use of StringIO and auth_tkt.py.
Correctly handle HEAD requests (to send empty body) when gzip encoding requested.
Nothing published for this version
Use encodebytes instead of deprecated encodestring.
Thanks to tirkarthi for these fixes.
Correct 100 Continue in Python 3
100 Continue in Python 3Avoid some reference cycles through tracebacks in httpserver.py
Handle io.UnsupportedOperation from socket.tell()
Ensure unicode URLs work in TestApp.
Thanks to benjaminp for many recent contributions.
TestApp.encode_multipart handles bytes filenames and params.
Allow anything that can read() for a file-like response, not just a file instance.
file instance.Fix quoting of bytestrings (#23, via jelmer).
Send bytestrings when writing chunks from paste/httpserver.py.
paste/httpserver.py.Revert the changes in the 3.0.5, which introduced unexpected errors in paste/httpserver.py when using SSL.
paste/httpserver.py when using SSL.Quiet a deprecation warning in OpenSSL.
Python 3 fix for deleting items from a dict.
Ensure pytest requirements set properly.
Encoding fixes in paste.fixture.
paste.fixture.Remove use of future for sake of html.escape and use own. Using future was causing installation loops. See: https://github.com/pasteorg/paste/issues/6
Fixes for use with Python 3.7, mostly to do with StopIteration.
Fixes for use with Python 3.7, mostly to do with StopIteration.
Moving to https://github.com/cdent/paste to keep things maintained.
* #26: Change six requirement to >=1.4.0 from Linus Heckemann https://bitbucket.org/ianb/paste/pull-requests/26/change-six-requirement-to-140/diff * #
#26: Change six requirement to >=1.4.0 from Linus Heckemann https://bitbucket.org/ianb/paste/pull-requests/26/change-six-requirement-to-140/diff
#28: Py3k fixes from Nils Philippsen https://bitbucket.org/ianb/paste/pull-requests/28/py3k-fixes/diff
#29: paste.wsgilib.add_close: Add next method to support using add_close objects as iterators on Python 3.
fixes https://bitbucket.org/ianb/pastedeploy/issues/18/py3-test_config_middleware-failed
from Marc Abramowitz
https://bitbucket.org/ianb/paste/pull-requests/29/pastewsgilibadd_close-add-next-method/diff
#30: tox.ini: Add py35 to envlist from Marc Abramowitz https://bitbucket.org/ianb/paste/pull-requests/30/toxini-add-py35-to-envlist/diff
#31: Enable testing with pypy from Marc Abramowitz https://bitbucket.org/ianb/paste/pull-requests/31/enable-testing-with-pypy/diff
#33: tox.ini: Measure test coveraage from Marc Abramowitz https://bitbucket.org/ianb/paste/pull-requests/33/toxini-measure-test-coverage/diff
* #22: Fix improper commas in request headers in wsgi_environ (https://bitbucket.org/ianb/paste/pull-request/22/fix-improper-commas-in-request-headers
#22: Fix improper commas in request headers in wsgi_environ (https://bitbucket.org/ianb/paste/pull-request/22/fix-improper-commas-in-request-headers-in) Fixes issue #4 ("WSGI environ totally borked") (https://bitbucket.org/ianb/paste/issue/4/wsgi-environ-totally-borked)
#24: test_wsgirequest_charset: Use UTF-8 instead of iso-8859-1 (https://bitbucket.org/ianb/paste/pull-request/24/test_wsgirequest_charset-use-utf-8-instead) Fixes issue #7 ("Python 3 test failure") (https://bitbucket.org/ianb/paste/issue/7/python-3-test-failure)
#23: Replace cgi.parse_qsl w/ six.moves.urllib.parse.parse_qsl (https://bitbucket.org/ianb/paste/pull-request/23/replace-cgiparse_qsl-w) Fixes issue #8 ("cgi.parse_qsl is pending deprecation") (https://bitbucket.org/ianb/paste/issue/8/cgiparse_qsl-is-pending-deprecation)
#20: Escape CGI environment variables in HTTP 404 responses (https://bitbucket.org/ianb/paste/pull-request/20/escape-cgi-environment-variables-in-http)
#6: Add HTTP exception for new code 429 "Too Many Requests" (https://bitbucket.org/ianb/paste/pull-request/6/add-http-exception-for-new-code-429-too)
#25: replace has_key method to in operator #9 (https://bitbucket.org/ianb/paste/pull-request/25/replace-has_key-method-to-in-operator-9)
Fixes #9 ("used methods removed from py3") (https://bitbucket.org/ianb/paste/issue/9/used-methods-removed-from-py3)
#5: Invalid error message when the socket is already in use (https://bitbucket.org/ianb/paste/issue/5/invalid-error-message-when-the-socket-is)
Fix setup.py for six dependency: move the six dependency from extras_require to install_requires.
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.
paste now requires the six module.
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.
Fix bug introduced in paste.auth.auth_tkt (with url_unquote)
Fix bug introduced in paste.auth.auth_tkt (with url_unquote)
Won't install tests/ directory (also caused installation problems on some Mac systems).
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 paste.translogger
Fixed problems with mimeparse code
Fixed some corner cases with CGI scripts
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 paste.errordocument.
Fix XSS bug (security issue) with not found handlers for paste.urlparser.StaticURLParser and paste.urlmap.URLMap. If you ask for a path with /--> ...
Fix XSS bug (security issue) with not found handlers for paste.urlparser.StaticURLParser and 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 paste.util.mimeparse.desired_match
Removed directory name from 404 errors in paste.urlparser.StaticURLParser.
Removed directory name from 404 errors in paste.urlparser.StaticURLParser.
Fixed packaging to include Javascript and images for paste.evalexception
I got a fever and the only prescription is more paste.cowbell!
I got a fever and the only prescription is more paste.cowbell!
Fix paste.httpserver on Python 2.6.
Fix paste.auth.cookie, which would insert newlines for long cookies.
paste.util.mimeparse parses a single * in Accept headers (sent by IE 6).
Fix some problems with the wdg_validate middleware.
Improvements to 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 paste.proxy.Proxy handle Content-Length of -1.
In paste.httpexceptions avoid some unicode errors.
In paste.httpserver handle .read() from 100 Continue properly (because of a typo it was doing a readline).
Update paste.util.mimeparse from upstream.
Quiet Python 2.6 deprecation warnings.
In 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 paste.proxy.Proxy (paste.proxy.TransparentProxy already worked).
Make paste.debug.prints work with Google App Engine.
Make environ['wsgi.input'] with paste.httpserver only have a seek method if it is wrapping something with a seek method (which usually it is not).
In paste.httpserver re-raise KeyboardInterrupt in worker threads.
Added support for the HttpOnly Cookie property to paste.wsgiwrappers
Added paste.reloader.add_file_callback, which lets you watch files based on a callback.
Quiet Python 2.6 deprecation warnings.
Fix paste.auth.cookie generating bad headers.
Added paste.reloader.JythonMonitor for an experimental, optimized reloader on Jython.
Deprecate paste.fixture.setup_module
Normalize and make absolute the paths passed to paste.urlparser.StaticURLParser (before passing a relative-to-cwd path to that class would cause Forbidden errors).
Deprecate paste.fixture.setup_module
Fixed bug in paste.fixture.TestApp that would submit forms with unnamed fields (like an unnamed submit button). Also made checkboxes with no explicit
Fixed bug in 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 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 paste.cascade notice sockets that have stopped producing data. From Casey Zednick.
In 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 paste.httpserver to allow binding to port 0.
In paste.auth.auth_tkt, set the same cookies (with the same domains) in set_cookie as get unset in logout_user_cookie.
In 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 paste.exceptions.errormiddleware.ErrorMiddleware would not call start_response properly; this is fixed (from Andreas Kloecker).
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.
paste.debug.profile won't break when content is served with no Content-Type.
Accept relative paths and paths with /../ in them for paste.urlparser.StaticURLParser (from Eric Larson). Also fix problem with case normalization on Windows (from Ionel Maries Cristian).
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 paste.debug.prints compatible with App Engine.
Fix the domain keyword in paste.wsgiwrappers.WSGIResponse.delete_cookie.
Make the import of socket.sslerror conditional in paste.exceptions.reporter (needed for Python interpreters compiled without SSL support).
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).
Make paste.cascade more tolerant of a missing or invalid Content-Length.
paste.cascade more tolerant of a missing or invalid
Content-Length.Fixed memory leak with paste.registry not properly removing all references to registered objects should register be called multiple times during a sin
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.
Remove FreeBSD threadpool condition in paste.httpserver (which was also breaking code for Windows users).
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.
Allow customization of the paste.config.ConfigMiddleware environ key.
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.
In paste.httpserver added lots of functionality to the threadpool. See the paste.httpserver threadpool documentation _ for details. This catches worke
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.
In paste.httpserver remove the reverse DNS lookup to set REMOTE_HOST
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.
paste.httpserver didn't implement the readline that the cgi module wants (regression in 1.2).
paste.httpserver didn't implement the readline that the
cgi module wants (regression in 1.2).Backward incompatible change: paste.fileapp.FileApp properly supports request methods, including HEAD. If you were subclassing FileApp or DataApp and…
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.
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 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)
Your coding agent can read these notes before it upgrades. Set up the MCP server →