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.gzip
data no longer cause an infinite loop.tornado.httpclient
decompress_response=False
now works correctly with
curl_httpclient
.curl_httpclient
(assuming the version of pycurl is recent enough).User-Agent
of Tornado/$VERSION
is now used if the
user_agent
parameter is not specified.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).request_timeout
and/or connect_timeout
to zero is now supported
to disable the timeout.tornado.httputil
parse_body_arguments
now accepts incompletely-escaped non-ASCII inputs.tornado.iostream
ssl.CertificateError
during the SSL handshake is now handled correctly.tornado.log
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
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.Allow
) are now preserved.reverse_url
correctly handles escaped characters in the regex route.Etag
headers are now generated with SHA-512 instead of MD5.tornado.websocket
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.