(no Git tag matched)
#252 via PR #339: Cheroot now requires Python 3.6 or later. Python 3.5 and Python 2.7 are still supported by the maint/8.x branch and stabilizing bugfixes will be accepted to that branch.
03 Jan 2022
#384 via PR #385, PR #406: Exposed type stubs with annotations for public API – by @kasium.
PR #401 (related to the PR #352 effort): Started reusing the the
expriration_intervalsetting as timeout in the low-level
select()invocation, effectively reducing the system load when idle, that is noticeable on low-end hardware systems. On Windows OS, due to different
select()behavior, the effect is less significant and comes with a theoretically decreased performance on quickly repeating requests, which has however found to be not significant in real world scenarios. – by @MichaIng.
Implemented a manual-trigger-based release workflow.
Integrated publishing GitHub Releases into the workflow.
Migrated the docs theme to Furo (created by @pradyunsg).
Attempted to improve the stability of testing.
Configured the CI to test the same distribution as will be shipped.
Improved the linting setup and contributor checklists.
Stopped running tests under Ubuntu 16.04.
Tweaked the distribution packages metadata to satisfy strict checks.
Implemented distribution build reproducibility using a pip constraints lock-file.
Added per-environment lock-files into the tox test environments.
18 Jan 2021
#358 via PR #359: Fixed a regression from PR #199 that made the worker threads exit on invalid connection attempts and could make the whole server unresponsive once there was no workers left. – by @cameronbrunner.
12 Dec 2020
CherryPy #1873 via PR #340: Resurrected an unintentionally removed feature of interrupting a server main thread by externally assigning an exception to the
HTTPServer.interruptproperty – by @liamstask.
PR #350: Fixed the incarnation of an earlier regression of not resetting the serving state on
SIGINToriginally fixed by PR #322 and PR #331 but reintroduced by the changes in PR #311 – by @liamstask.
05 Dec 2020
#305 via PR #311: In
ConnectionManager, process connections as they become active rather than waiting for a
tickevent, addressing performance degradation introduced in v8.1.0 – by @liamstask.
#341 via PR #342: Suppress legitimate OS errors expected on shutdown – by @webknjaz.
24 Nov 2020
#317 via PR #337: Fixed a regression in 8.4.5 where the connections dictionary would change size during iteration, leading to a
RuntimeErrorraised in the logs – by @liamstask.
15 Nov 2020
PR #334: Started filtering out TLS/SSL errors when the version requested by the client is unsupported – by @sanderjo and @Safihre.
15 Nov 2020
#328 via PR #322 and PR #331: Fixed a regression introduced in the earlier refactoring in v8.4.4 via PR #309 that caused the
serve()method to skip setting
SIGTERM– by @marc1n and @cristicbz.
24 Aug 2020
#312 via PR #313: Fixed a regression introduced in the earlier refactoring in v8.4.4 via PR #309 that caused the connection manager to modify the selector map while looping over it – by @liamstask.
#312 via PR #316: Added a regression test for the error handling in
get_conn()to ensure more stability – by @cyraxjoe.
12 Aug 2020
#304 via PR #309: Refactored
get_map()and reorganized the readable connection tracking – by @liamstask.
#304 via PR #309: Fixed the server shutdown sequence to avoid race condition resulting in accepting new connections while it is being terminated – by @liamstask.
12 Aug 2020
PR #282: Fixed a race condition happening when an HTTP client attempts to reuse a persistent HTTP connection after it’s been discarded on the server in
HTTPRequestbut no TCP FIN packet has been received yet over the wire – by @meaksh.
This change populates the
Keep-Aliveheader exposing the timeout value for persistent HTTP/1.1 connections which helps mitigate such race conditions by letting the client know not to reuse the connection after that time interval.
28 Jul 2020
Fixed a significant performance regression introduced in v8.1.0 (#305 via PR #308) - by @mar10.
The issue turned out to add 0.1s delay on new incoming connection processing. We’ve lowered that delay to mitigate the problem short-term, better fix is yet to come.
26 Jul 2020
ConnectionAbortedErrortraceback from being printed out to the terminal output during the app start-up on Windows when built-in TLS adapter is used (#302 via PR #306) - by @mxii-ca.
23 Jul 2020
Converted management from low-level
selectors(#249 via PR #301) - by @tommilligan.
This change also introduces a conditional dependency on
selectors2as a fall-back for legacy Python interpreters.
13 Jul 2020
Fixed TLS socket related unclosed resource warnings (PR #291 and PR #298).
Made terminating keep-alive connections more graceful (#263 via PR #277).
09 Feb 2020
CherryPy #910 via PR #243: Provide TLS-related details via WSGI environment interface.
PR #248: Fix parsing of the
--bindCLI option for abstract UNIX sockets.
17 Oct 2019
CherryPy #1818: Restore support for
Nonedefault argument to
14 Oct 2019
Deprecated use of negative timeouts as alias for infinite timeouts in
CherryPy #1662 via PR #74: For OPTION requests, bypass URI as path if it does not appear absolute.
09 Oct 2019
Workers are now request-based, addressing the long-standing issue with keep-alive connections (#91 via PR #199).
09 Oct 2019
#231 via PR #232: Remove custom
setup.cfgparser handling, allowing the project (including
sdist) to build/run on setuptools 41.4. Now building cheroot requires setuptools 30.3 or later (for declarative config support) and preferably 34.4 or later (as indicated in
26 Sep 2019
PR #224: Refactored “open URL” behavior in
webtestto rely on retry_call. Callers can no longer pass
ssl_contextpositionally, but must pass them as keyword arguments.
25 Sep 2019
Revisit PR #85 under PR #221. Now
backports.functools_lru_cacheis only required on Python 3.2 and earlier.
CherryPy #1206 via PR #204: Fix race condition in threadpool shrink code.
05 Sep 2019
03 Sep 2019
#198 via 9f7affe: Fix race condition when toggling stats counting in the middle of request processing.
Improve post Python 3.9 compatibility checks.
Fix support of abstract namespace sockets.
19 Aug 2019
25 Apr 2019
#99 via PR #186: Sockets now collect statistics (bytes read and written) on Python 3 same as Python 2.
CherryPy #1618 via PR #180: Ignore OpenSSL’s 1.1+ Error 0 under any Python while wrapping a socket.
01 Jan 2019
cheroot.ssl.pyopensslunder Python 3.
#154 via PR #159: Remove custom license field from dist metadata.
#95: Fully integrate
trustmeinto all TLS tests. Also remove all hardcoded TLS certificates.
Fix invalid input processing in
Fix returning error explanation over plain HTTP for PyOpenSSL.
Add a fallback for
os.lchmod()where it’s missing.
Avoid traceback for invalid client cert with builtin
Avoid deprecation warning with
Fix socket wrapper in PyOpenSSL adapter.
Improve tests coverage:
Client TLS certificate tests
20 Dec 2018
PR #149: Make
SCRIPT_NAMEoptional per PEP 333.
03 Sep 2018
#6 via PR #109: Fix import of
cheroot.ssl.pyopensslby refactoring and separating
cheroot.makefile’s stream wrappers.
#95 via PR #109: Add initial tests for SSL layer with use of
02 Sep 2018
#93 via PR #110: Improve UNIX socket FS access mode in
cheroot.server.HTTPServer.prepare()on a file socket when starting to listen to it.
29 Aug 2018
CherryPy #1001 via PR #52 and PR #108: Add support for validating client certificates.
01 Aug 2018
#68 via PR #98: Factor out parts of
10 Jul 2018
Fix bug with returning empty result in
16 Jun 2018
21 May 2018
CherryPy #1618: Ignore OpenSSL’s 1.1+ Error 0 under Python 2 while wrapping a socket.
17 May 2018
PR #87: Add
cherootcommand and runpy launcher to launch a WSGI app from the command-line.
19 Apr 2018
cheroot.wsgi.Serverbeing bypassed into
PR #85: Revert conditional dependencies. System packagers should honor the dependencies as declared by cheroot, which are defined intentionally.
14 Apr 2018
PR #85: Skip installing dependencies from backports namespace under Python 3.
14 Apr 2018
#84 (CherryPy #1704): Fix regression, causing
10 Apr 2018
PR #83: Fix regression, caused by inverted check for Windows OS.
Add more URLs to distribution metadata
10 Apr 2018
PR #37: Implement PEERCRED lookup over UNIX-socket HTTP connection.
Discover connected process’ PID/UID/GID
Respect server switches:
resolve_peer_credsmethods on connection
peer_groupproperties on connection
X_REMOTE_GROUPWSGI environment variables when enabled and supported
Per-connection caching to reduce lookup cost
08 Apr 2018
#81: Fix regression introduced by PR #80.
storing bound socketin Windows broken by use of
07 Apr 2018
PR #80: Fix regression introduced by 68a5769.
Get back support for
socket.AF_UNIXin stored bound address in
05 Apr 2018
PR #67: Refactor test suite to completely rely on pytest.
CherryPy #1664 via PR #66: Implement input termination flag support as suggested by @mitsuhiko in his wsgi.input_terminated Proposal.
#73: Fix SSL error bypassing.
#77 via PR #78: Fix WSGI documentation example to support Python 3.
PR #76: Send correct conditional HTTP error in helper function.
CherryPy #1404 via PR #75: Fix headers being unsent before request closed. Now we double check that they’ve been sent.
Minor docs improvements.
04 Dec 2017
Drop support for Python 2.6, 3.1, 3.2, and 3.3.
Also drop built-in SSL support for Python 2.7 earlier than 2.7.9.
04 Dec 2017
CherryPy #1621: To support
webtestapplications that feed absolute URIs to
getPage()but expect the scheme/host/port to be ignored (as cheroot 5.8 and earlier did), provide a
strip_netlochelper and recipe for calling it in a subclass.
23 Nov 2017
Minor refactorings of
cheroot/server.pyto reduce redundancy of behavior.
Delinting with fewer exceptions.
Restored license to BSD.
23 Nov 2017
#61: Re-release without spurious files in the distribution.
17 Nov 2017
#58: Reverted encoding behavior in wsgi module to correct regression in CherryPy tests.
16 Nov 2017
CherryPy #1088 and PR #53: Avoid using SO_REUSEADDR on Windows where it has different semantics.
cheroot.tests.webtestadopts the one method that was unique in CherryPy, now superseding the implementation there.
Substantial cleanup around compatibility functions (
License unintentionally changed to MIT. BSD still declared and intended.
11 Aug 2017
Improve HTTP request line validation:
Improve HTTP version parsing
Fix HTTP CONNECT method processing:
405 Method Not Allowedif
proxy_mode is False
Validate that request-target is in authority-form
Improve tests in
PR #44: Fix EPROTOTYPE @ Mac OS
07 Aug 2017
Fix PR #39 regression. Add HTTP request line check: absolute URI path must start with a forward slash (“/”).
05 Aug 2017
Add basic working Circle CI v2 config
Fix URI encoding bug introduced in PR #39
cheroot.test.helper.Controllerto properly match Unicode
01 Aug 2017
Switch to native PyPy support in Travis CI
Take into account PEP 257 compliant modules
Build wheel in AppVeyor and store it as an artifact
Improve urllib support in
24 Jun 2017
Don’t run tests during deploy stage
Use VM based build job environments only for
Opt-in for beta trusty image @ Travis CI
Be verbose when running tests (show test names)
xfail/skip details during test run
_handle_no_sslerror handler calls
Improve setup_server def in HTTP connection tests
Fix HTTP streaming tests
Fix HTTP/1.1 pipelining test under Python 3
#36: Add GitHub templates for PR, issue && contributing
#27: Default HTTP Server header to Cheroot version str
_compatfunctions from server module
20 Jun 2017
Fix all PEP 257 related errors in all non-test modules.
cheroot/test/*folder is only one left allowed to fail with this linter.
CherryPy #1602 and PR #30: Optimize chunked body reader loop by returning empty data is the size is 0.
CherryPy #1486: Reset buffer if the body size is unknown
CherryPy #1131: Add missing size hint to SizeCheckWrapper
18 Jun 2017
PR #32: Ignore
"https proxy request"SSL errors.
18 Jun 2017
Make AppVeyor list separate tests in corresponding tab.
PR #29: Configure Travis CI build stages.
Prioritize tests by stages.
Move deploy stage to be run very last after all other stages finish.
PR #31: Ignore “Protocol wrong type for socket” (EPROTOTYPE) @ OSX for non-blocking sockets.
This was originally fixed for regular sockets in CherryPy #1392.
02 May 2017
#17 via PR #25: Instead of a read_headers function, cheroot now supplies a
HeaderReaderclass to perform the same function.
HTTPRequestobject may override the header_reader attribute to customize the handling of incoming headers.
The server module also presents a provisional implementation of a
DropUnderscoreHeaderReaderthat will exclude any headers containing an underscore. It remains an exercise for the implementer to demonstrate how this functionality might be employed in a server such as CherryPy.
PR #26: Configured TravisCI to run tests under OS X.
19 Mar 2017
PR #22: Add “ciphers” parameter to SSLAdapter.
12 Mar 2017
PR #8: Updated style to better conform to PEP 8.
Refreshed project with jaraco skeleton.
Docs now built and deployed at RTD.
02 Mar 2017
Server.versionto Cheroot version instead of CherryPy version.
PR #4: Prevent tracebacks and drop bad HTTPS connections in the
BuiltinSSLAdapter, similar to
#3: Test suite now runs and many tests pass. Some are still failing.
22 Jan 2017
Removed the WSGI prefix from classes in
cheroot.wsgi. Kept aliases for compatibility.
#1: Corrected docstrings in
PR #2: Fixed
ImportErrorwhen pkg_resources cannot find the cheroot distribution.
14 Jan 2017
Fix error in
parse_request_uricreated in 68a5769.
14 Jan 2017
Initial release based on cherrypy.cherrypy.wsgiserver 8.8.0.