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_interval setting in the low-level select() 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)

v8.5.1

(no Git tag matched)

v8.5.0

(no Git tag matched)

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 RuntimeError raised in the logs – by :user:`liamstask`.

v8.4.7

(no Git tag matched)

v8.4.6

(no Git tag matched)

v8.4.5

(no Git tag matched)

v8.4.4

(no Git tag matched)

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 HTTPRequest but no TCP FIN packet has been received yet over the wire – by :user:`meaksh`.

    This change populates the Keep-Alive header 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 ConnectionAbortedError traceback 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-level selectors (:issue:`249` via :pr:`301`) - by :user:`tommilligan`.

    This change also introduces a conditional dependency on selectors2 as a fall-back for legacy Python interpreters.

v8.3.1

(no Git tag matched)

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 --bind CLI option for abstract UNIX sockets.

v8.2.1

(no Git tag matched)

  • :cp-issue:`1818`: Restore support for None default argument to WebCase.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.cfg parser 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 pyproject.toml).

v7.0.0

(no Git tag matched)

  • :pr:`224`: Refactored “open URL” behavior in webtest to rely on retry_call. Callers can no longer pass raise_subcls or ssl_context positionally, but must pass them as keyword arguments.

v6.6.0

(no Git tag matched)

v6.5.8

(no Git tag matched)

v6.5.7

(no Git tag matched)

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)

v6.5.4

(no Git tag matched)

  • :issue:`113`: Fix cheroot.ssl.pyopenssl under Python 3.

  • :issue:`154` via :pr:`159`: Remove custom license field from dist metadata.

  • :issue:`95`: Fully integrate trustme into all TLS tests. Also remove all hardcoded TLS certificates.

  • :issue:`42`: Remove traces of unittest and ddt usage.

  • 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 ssl adapter.

  • Avoid deprecation warning with OpenSSL.SSL.Connection.

  • Fix socket wrapper in PyOpenSSL adapter.

  • Improve tests coverage:

v6.5.3

(no Git tag matched)

  • :pr:`149`: Make SCRIPT_NAME optional per PEP 333.

v6.5.2

(no Git tag matched)

v6.5.1

(no Git tag matched)

v6.5.0

(no Git tag matched)

v6.4.0

(no Git tag matched)

v6.3.3

(no Git tag matched)

v6.3.2

(no Git tag matched)

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 cheroot command and runpy launcher to launch a WSGI app from the command-line.

v6.2.4

(no Git tag matched)

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)

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_enabled and peercreds_resolve_enabled

    • get_peer_creds and resolve_peer_creds methods on connection

    • peer_pid, peer_uid, peer_gid, peer_user and peer_group properties on connection

    • X_REMOTE_PID, X_REMOTE_UID, X_REMOTE_GID, X_REMOTE_USER (REMOTE_USER) and X_REMOTE_GROUP WSGI environment variables when enabled and supported

    • Per-connection caching to reduce lookup cost

v6.1.2

(no Git tag matched)

v6.1.1

(no Git tag matched)

v6.1.0

(no Git tag matched)

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 webtest applications 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_netloc helper and recipe for calling it in a subclass.

v5.10.0

(no Git tag matched)

  • Minor refactorings of cheroot/server.py to 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.webtest adopts the one method that was unique in CherryPy, now superseding the implementation there.

  • Substantial cleanup around compatibility functions (_compat module).

  • 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 Allowed if proxy_mode is False

    • Validate 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)

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:

    • Make it compliant with RFC 7230, RFC 7231 and RFC 2616

    • Fix setting of environ['QUERY_STRING'] in WSGI

    • Introduce proxy_mode and strict_mode argument in server.HTTPRequest

    • Fix decoding of Unicode URIs in WSGI 1.0 gateway

v5.7.0

(no Git tag matched)

  • CI improvements:

    • Don’t run tests during deploy stage

    • Use VM based build job environments only for pyenv environments

    • Opt-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_ssl error handler calls

  • :issue:`21`: Fix test_conn tests:

    • 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_close test

    • Fix test_No_Message_Body

    • Clarify test_598 fail reason

  • :issue:`36`: Add GitHub templates for PR, issue && contributing

  • :issue:`27`: Default HTTP Server header to Cheroot version str

  • Cleanup _compat functions 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)

v5.5.1

(no Git tag matched)

v5.5.0

(no Git tag matched)

  • :issue:`17` via :pr:`25`: Instead of a read_headers function, cheroot now supplies a HeaderReader class to perform the same function.

    Any HTTPRequest object may override the header_reader attribute to customize the handling of incoming headers.

    The server module also presents a provisional implementation of a DropUnderscoreHeaderReader that 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)

v5.2.0

(no Git tag matched)

  • :issue:`5`: Set Server.version to Cheroot version instead of CherryPy version.

  • :pr:`4`: Prevent tracebacks and drop bad HTTPS connections in the BuiltinSSLAdapter, similar to pyOpenSSLAdapter.

  • :issue:`3`: Test suite now runs and many tests pass. Some are still failing.

v5.1.0

(no Git tag matched)

v5.0.1

(no Git tag matched)

v5.0.0

(no Git tag matched)