2015-02-07 17:46:33 +00:00
|
|
|
What's new in Tornado 4.1
|
|
|
|
=========================
|
2014-08-07 03:03:27 +00:00
|
|
|
|
2015-02-07 17:46:33 +00:00
|
|
|
Feb 7, 2015
|
2014-08-07 03:03:27 +00:00
|
|
|
-----------
|
|
|
|
|
2015-01-24 23:35:18 +00:00
|
|
|
Highlights
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
* If a `.Future` contains an exception but that exception is never
|
|
|
|
examined or re-raised (e.g. by yielding the `.Future`), a stack
|
|
|
|
trace will be logged when the `.Future` is garbage-collected.
|
|
|
|
* New class `tornado.gen.WaitIterator` provides a way to iterate
|
|
|
|
over ``Futures`` in the order they resolve.
|
2014-08-07 03:03:27 +00:00
|
|
|
* The `tornado.websocket` module now supports compression via the
|
|
|
|
"permessage-deflate" extension. Override
|
|
|
|
`.WebSocketHandler.get_compression_options` to enable on the server
|
|
|
|
side, and use the ``compression_options`` keyword argument to
|
|
|
|
`.websocket_connect` on the client side.
|
2015-01-25 00:21:34 +00:00
|
|
|
* When the appropriate packages are installed, it is possible to yield
|
|
|
|
`asyncio.Future` or Twisted ``Defered`` objects in Tornado coroutines.
|
2015-01-24 23:35:18 +00:00
|
|
|
|
|
|
|
Backwards-compatibility notes
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `.HTTPServer` now calls ``start_request`` with the correct
|
|
|
|
arguments. This change is backwards-incompatible, afffecting any
|
|
|
|
application which implemented `.HTTPServerConnectionDelegate` by
|
|
|
|
following the example of `.Application` instead of the documented
|
|
|
|
method signatures.
|
|
|
|
|
|
|
|
`tornado.concurrent`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* If a `.Future` contains an exception but that exception is never
|
|
|
|
examined or re-raised (e.g. by yielding the `.Future`), a stack
|
|
|
|
trace will be logged when the `.Future` is garbage-collected.
|
2015-01-11 23:58:53 +00:00
|
|
|
* `.Future` now catches and logs exceptions in its callbacks.
|
2015-01-24 23:35:18 +00:00
|
|
|
|
|
|
|
``tornado.curl_httpclient``
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* ``tornado.curl_httpclient`` now supports request bodies for ``PATCH``
|
|
|
|
and custom methods.
|
|
|
|
* ``tornado.curl_httpclient`` now supports resubmitting bodies after
|
|
|
|
following redirects for methods other than ``POST``.
|
2015-01-11 23:58:53 +00:00
|
|
|
* ``curl_httpclient`` now runs the streaming and header callbacks on
|
|
|
|
the IOLoop.
|
2015-01-24 23:35:18 +00:00
|
|
|
* ``tornado.curl_httpclient`` now uses its own logger for debug output
|
|
|
|
so it can be filtered more easily.
|
|
|
|
|
|
|
|
`tornado.gen`
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* New class `tornado.gen.WaitIterator` provides a way to iterate
|
|
|
|
over ``Futures`` in the order they resolve.
|
|
|
|
* When the `~functools.singledispatch` library is available (standard on
|
|
|
|
Python 3.4, available via ``pip install singledispatch`` on older versions),
|
|
|
|
the `.convert_yielded` function can be used to make other kinds of objects
|
|
|
|
yieldable in coroutines.
|
|
|
|
* New function `tornado.gen.sleep` is a coroutine-friendly
|
|
|
|
analogue to `time.sleep`.
|
|
|
|
* `.gen.engine` now correctly captures the stack context for its callbacks.
|
|
|
|
|
|
|
|
`tornado.httpclient`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2015-01-11 23:58:53 +00:00
|
|
|
* `tornado.httpclient.HTTPRequest` accepts a new argument
|
|
|
|
``raise_error=False`` to suppress the default behavior of raising an
|
|
|
|
error for non-200 response codes.
|
2015-01-24 23:35:18 +00:00
|
|
|
|
|
|
|
`tornado.httpserver`
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `.HTTPServer` now calls ``start_request`` with the correct
|
|
|
|
arguments. This change is backwards-incompatible, afffecting any
|
|
|
|
application which implemented `.HTTPServerConnectionDelegate` by
|
|
|
|
following the example of `.Application` instead of the documented
|
|
|
|
method signatures.
|
|
|
|
* `.HTTPServer` now tolerates extra newlines which are sometimes inserted
|
|
|
|
between requests on keep-alive connections.
|
|
|
|
* `.HTTPServer` can now use keep-alive connections after a request
|
|
|
|
with a chunked body.
|
|
|
|
* `.HTTPServer` now always reports ``HTTP/1.1`` instead of echoing
|
|
|
|
the request version.
|
|
|
|
|
|
|
|
`tornado.httputil`
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2015-01-11 23:58:53 +00:00
|
|
|
* New function `tornado.httputil.split_host_and_port` for parsing
|
|
|
|
the ``netloc`` portion of URLs.
|
2015-01-24 23:35:18 +00:00
|
|
|
* The ``context`` argument to `.HTTPServerRequest` is now optional,
|
|
|
|
and if a context is supplied the ``remote_ip`` attribute is also optional.
|
2015-01-11 23:58:53 +00:00
|
|
|
* `.HTTPServerRequest.body` is now always a byte string (previously the default
|
|
|
|
empty body would be a unicode string on python 3).
|
|
|
|
* Header parsing now works correctly when newline-like unicode characters
|
|
|
|
are present.
|
|
|
|
* Header parsing again supports both CRLF and bare LF line separators.
|
2015-01-18 17:17:35 +00:00
|
|
|
* Malformed ``multipart/form-data`` bodies will always be logged
|
|
|
|
quietly instead of raising an unhandled exception; previously
|
|
|
|
the behavior was inconsistent depending on the exact error.
|
2015-01-24 23:35:18 +00:00
|
|
|
|
|
|
|
`tornado.ioloop`
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* The ``kqueue`` and ``select`` IOLoop implementations now report
|
|
|
|
writeability correctly, fixing flow control in IOStream.
|
2015-01-24 23:18:09 +00:00
|
|
|
* When a new `.IOLoop` is created, it automatically becomes "current"
|
|
|
|
for the thread if there is not already a current instance.
|
2015-01-24 23:35:18 +00:00
|
|
|
* New method `.PeriodicCallback.is_running` can be used to see
|
|
|
|
whether the `.PeriodicCallback` has been started.
|
|
|
|
|
|
|
|
`tornado.iostream`
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `.IOStream.start_tls` now uses the ``server_hostname`` parameter
|
|
|
|
for certificate validation.
|
|
|
|
* `.SSLIOStream` will no longer consume 100% CPU after certain error conditions.
|
|
|
|
* `.SSLIOStream` no longer logs ``EBADF`` errors during the handshake as they
|
|
|
|
can result from nmap scans in certain modes.
|
|
|
|
|
|
|
|
`tornado.options`
|
|
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `~tornado.options.parse_config_file` now always decodes the config
|
|
|
|
file as utf8 on Python 3.
|
|
|
|
* `tornado.options.define` more accurately finds the module defining the
|
|
|
|
option.
|
|
|
|
|
|
|
|
``tornado.platform.asyncio``
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2015-01-24 23:18:09 +00:00
|
|
|
* It is now possible to yield ``asyncio.Future`` objects in coroutines
|
|
|
|
when the `~functools.singledispatch` library is available and
|
|
|
|
``tornado.platform.asyncio`` has been imported.
|
|
|
|
* New methods `tornado.platform.asyncio.to_tornado_future` and
|
|
|
|
`~tornado.platform.asyncio.to_asyncio_future` convert between
|
|
|
|
the two libraries' `.Future` classes.
|
2015-01-24 23:35:18 +00:00
|
|
|
|
|
|
|
``tornado.platform.twisted``
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* It is now possible to yield ``Deferred`` objects in coroutines
|
|
|
|
when the `~functools.singledispatch` library is available and
|
|
|
|
``tornado.platform.twisted`` has been imported.
|
|
|
|
|
|
|
|
`tornado.tcpclient`
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `.TCPClient` will no longer raise an exception due to an ill-timed
|
|
|
|
timeout.
|
|
|
|
|
|
|
|
`tornado.tcpserver`
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `.TCPServer` no longer ignores its ``read_chunk_size`` argument.
|
|
|
|
|
|
|
|
`tornado.testing`
|
|
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* `.AsyncTestCase` has better support for multiple exceptions. Previously
|
|
|
|
it would silently swallow all but the last; now it raises the first
|
|
|
|
and logs all the rest.
|
|
|
|
* `.AsyncTestCase` now cleans up `.Subprocess` state on ``tearDown`` when
|
|
|
|
necessary.
|
|
|
|
|
|
|
|
`tornado.web`
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* The `.asynchronous` decorator now understands `concurrent.futures.Future`
|
|
|
|
in addition to `tornado.concurrent.Future`.
|
|
|
|
* `.StaticFileHandler` no longer logs a stack trace if the connection is
|
|
|
|
closed while sending the file.
|
|
|
|
* `.RequestHandler.send_error` now supports a ``reason`` keyword
|
|
|
|
argument, similar to `tornado.web.HTTPError`.
|
|
|
|
* `.RequestHandler.locale` now has a property setter.
|
|
|
|
* `.Application.add_handlers` hostname matching now works correctly with
|
|
|
|
IPv6 literals.
|
|
|
|
* Redirects for the `.Application` ``default_host`` setting now match
|
|
|
|
the request protocol instead of redirecting HTTPS to HTTP.
|
|
|
|
* Malformed ``_xsrf`` cookies are now ignored instead of causing
|
|
|
|
uncaught exceptions.
|
|
|
|
* ``Application.start_request`` now has the same signature as
|
|
|
|
`.HTTPServerConnectionDelegate.start_request`.
|
|
|
|
|
|
|
|
`tornado.websocket`
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
* The `tornado.websocket` module now supports compression via the
|
|
|
|
"permessage-deflate" extension. Override
|
|
|
|
`.WebSocketHandler.get_compression_options` to enable on the server
|
|
|
|
side, and use the ``compression_options`` keyword argument to
|
|
|
|
`.websocket_connect` on the client side.
|
|
|
|
* `.WebSocketHandler` no longer logs stack traces when the connection
|
|
|
|
is closed.
|
|
|
|
* `.WebSocketHandler.open` now accepts ``*args, **kw`` for consistency
|
|
|
|
with ``RequestHandler.get`` and related methods.
|
|
|
|
* The ``Sec-WebSocket-Version`` header now includes all supported versions.
|
|
|
|
* `.websocket_connect` now has a ``on_message_callback`` keyword argument
|
|
|
|
for callback-style use without ``read_message()``.
|