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.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.