Back to Tornado

What's new in Tornado 5.1

docs/releases/v5.1.0.rst

6.5.57.7 KB
Original Source

What's new in Tornado 5.1

July 12, 2018

Deprecation notice


- Tornado 6.0 will drop support for Python 2.7 and 3.4. The minimum
  supported Python version will be 3.5.2.
- The ``tornado.stack_context`` module is deprecated and will be removed
  in Tornado 6.0. The reason for this is that it is not feasible to
  provide this module's semantics in the presence of ``async def``
  native coroutines. ``ExceptionStackContext`` is mainly obsolete
  thanks to coroutines. ``StackContext`` lacks a direct replacement
  although the new ``contextvars`` package (in the Python standard
  library beginning in Python 3.7) may be an alternative.
- Callback-oriented code often relies on ``ExceptionStackContext`` to
  handle errors and prevent leaked connections. In order to avoid the
  risk of silently introducing subtle leaks (and to consolidate all of
  Tornado's interfaces behind the coroutine pattern), ``callback``
  arguments throughout the package are deprecated and will be removed
  in version 6.0. All functions that had a ``callback`` argument
  removed now return a `.Future` which should be used instead.
- Where possible, deprecation warnings are emitted when any of these
  deprecated interfaces is used. However, Python does not display
  deprecation warnings by default. To prepare your application for
  Tornado 6.0, run Python with the ``-Wd`` argument or set the
  environment variable ``PYTHONWARNINGS`` to ``d``. If your
  application runs on Python 3 without deprecation warnings, it should
  be able to move to Tornado 6.0 without disruption.

`tornado.auth`
~~~~~~~~~~~~~~

- `.OAuthMixin._oauth_get_user_future` may now be a native coroutine.
- All ``callback`` arguments in this package are deprecated and will
  be removed in 6.0. Use the coroutine interfaces instead.
- The ``OAuthMixin._oauth_get_user`` method is deprecated and will be removed in
  6.0. Override `~.OAuthMixin._oauth_get_user_future` instead.

`tornado.autoreload`
  • The command-line autoreload wrapper is now preserved if an internal autoreload fires.
  • The command-line wrapper no longer starts duplicated processes on windows when combined with internal autoreload.

tornado.concurrent


- `.run_on_executor` now returns `.Future` objects that are compatible
  with ``await``.
- The ``callback`` argument to `.run_on_executor` is deprecated and will
  be removed in 6.0.
- ``return_future`` is deprecated and will be removed in 6.0.

`tornado.gen`
~~~~~~~~~~~~~

- Some older portions of this module are deprecated and will be removed
  in 6.0. This includes ``engine``, ``YieldPoint``, ``Callback``,
  ``Wait``, ``WaitAll``, ``MultiYieldPoint``, and ``Task``.
- Functions decorated with ``@gen.coroutine`` will no longer accept
  ``callback`` arguments in 6.0.

`tornado.httpclient`
  • The behavior of raise_error=False is changing in 6.0. Currently it suppresses all errors; in 6.0 it will only suppress the errors raised due to completed responses with non-200 status codes.
  • The callback argument to .AsyncHTTPClient.fetch is deprecated and will be removed in 6.0.
  • tornado.httpclient.HTTPError has been renamed to .HTTPClientError to avoid ambiguity in code that also has to deal with tornado.web.HTTPError. The old name remains as an alias.
  • tornado.curl_httpclient now supports non-ASCII characters in username and password arguments.
  • .HTTPResponse.request_time now behaves consistently across simple_httpclient and curl_httpclient, excluding time spent in the max_clients queue in both cases (previously this time was included in simple_httpclient but excluded in curl_httpclient). In both cases the time is now computed using a monotonic clock where available.
  • .HTTPResponse now has a start_time attribute recording a wall-clock (time.time) timestamp at which the request started (after leaving the max_clients queue if applicable).

tornado.httputil


- `.parse_multipart_form_data` now recognizes non-ASCII filenames in
  RFC 2231/5987 (``filename*=``) format.
- ``HTTPServerRequest.write`` is deprecated and will be removed in 6.0. Use
  the methods of ``request.connection`` instead.
- Malformed HTTP headers are now logged less noisily.

`tornado.ioloop`
~~~~~~~~~~~~~~~~

- `.PeriodicCallback` now supports a ``jitter`` argument to randomly
  vary the timeout.
- ``IOLoop.set_blocking_signal_threshold``,
  ``IOLoop.set_blocking_log_threshold``, ``IOLoop.log_stack``,
  and ``IOLoop.handle_callback_exception`` are deprecated and will
  be removed in 6.0.
- Fixed a `KeyError` in `.IOLoop.close` when `.IOLoop` objects are
  being opened and closed in multiple threads.

`tornado.iostream`
  • All callback arguments in this module are deprecated except for .BaseIOStream.set_close_callback. They will be removed in 6.0.
  • streaming_callback arguments to .BaseIOStream.read_bytes and .BaseIOStream.read_until_close are deprecated and will be removed in 6.0.

tornado.netutil


- Improved compatibility with GNU Hurd.

`tornado.options`
  • tornado.options.parse_config_file now allows setting options to strings (which will be parsed the same way as tornado.options.parse_command_line) in addition to the specified type for the option.

tornado.platform.twisted


- ``TornadoReactor`` and ``TwistedIOLoop`` are deprecated and will be
  removed in 6.0. Instead, Tornado will always use the asyncio event loop
  and twisted can be configured to do so as well.

``tornado.stack_context``
~~~~~~~~~~~~~~~~~~~~~~~~~

- The ``tornado.stack_context`` module is deprecated and will be removed
  in 6.0.

`tornado.testing`
~~~~~~~~~~~~~~~~~

- `.AsyncHTTPTestCase.fetch` now takes a ``raise_error`` argument.
  This argument has the same semantics as `.AsyncHTTPClient.fetch`,
  but defaults to false because tests often need to deal with non-200
  responses (and for backwards-compatibility).
- The `.AsyncTestCase.stop` and `.AsyncTestCase.wait` methods are
  deprecated.

`tornado.web`
~~~~~~~~~~~~~

- New method `.RequestHandler.detach` can be used from methods
  that are not decorated with ``@asynchronous`` (the decorator
  was required to use ``self.request.connection.detach()``.
- `.RequestHandler.finish` and `.RequestHandler.render` now return
  ``Futures`` that can be used to wait for the last part of the
  response to be sent to the client.
- `.FallbackHandler` now calls ``on_finish`` for the benefit of
  subclasses that may have overridden it.
- The ``asynchronous`` decorator is deprecated and will be removed in 6.0.
- The ``callback`` argument to `.RequestHandler.flush` is deprecated
  and will be removed in 6.0.


`tornado.websocket`
~~~~~~~~~~~~~~~~~~~

- When compression is enabled, memory limits now apply to the
  post-decompression size of the data, protecting against DoS attacks.
- `.websocket_connect` now supports subprotocols.
- `.WebSocketHandler` and `.WebSocketClientConnection` now have
  ``selected_subprotocol`` attributes to see the subprotocol in use.
- The `.WebSocketHandler.select_subprotocol` method is now called with
  an empty list instead of a list containing an empty string if no
  subprotocols were requested by the client.
- `.WebSocketHandler.open` may now be a coroutine.
- The ``data`` argument to `.WebSocketHandler.ping` is now optional.
- Client-side websocket connections no longer buffer more than one
  message in memory at a time.
- Exception logging now uses `.RequestHandler.log_exception`.

`tornado.wsgi`
~~~~~~~~~~~~~~

- ``WSGIApplication`` and ``WSGIAdapter`` are deprecated and will be removed
  in Tornado 6.0.