1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
What's new in Tornado 6.1.0
===========================
Oct 30, 2020
------------
Deprecation notice
~~~~~~~~~~~~~~~~~~
- This is the last release of Tornado to support Python 3.5. Future versions
will require Python 3.6 or newer.
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.gen`
~~~~~~~~~~~~~
- `.coroutine` now has better support for the Python 3.7+ ``contextvars`` module.
In particular, the ``ContextVar.reset`` method is now supported.
`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.
|