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 with async def, use await instead of yield to wait on an asynchronous operation. Coroutines defined with async/await will be faster than those defined with @gen.coroutine and yield, but do not support some features including Callback/Wait or the ability to yield a Twisted Deferred. 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), and backports_abc>=0.4 on all versions prior to 3.5. These dependencies will be installed automatically when installing with pip or setup.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 in simple_httpclient.
- The PATCH method now allows a body without allow_nonstandard_methods=True.
tornado.gen¶
- WaitIterator now supports the async for statement on Python 3.5.
- @gen.coroutine can be applied to functions compiled with Cython. On python versions prior to 3.5, the backports_abc package must be installed for this functionality.
- Multi and multi_future are deprecated and replaced by a unified function multi.
tornado.httpclient¶
- tornado.httpclient.HTTPError is now copyable with the copy module.
tornado.httpserver¶
- Requests containing both Content-Length and Transfer-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 into StreamClosedError, which has the effect of reducing log noise from exceptions that are outside the application’s control (especially SSL errors).
- StreamClosedError now has a real_error attribute which indicates why the stream was closed. It is the same as the error attribute of IOStream but may be more easily accessible than the IOStream 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 encodings load_translations has an encoding parameter.
tornado.log¶
- A new time-based log rotation mode is available with --log_rotate_mode=time, --log-rotate-when, and log-rotate-interval.
tornado.netutil¶
- bind_sockets now supports SO_REUSEPORT with the reuse_port=True argument.
tornado.options¶
- Dashes and underscores are now fully interchangeable in option names.
tornado.queues¶
- Queue now supports the async for statement on Python 3.5.
tornado.simple_httpclient¶
- When following redirects, streaming_callback and header_callback will no longer be run on the redirect responses (only the final non-redirect).
- Responses containing both Content-Length and Transfer-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 a whitespace argument, there is a new template_whitespace Application setting, and there is a new {% whitespace %} template directive. All of these options take a mode name defined in the tornado.template.filter_whitespace function. The default mode is single, which is the same behavior as prior versions of Tornado.
- Non-ASCII filenames are now supported.
tornado.testing¶
- ExpectLog objects now have a boolean logged_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 correct Content-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 a path of /.
- tornado.web.HTTPError is now copyable with the copy module.
- The exception Finish now accepts an argument which will be passed to the method RequestHandler.finish.
- New Application setting xsrf_cookie_kwargs can be used to set additional attributes such as secure or httponly on the XSRF cookie.
- Application.listen now returns the HTTPServer it created.
tornado.websocket¶
- Fixed handling of continuation frames when compression is enabled.