History¶
v8.6.0¶
(no Git tag matched)
Significant improvements:
:issue:`384` via :pr:`385`, :pr:`406`: Exposed type stubs with annotations for public API – by :user:`kasium`.
:pr:`401` (related to the :pr:`352` effort): Started reusing the the
expriration_intervalsetting in the low-levelselect()invocation, effectively reducing the system load under the Windows OS when idle, that is noticeable on low-end hardware systems – by :user:`MichaIng`.
Internal changes:
Implemented a manual-trigger-based release workflow.
Integrated publishing GitHub Releases into the workflow.
Migrated the docs theme to Furo (created by :user:`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.
v8.5.2¶
(no Git tag matched)
:issue:`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 :user:`cameronbrunner`.
v8.5.1¶
(no Git tag matched)
:cp-issue:`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 :user:`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 :user:`liamstask`.
v8.5.0¶
(no Git tag matched)
:issue:`305` via :pr:`311`: In
ConnectionManager, process connections as they become active rather than waiting for atickevent, addressing performance degradation introduced in v8.1.0 – by :user:`liamstask`.:issue:`341` via :pr:`342`: Suppress legitimate OS errors expected on shutdown – by :user:`webknjaz`.
v8.4.8¶
(no Git tag matched)
:issue:`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 :user:`liamstask`.
v8.4.7¶
(no Git tag matched)
:pr:`334`: Started filtering out TLS/SSL errors when the version requested by the client is unsupported – by :user:`sanderjo` and :user:`Safihre`.
v8.4.6¶
(no Git tag matched)
:issue:`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 settingserving=Falseon :py:data:SIGINTand :py:data:SIGTERM– by :user:`marc1n` and :user:`cristicbz`.
v8.4.5¶
(no Git tag matched)
:issue:`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 :user:`liamstask`.
:issue:`312` via :pr:`316`: Added a regression test for the error handling in
get_conn()to ensure more stability – by :user:`cyraxjoe`.
v8.4.4¶
(no Git tag matched)
:issue:`304` via :pr:`309`: Refactored
ConnectionManagerto useget_map()and reorganized the readable connection tracking – by :user:`liamstask`.:issue:`304` via :pr:`309`: Fixed the server shutdown sequence to avoid race condition resulting in accepting new connections while it is being terminated – by :user:`liamstask`.
v8.4.3¶
(no Git tag matched)
: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 :user:`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.
v8.4.2¶
(no Git tag matched)
Fixed a significant performance regression introduced in v8.1.0 (:issue:`305` via :pr:`308`) - by :user:`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.
v8.4.1¶
(no Git tag matched)
Prevent
ConnectionAbortedErrortraceback from being printed out to the terminal output during the app start-up on Windows when built-in TLS adapter is used (:issue:`302` via :pr:`306`) - by :user:`mxii-ca`.
v8.4.0¶
(no Git tag matched)
Converted management from low-level
select()to high-levelselectors(:issue:`249` via :pr:`301`) - by :user:`tommilligan`.This change also introduces a conditional dependency on
selectors2as a fall-back for legacy Python interpreters.
v8.3.1¶
(no Git tag matched)
Fixed TLS socket related unclosed resource warnings (:pr:`291` and :pr:`298`).
Made terminating keep-alive connections more graceful (:issue:`263` via :pr:`277`).
v8.3.0¶
(no Git tag matched)
:cp-issue:`910` via :pr:`243`: Provide TLS-related details via WSGI environment interface.
:pr:`248`: Fix parsing of the
--bindCLI option for abstract UNIX sockets.
v8.2.1¶
(no Git tag matched)
:cp-issue:`1818`: Restore support for
Nonedefault argument toWebCase.getPage().
v8.2.0¶
(no Git tag matched)
Deprecated use of negative timeouts as alias for infinite timeouts in
ThreadPool.stop.:cp-issue:`1662` via :pr:`74`: For OPTION requests, bypass URI as path if it does not appear absolute.
v8.1.0¶
(no Git tag matched)
Workers are now request-based, addressing the long-standing issue with keep-alive connections (:issue:`91` via :pr:`199`).
v8.0.0¶
(no Git tag matched)
:issue:`231` via :pr:`232`: Remove custom
setup.cfgparser handling, allowing the project (includingsdist) 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 inpyproject.toml).
v7.0.0¶
(no Git tag matched)
:pr:`224`: Refactored “open URL” behavior in
webtestto rely on retry_call. Callers can no longer passraise_subclsorssl_contextpositionally, but must pass them as keyword arguments.
v6.6.0¶
(no Git tag matched)
Revisit :pr:`85` under :pr:`221`. Now
backports.functools_lru_cacheis only required on Python 3.2 and earlier.:cp-issue:`1206` via :pr:`204`: Fix race condition in threadpool shrink code.
v6.5.8¶
(no Git tag matched)
:issue:`222` via :commit:`621f4ee`: Fix
socket.SO_PEERCREDconstant fallback value under PowerPC.
v6.5.7¶
(no Git tag matched)
:issue:`198` via :commit:`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.
v6.5.6¶
(no Git tag matched)
:issue:`218` via :pr:`219`: Fix HTTP parser to return 400 on invalid major-only HTTP version in Request-Line.
v6.5.5¶
(no Git tag matched)
:issue:`99` via :pr:`186`: Sockets now collect statistics (bytes read and written) on Python 3 same as Python 2.
:cp-issue:`1618` via :pr:`180`: Ignore OpenSSL’s 1.1+ Error 0 under any Python while wrapping a socket.
v6.5.4¶
(no Git tag matched)
:issue:`113`: Fix
cheroot.ssl.pyopensslunder Python 3.:issue:`154` via :pr:`159`: Remove custom license field from dist metadata.
:issue:`95`: Fully integrate
trustmeinto all TLS tests. Also remove all hardcoded TLS certificates.:issue:`42`: Remove traces of
unittestandddtusage.Fix invalid input processing in
cheroot._compat.extract_bytes().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
ssladapter.Avoid deprecation warning with
OpenSSL.SSL.Connection.Fix socket wrapper in PyOpenSSL adapter.
Improve tests coverage:
Client TLS certificate tests
PEERCREDSlookup
v6.5.3¶
(no Git tag matched)
:pr:`149`: Make
SCRIPT_NAMEoptional per PEP 333.
v6.5.2¶
(no Git tag matched)
:issue:`6` via :pr:`109`: Fix import of
cheroot.ssl.pyopensslby refactoring and separatingcheroot.makefile’s stream wrappers.:issue:`95` via :pr:`109`: Add initial tests for SSL layer with use of
trustme
v6.5.1¶
(no Git tag matched)
:issue:`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.
v6.5.0¶
(no Git tag matched)
:cp-issue:`1001` via :pr:`52` and :pr:`108`: Add support for validating client certificates.
v6.4.0¶
(no Git tag matched)
:issue:`68` via :pr:`98`: Factor out parts of
cheroot.server.HTTPServer.start()intoprepare()andserve()
v6.3.3¶
(no Git tag matched)
Fix bug with returning empty result in
cheroot.ssl.builtin.BuiltinSSLAdapter.wrap()
v6.3.2¶
(no Git tag matched)
:issue:`100` via :pr:`101`: Respond with HTTP 400 to malicious
Content-Lengthin request headers.
v6.3.1¶
(no Git tag matched)
:cp-issue:`1618`: Ignore OpenSSL’s 1.1+ Error 0 under Python 2 while wrapping a socket.
v6.3.0¶
(no Git tag matched)
:pr:`87`: Add
cherootcommand and runpy launcher to launch a WSGI app from the command-line.
v6.2.4¶
(no Git tag matched)
Fix missing
resolve_peer_credsargument incheroot.wsgi.Serverbeing bypassed intocheroot.server.HTTPServer.:pr:`85`: Revert conditional dependencies. System packagers should honor the dependencies as declared by cheroot, which are defined intentionally.
v6.2.3¶
(no Git tag matched)
:pr:`85`: Skip installing dependencies from backports namespace under Python 3.
v6.2.2¶
(no Git tag matched)
:issue:`84` (:cp-issue:`1704`): Fix regression, causing
ModuleNotFoundErrorundercygwin.
v6.2.1¶
(no Git tag matched)
:pr:`83`: Fix regression, caused by inverted check for Windows OS.
Add more URLs to distribution metadata
v6.2.0¶
(no Git tag matched)
:pr:`37`: Implement PEERCRED lookup over UNIX-socket HTTP connection.
Discover connected process’ PID/UID/GID
Respect server switches:
peercreds_enabledandpeercreds_resolve_enabledget_peer_credsandresolve_peer_credsmethods on connectionpeer_pid,peer_uid,peer_gid,peer_userandpeer_groupproperties on connectionX_REMOTE_PID,X_REMOTE_UID,X_REMOTE_GID,X_REMOTE_USER(REMOTE_USER) andX_REMOTE_GROUPWSGI environment variables when enabled and supportedPer-connection caching to reduce lookup cost
v6.1.2¶
(no Git tag matched)
:issue:`81`: Fix regression introduced by :pr:`80`.
Restore
storing bound socketin Windows broken by use ofsocket.AF_UNIX
v6.1.1¶
(no Git tag matched)
:pr:`80`: Fix regression introduced by :commit:`68a5769`.
Get back support for
socket.AF_UNIXin stored bound address incheroot.server.HTTPServer.bind_addr
v6.1.0¶
(no Git tag matched)
:pr:`67`: Refactor test suite to completely rely on pytest.
Integrate
pytest-testmonandpytest-watchStabilize testing
:cp-issue:`1664` via :pr:`66`: Implement input termination flag support as suggested by @mitsuhiko in his wsgi.input_terminated Proposal.
:issue:`73`: Fix SSL error bypassing.
:issue:`77` via :pr:`78`: Fix WSGI documentation example to support Python 3.
:pr:`76`: Send correct conditional HTTP error in helper function.
:cp-issue:`1404` via :pr:`75`: Fix headers being unsent before request closed. Now we double check that they’ve been sent.
Minor docs improvements.
Minor refactoring.
v6.0.0¶
(no Git tag matched)
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.
v5.11.0¶
(no Git tag matched)
:cp-issue:`1621`: To support
webtestapplications that feed absolute URIs togetPage()but expect the scheme/host/port to be ignored (as cheroot 5.8 and earlier did), provide astrip_netlochelper and recipe for calling it in a subclass.
v5.10.0¶
(no Git tag matched)
Minor refactorings of
cheroot/server.pyto reduce redundancy of behavior.Delinting with fewer exceptions.
Restored license to BSD.
v5.9.2¶
(no Git tag matched)
:issue:`61`: Re-release without spurious files in the distribution.
v5.9.1¶
(no Git tag matched)
:issue:`58`: Reverted encoding behavior in wsgi module to correct regression in CherryPy tests.
v5.9.0¶
(no Git tag matched)
:cp-issue:`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 (
_compatmodule).License unintentionally changed to MIT. BSD still declared and intended.
v5.8.3¶
(no Git tag matched)
Improve HTTP request line validation:
Improve HTTP version parsing
Fix HTTP CONNECT method processing:
Respond with
405 Method Not Allowedifproxy_mode is FalseValidate that request-target is in authority-form
Improve tests in
test.test_core:pr:`44`: Fix EPROTOTYPE @ Mac OS
v5.8.2¶
(no Git tag matched)
Fix :pr:`39` regression. Add HTTP request line check: absolute URI path must start with a forward slash (“/”).
v5.8.1¶
(no Git tag matched)
CI improvements:
Add basic working Circle CI v2 config
Fix URI encoding bug introduced in :pr:`39`
Improve
cheroot.test.helper.Controllerto properly match Unicode
v5.8.0¶
(no Git tag matched)
CI improvements:
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
cheroot._compat:issue:`38` via :pr:`39`: Improve URI parsing:
v5.7.0¶
(no Git tag matched)
CI improvements:
Don’t run tests during deploy stage
Use VM based build job environments only for
pyenvenvironmentsOpt-in for beta trusty image @ Travis CI
Be verbose when running tests (show test names)
Show
xfail/skip details during test run
:issue:`34`: Fix
_handle_no_sslerror handler calls:issue:`21`: Fix
test_conntests:Improve setup_server def in HTTP connection tests
Fix HTTP streaming tests
Fix HTTP/1.1 pipelining test under Python 3
Fix
test_readall_or_closetestFix
test_No_Message_BodyClarify
test_598fail reason
:issue:`36`: Add GitHub templates for PR, issue && contributing
:issue:`27`: Default HTTP Server header to Cheroot version str
Cleanup
_compatfunctions from server module
v5.6.0¶
(no Git tag matched)
Fix all PEP 257 related errors in all non-test modules.
cheroot/test/*folder is only one left allowed to fail with this linter.:cp-issue:`1602` and :pr:`30`: Optimize chunked body reader loop by returning empty data is the size is 0.
:cp-issue:`1486`: Reset buffer if the body size is unknown
:cp-issue:`1131`: Add missing size hint to SizeCheckWrapper
v5.5.2¶
(no Git tag matched)
:pr:`32`: Ignore
"unknown error"and"https proxy request"SSL errors.
v5.5.1¶
(no Git tag matched)
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 :cp-issue:`1392`.
Ref: https://forums.sabnzbd.org/viewtopic.php?f=2&t=22728&p=112251
v5.5.0¶
(no Git tag matched)
:issue:`17` via :pr:`25`: Instead of a read_headers function, cheroot now supplies a
HeaderReaderclass to perform the same function.Any
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.
v5.4.0¶
(no Git tag matched)
:pr:`22`: Add “ciphers” parameter to SSLAdapter.
v5.3.0¶
(no Git tag matched)
:pr:`8`: Updated style to better conform to PEP 8.
Refreshed project with jaraco skeleton.
Docs now built and deployed at RTD.
v5.2.0¶
(no Git tag matched)
:issue:`5`: Set
Server.versionto Cheroot version instead of CherryPy version.:pr:`4`: Prevent tracebacks and drop bad HTTPS connections in the
BuiltinSSLAdapter, similar topyOpenSSLAdapter.:issue:`3`: Test suite now runs and many tests pass. Some are still failing.
v5.1.0¶
(no Git tag matched)
Removed the WSGI prefix from classes in
cheroot.wsgi. Kept aliases for compatibility.:issue:`1`: Corrected docstrings in
cheroot.serverandcheroot.wsgi.:pr:`2`: Fixed
ImportErrorwhen pkg_resources cannot find the cheroot distribution.
v5.0.1¶
(no Git tag matched)
Fix error in
parse_request_uricreated in :commit:`68a5769`.
v5.0.0¶
(no Git tag matched)
Initial release based on :gh:`cherrypy.cherrypy.wsgiserver 8.8.0 <cherrypy/cherrypy/tree/v8.8.0/cherrypy/wsgiserver>`.