tornado/docs/releases/v4.3.0.rst

201 lines
6.8 KiB
ReStructuredText

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 :ref:`the users'
guide <native_coroutines>` 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 `~.BaseIOStream.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.locks`
~~~~~~~~~~~~~~~
* `.Lock` and `.Semaphore` now support the ``async with`` statement on
Python 3.5.
`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.