What’s new in Tornado 4.3¶
Nov 6, 2015¶
Highlights¶
The new async/await keywords in Python 3.5 are supported. In most cases,
async def
can be used in place of the@gen.coroutine
decorator. Inside a function defined withasync def
, useawait
instead ofyield
to wait on an asynchronous operation. Coroutines defined with async/await will be faster than those defined with@gen.coroutine
andyield
, but do not support some features includingCallback
/Wait
or the ability to yield a TwistedDeferred
. See the users’ guide for more.The async/await keywords are also available when compiling with Cython in older versions of Python.
Deprecation notice¶
This will be the last release of Tornado to support Python 2.6 or 3.2. Note that PyPy3 will continue to be supported even though it implements a mix of Python 3.2 and 3.3 features.
Installation¶
Tornado has several new dependencies:
ordereddict
on Python 2.6,singledispatch
on all Python versions prior to 3.4 (This was an optional dependency in prior versions of Tornado, and is now mandatory), andbackports_abc>=0.4
on all versions prior to 3.5. These dependencies will be installed automatically when installing withpip
orsetup.py install
. These dependencies will not be required when running on Google App Engine.Binary wheels are provided for Python 3.5 on Windows (32 and 64 bit).
tornado.auth
¶
New method
OAuth2Mixin.oauth2_request
can be used to make authenticated requests with an access token.Now compatible with callbacks that have been compiled with Cython.
tornado.autoreload
¶
Fixed an issue with the autoreload command-line wrapper in which imports would be incorrectly interpreted as relative.
tornado.curl_httpclient
¶
Fixed parsing of multi-line headers.
allow_nonstandard_methods=True
now bypasses body sanity checks, in the same way as insimple_httpclient
.The
PATCH
method now allows a body withoutallow_nonstandard_methods=True
.
tornado.gen
¶
WaitIterator
now supports theasync for
statement on Python 3.5.@gen.coroutine
can be applied to functions compiled with Cython. On python versions prior to 3.5, thebackports_abc
package must be installed for this functionality.Multi
andmulti_future
are deprecated and replaced by a unified functionmulti
.
tornado.httpclient
¶
tornado.httpclient.HTTPError
is now copyable with thecopy
module.
tornado.httpserver
¶
Requests containing both
Content-Length
andTransfer-Encoding
will be treated as an error.
tornado.httputil
¶
HTTPHeaders
can now be pickled and unpickled.
tornado.ioloop
¶
IOLoop(make_current=True)
now works as intended instead of raising an exception.The Twisted and asyncio IOLoop implementations now clear
current()
when they exit, like the standard IOLoops.IOLoop.add_callback
is faster in the single-threaded case.IOLoop.add_callback
no longer raises an error when called on a closed IOLoop, but the callback will not be invoked.
tornado.iostream
¶
Coroutine-style usage of
IOStream
now converts most errors intoStreamClosedError
, which has the effect of reducing log noise from exceptions that are outside the application’s control (especially SSL errors).StreamClosedError
now has areal_error
attribute which indicates why the stream was closed. It is the same as theerror
attribute ofIOStream
but may be more easily accessible than theIOStream
itself.Improved error handling in
read_until_close
.Logging is less noisy when an SSL server is port scanned.
EINTR
is now handled on all reads.
tornado.locale
¶
tornado.locale.load_translations
now accepts encodings other than UTF-8. UTF-16 and UTF-8 will be detected automatically if a BOM is present; for other encodingsload_translations
has anencoding
parameter.
tornado.locks
¶
tornado.log
¶
A new time-based log rotation mode is available with
--log_rotate_mode=time
,--log-rotate-when
, andlog-rotate-interval
.
tornado.netutil
¶
bind_sockets
now supportsSO_REUSEPORT
with thereuse_port=True
argument.
tornado.options
¶
Dashes and underscores are now fully interchangeable in option names.
tornado.queues
¶
Queue
now supports theasync for
statement on Python 3.5.
tornado.simple_httpclient
¶
When following redirects,
streaming_callback
andheader_callback
will no longer be run on the redirect responses (only the final non-redirect).Responses containing both
Content-Length
andTransfer-Encoding
will be treated as an error.
tornado.template
¶
tornado.template.ParseError
now includes the filename in addition to line number.Whitespace handling has become more configurable. The
Loader
constructor now has awhitespace
argument, there is a newtemplate_whitespace
Application
setting, and there is a new{% whitespace %}
template directive. All of these options take a mode name defined in thetornado.template.filter_whitespace
function. The default mode issingle
, which is the same behavior as prior versions of Tornado.Non-ASCII filenames are now supported.
tornado.testing
¶
ExpectLog
objects now have a booleanlogged_stack
attribute to make it easier to test whether an exception stack trace was logged.
tornado.web
¶
The hard limit of 4000 bytes per outgoing header has been removed.
StaticFileHandler
returns the correctContent-Type
for files with.gz
,.bz2
, and.xz
extensions.Responses smaller than 1000 bytes will no longer be compressed.
The default gzip compression level is now 6 (was 9).
Fixed a regression in Tornado 4.2.1 that broke
StaticFileHandler
with apath
of/
.tornado.web.HTTPError
is now copyable with thecopy
module.The exception
Finish
now accepts an argument which will be passed to the methodRequestHandler.finish
.New
Application
settingxsrf_cookie_kwargs
can be used to set additional attributes such assecure
orhttponly
on the XSRF cookie.Application.listen
now returns theHTTPServer
it created.
tornado.websocket
¶
Fixed handling of continuation frames when compression is enabled.