]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Add release notes for 6.1, bump version to 6.1b1 2928/head
authorBen Darnell <ben@bendarnell.com>
Wed, 30 Sep 2020 02:23:56 +0000 (22:23 -0400)
committerBen Darnell <ben@bendarnell.com>
Wed, 30 Sep 2020 02:51:16 +0000 (22:51 -0400)
docs/index.rst
docs/releases.rst
docs/releases/v6.1.0.rst [new file with mode: 0644]
tornado/__init__.py
tornado/platform/asyncio.py

index 7ba5cbf75b43b115bf42ef96ae1fab3007b69df8..8a663c307c66d4f7ed474f5fd8c6efb37b8d2162 100644 (file)
@@ -120,13 +120,6 @@ is limited (Even though Tornado is built on ``asyncio``, which
 supports Windows, Tornado does not use the APIs that are necessary for
 scalable networking on Windows).
 
-On Windows, Tornado requires the ``WindowsSelectorEventLoop``. This is
-the default in Python 3.7 and older, but Python 3.8 defaults to an
-event loop that is not compatible with Tornado. Applications that use
-Tornado on Windows with Python 3.8 must call
-``asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())``
-at the beginning of their ``main`` file/function.
-
 Documentation
 -------------
 
index 81babaa3e1529031dbd9d34c7ba533d620302a46..a478821d780e2aeb3507df3661f0cbf24a5ae172 100644 (file)
@@ -4,6 +4,7 @@ Release notes
 .. toctree::
    :maxdepth: 2
 
+   releases/v6.1.0
    releases/v6.0.4
    releases/v6.0.3
    releases/v6.0.2
diff --git a/docs/releases/v6.1.0.rst b/docs/releases/v6.1.0.rst
new file mode 100644 (file)
index 0000000..02289ab
--- /dev/null
@@ -0,0 +1,94 @@
+What's new in Tornado 6.1.0
+===========================
+
+Oct X, 2020
+-----------
+
+General changes
+~~~~~~~~~~~~~~~
+
+- Windows support has been improved. Tornado is now compatible with the proactor
+  event loop (which became the default in Python 3.8) by automatically falling
+  back to running a selector in a second thread. This means that it is no longer
+  necessary to explicitly configure a selector event loop, although doing so may
+  improve performance. This does not change the fact that Tornado is significantly
+  less scalable on Windows than on other platforms. 
+- Binary wheels are now provided for Windows, MacOS, and Linux (amd64 and arm64).
+
+`tornado.http1connection`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- ``HEAD`` requests to handlers that used chunked encoding no longer produce malformed output. 
+- Certain kinds of malformed ``gzip`` data no longer cause an infinite loop.
+
+`tornado.httpclient`
+~~~~~~~~~~~~~~~~~~~~
+
+- Setting ``decompress_response=False`` now works correctly with
+  ``curl_httpclient``. 
+- Mixing requests with and without proxies works correctly in ``curl_httpclient``
+  (assuming the version of pycurl is recent enough).
+- A default ``User-Agent`` of ``Tornado/$VERSION`` is now used if the
+  ``user_agent`` parameter is not specified. 
+- After a 303 redirect, ``tornado.simple_httpclient`` always uses ``GET``.
+  Previously this would use ``GET`` if the original request was a ``POST`` and
+  would otherwise reuse the original request method. For ``curl_httpclient``, the
+  behavior depends on the version of ``libcurl`` (with the most recent versions
+  using ``GET`` after 303 regardless of the original method).
+- Setting ``request_timeout`` and/or ``connect_timeout`` to zero is now supported
+  to disable the timeout.
+
+`tornado.httputil`
+~~~~~~~~~~~~~~~~~~
+
+- Header parsing is now faster.
+- `.parse_body_arguments` now accepts incompletely-escaped non-ASCII inputs.
+
+`tornado.iostream`
+~~~~~~~~~~~~~~~~~~
+
+- `ssl.CertificateError` during the SSL handshake is now handled correctly.
+- Reads that are resolved while the stream is closing are now handled correctly.
+
+`tornado.log`
+~~~~~~~~~~~~~
+
+- When colored logging is enabled, ``logging.CRITICAL`` messages are now
+  recognized and colored magenta.
+
+`tornado.netutil`
+~~~~~~~~~~~~~~~~~
+
+- ``EADDRNOTAVAIL`` is now ignored when binding to ``localhost`` with IPv6. This
+  error is common in docker.
+
+`tornado.platform.asyncio`
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- `.AnyThreadEventLoopPolicy` now also configures a selector event loop for
+  these threads (the proactor event loop only works on the main thread)
+
+``tornado.platform.auto``
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- The ``set_close_exec`` function has been removed.
+
+`tornado.testing`
+~~~~~~~~~~~~~~~~~
+
+- `.ExpectLog` now has a ``level`` argument to ensure that the given log level
+  is enabled.
+
+`tornado.web`
+~~~~~~~~~~~~~
+
+- ``RedirectHandler.get`` now accepts keyword arguments.
+- When sending 304 responses, more headers (including ``Allow``) are now preserved.
+- ``reverse_url`` correctly handles escaped characters in the regex route. 
+- Default ``Etag`` headers are now generated with SHA-512 instead of MD5.
+
+`tornado.websocket`
+~~~~~~~~~~~~~~~~~~~
+
+- The ``ping_interval`` timer is now stopped when the connection is closed.
+- `.websocket_connect` now raises an error when it encounters a redirect instead of hanging.
index c053149d04661380f858630b959630ed9134ce69..ca162bff67f669dfb4c0c7f634385ebe9b7d5515 100644 (file)
@@ -22,5 +22,5 @@
 # is zero for an official release, positive for a development branch,
 # or negative for a release candidate or beta (after the base version
 # number has been incremented)
-version = "6.1.dev1"
-version_info = (6, 1, 0, -100)
+version = "6.1b1"
+version_info = (6, 1, 0, -99)
index fc88f918e6301626442e096940004dfca5fe04cf..633a35f9c6d7ce80504498dcbf6c8692a8f3553e 100644 (file)
@@ -14,9 +14,12 @@ the same event loop.
 
 .. note::
 
-   Tornado requires the `~asyncio.AbstractEventLoop.add_reader` family of
-   methods, so it is not compatible with the `~asyncio.ProactorEventLoop` on
-   Windows. Use the `~asyncio.SelectorEventLoop` instead.
+   Tornado is designed to use a selector-based event loop. On Windows,
+   where a proactor-based event loop has been the default since Python 3.8,
+   a selector event loop is emulated by running ``select`` on a separate thread.
+   Configuring ``asyncio`` to use a selector event loop may improve performance
+   of Tornado (but may reduce performance of other ``asyncio``-based libraries
+   in the same process).
 """
 
 import asyncio