17 Apr 2020
27 Nov 2019
03 Nov 2019
02 Oct 2019
03 Sep 2019
23 Jun 2019
27 Mar 2019
09 Dec 2018
09 Sep 2018
01 Sep 2018
#1730: Drop support for Python 2.7. CherryPy 17 will remain an LTS release for bug and security fixes.
Drop support for Python 3.4.
23 Jun 2019
23 Nov 2018
19 Aug 2018
a95e619f: When setting Response Body, reject Unicode values, making behavior on Python 2 same as on Python 3.
Other inconsequential refactorings.
14 Aug 2018
10 Jul 2018
#1673: CherryPy now allows namespace packages for its dependencies. Environments that cannot handle namespace packgaes like py2exe will need to add such support or pin to older CherryPy versions.
10 Jul 2018
#1722: Pinned the
temporadependency against version 1.13 to avoid pulling in namespace packages.
18 Jun 2018
16 Jun 2018
Removed deprecated properties:
cherrypy._cpreqbody.Entity.typedeprecated in favor of
cherrypy._cprequest.Request.body_paramsdeprecated in favor of
11 May 2018
#1708: Removed components from webtest that were removed in the refactoring of cheroot.test.webtest for cheroot 6.1.0.
22 Apr 2018
19 Apr 2018
Cheroot PR #37: Add support for peercreds lookup over UNIX domain socket. This enables app to automatically identify “who’s on the other end of the wire”.
This is how you enable it:
server.peercreds: True server.peercreds_resolve: True
The first option will put remote numeric data to WSGI env vars: app’s PID, user’s id and group.
Second option will resolve that into user and group names.
To prevent expensive syscalls, data is cached on per connection basis.
04 Feb 2018
#1688: Officially deprecated
digest_authtools and the
httpauthmodule, triggering DeprecationWarnings if they’re used. Applications should instead adapt to use the more recent
auth_digesttools. This deprecated functionality will be removed in a subsequent release soon.
DeprecatedTooland the long-deprecated and disabled
nsgmlstools. See the rationale for this change.
17 Dec 2017
Users are encouraged to use the implementation from jaraco.collections except when dealing with headers in CherryPy.
17 Dec 2017
PR #1671: Restore support for installing CherryPy into environments hostile to namespace packages, broken since the 11.1.0 release.
03 Dec 2017
#1665: In request processing, when an invalid cookie is received, render the actual error message reported rather than guessing (sometimes incorrectly) what error occurred.
20 Nov 2017
17 Nov 2017
Drop support for Python 3.1 and 3.2.
#1625: Removed response timeout and timeout monitor and related exceptions, as it not possible to interrupt a request. Servers that wish to exit a request prematurely are recommended to monitor
response.timeand raise an exception or otherwise act accordingly.
Servers that previously disabled timeouts by invoking
cherrypy.engine.timeout_monitor.unsubscribe()will now crash. For forward-compatibility with this release on older versions of CherryPy, disable timeouts using the config option:
Or test for the presence of the timeout_monitor attribute:
with contextlib2.suppress(AttributeError): cherrypy.engine.timeout_monitor.unsubscribe()
TimeoutErrorexception has been removed, as it’s no longer called anywhere. If your application benefits from this Exception, please comment in the linked ticket describing the use case, and we’ll help devise a solution or bring the exception back.
Bump to cheroot 5.9.0.
cherrypy.test.webtestmodule is now merged with the
cheroot.test.webtestmodule. The CherryPy name is retained for now for compatibility and will be removed eventually.
13 Nov 2017
cherrypy.engine.subscribenow may be called without a callback, in which case it returns a decorator expecting the callback.
PR #1656: Images are now compressed using lossless compression and consume less space.
28 Oct 2017
PR #1611: Expose default status logic for a redirect as
HTTPRedirect.statusis now an instance property and derived from the value in
args. Although it was previously possible to set the property on an instance, and this change prevents that possibilty, CherryPy never relied on that behavior and we presume no applications depend on that interface.
#1627: Fixed issue in proxy tool where more than one port would appear in the
request.baseand thus in
PR #1645: Added new log format markers:
iholds a per-request UUID4
zoutputs UTC time in format of RFC 3339
cherrypy._cprequest.Request.unique_id.uuid4now has lazily invocable UUID4
#1646: Improve http status conversion helper.
PR #1638: Always use backslash for path separator when processing paths in staticdir.
#1190: Fix gzip, caching, and staticdir tools integration. Makes cache of gzipped content valid.
Requires cheroot 5.8.3 or later.
Also, many improvements around continuous integration and code quality checks.
This release contained an unintentional regression in environments that are hostile to namespace packages, such as Pex, Celery, and py2exe. See PR #1671 for details.
13 Mar 2017
Remove unintended dependency on
graphvizin Python 2.6.
12 Mar 2017
CPWSGIServer.versionnow reported as
CherryPy/x.y.z Cheroot/x.y.z. Bump to cheroot 5.2.0.
Max line restriction is now set to 120 for flake8 linter.
PEP 257 linter runs as separate allowed failure job in Travis CI.
A few bugs related to undeclared variables have been fixed.
pre-committesting goes faster due to enabled caching.
07 Feb 2017
Bump to cheroot 5.1.0.
#794: Prefer setting max-age for session cookie expiration, moving MSIE hack into a function documenting its purpose.
20 Jan 2017
Use this functionality from the portend package directly.
13 Jan 2017
PR #1547: Replaced
cherryddistutils script with a setuptools console entry point.
When running CherryPy in daemon mode, the forked process no longer changes directory to
/. If that behavior is something on which your application relied and should rely, please file a ticket with the project.
27 Dec 2016
26 Dec 2016
25 Dec 2016
#1537: Disable dependency on pypiwin32 on Python 3.6 until a viable build of pypiwin32 can be made on that Python version.
24 Dec 2016
Consolidated some documentation and include the more concise readme in the package long description, as found on PyPI.
27 Sep 2016
04 Sep 2016
HTTPErrornow also works as a context manager.
#1487: The sessions tool now accepts a
storage_classparameter, which supersedes the new deprecated
storage_classshould be the actual Session subclass to be used.
Releases now use
setuptools_scmto track the release versions. Therefore, releases can be cut by simply tagging a commit in the repo. Versions numbers are now stored in exactly one place.
03 Sep 2016
02 Sep 2016
#1483: Remove Deprecated constructs:
PR #1476: Drop support for python-memcached<1.58
#1401: Handle NoSSLErrors.
wsgiserver.WSGIGateway.respond, the application must now yield bytes and not text, as the spec requires. If text is received, it will now raise a ValueError instead of silently encoding using ISO-8859-1.
25 Jul 2016
PR #1458: Implement systemd’s socket activation mechanism for CherryPy servers, based on work sponsored by Endless Computers.
Socket Activation allows one to setup a system so that systemd will sit on a port and start services ‘on demand’ (a little bit like inetd and xinetd used to do).
24 Jul 2016
Removed the long-deprecated backward compatibility for legacy config keys in the engine. Use the config for the namespaced-plugins instead:
autoreload_on -> autoreload.on
autoreload_frequency -> autoreload.frequency
autoreload_match -> autoreload.match
reload_files -> autoreload.files
deadlock_poll_frequency -> timeout_monitor.frequency
18 Jul 2016
#1441: Added tool to automatically convert request params based on type annotations (primarily in Python 3). For example:
@cherrypy.tools.params() def resource(self, limit: int): assert isinstance(limit, int)
16 Jul 2016
Issue #1411: Fix issue where autoreload fails when the host interpreter for CherryPy was launched using
14 Jul 2016
Combined wsgiserver2 and wsgiserver3 modules into a single module,
05 Jun 2016
Setuptools is now required to build CherryPy. Pure distutils installs are no longer supported. This change allows CherryPy to depend on other packages and re-use code from them. It’s still possible to install pre-built CherryPy packages (wheels) using pip without Setuptools.
six is now a requirement and subsequent requirements will be declared in the project metadata.
cherrypy.exposenow works on classes.
cherrypy.configdecorator is now used throughout the code internally.
05 Jun 2016
@cherrypy.exposenow will also set the exposed attribute on a class.
Rewrote all tutorials and internal usage to prefer the decorator usage of
exposerather than setting the attribute explicitly.
Removed test-specific code from tutorials.
05 Jun 2016
#1397: Fix for filenames with semicolons and quote characters in filenames found in headers.
#1311: Added decorator for registering tools.
#1194: Use simpler encoding rules for SCRIPT_NAME and PATH_INFO environment variables in CherryPy Tree allowing non-latin characters to pass even when
#1352: Ensure that multipart fields are decoded even when cached in a file.
10 May 2016
cherrypy.test.webtest.WebCasenow honors a ‘WEBTEST_INTERACTIVE’ environment variable to disable interactive tests (still enabled by default). Set to ‘0’ or ‘false’ or ‘False’ to disable interactive tests.
#1408: Fix AttributeError when listiterator was accessed using the
PR #1432: Fix errors with redirects to Unicode URLs.
30 Apr 2016
Bugfix issue #1315 for
test_HTTP11_pipeliningtest in Python 3.5
Bugfix issue #1382 regarding the keyword arguments support for Python 3 on the config file.
Add additional parameter
raise_subclsto the tests helpers
CPWebCase.getPageto have finer control on which exceptions can be raised.
Add support for direct keywords on the calls (e.g.
foo=bar) on the config file under Python 3.
Add additional validation to determine if the process is running as a daemon on
cherrypy.process.plugins.SignalHandlerto allow the execution of the testsuite under CI tools.
Removed deprecated support for
ssl_private_keyattributes and implicit construction of SSL adapter on Python 2 WSGI servers.
Default SSL Adapter on Python 2 is the builtin SSL adapter, matching Python 3 behavior.
Pull request #94: In proxy tool, defer to Host header for resolving the base if no base is supplied.
Drop support for Python 2.5 and earlier.
No longer build Windows installers by default.
Pull Request #116: Correct InternalServerError when null bytes in static file path. Now responds with 404 instead.
Pull Request #96: Pass
exc_infoto logger as keyword rather than formatting the error and injecting into the message.
CherryPy daemon may now be invoked with
python -m cherrypyin addition to the
Issue #1298: Fix SSL handling on CPython 2.7 with builtin SSL module and pyOpenSSL 0.14. This change will break PyPy for now.
Several documentation fixes.
Fixed HTTP range headers for negative length larger than content size.
Disabled universal wheel generation as wsgiserver has Python duality.
Pull Request #42: Correct TypeError in
check_authwhen encrypt is used.
Pull Request #59: Correct signature of HandlerWrapperTool.
Pull Request #60: Fix error in SessionAuth where login_screen was incorrectly used.
Issue #1077: Support keyword-only arguments in dispatchers (Python 3).
Issue #1019: Allow logging host name in the access log.
Pull Request #50: Fixed race condition in session cleanup.
Issue #1301: When the incoming queue is full, now reject additional connections. This functionality was added to CherryPy 3.0, but unintentionally lost in 3.1.
Miscellaneous quality improvements.
CherryPy adopts semver.