- 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. - 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. - When the appropriate packages are installed, it is possible to yield
asyncio.Future or Twisted
Defered
objects in Tornado coroutines.
- .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.
- 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.
- .Future now catches and logs exceptions in its callbacks.
tornado.curl_httpclient
now supports request bodies forPATCH
and custom methods.tornado.curl_httpclient
now supports resubmitting bodies after following redirects for methods other thanPOST
.curl_httpclient
now runs the streaming and header callbacks on the IOLoop.tornado.curl_httpclient
now uses its own logger for debug output so it can be filtered more easily.
- 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.HTTPRequest accepts a new argument
raise_error=False
to suppress the default behavior of raising an error for non-200 response codes.
- .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.
- New function tornado.httputil.split_host_and_port for parsing
the
netloc
portion of URLs. - The
context
argument to .HTTPServerRequest is now optional, and if a context is supplied theremote_ip
attribute is also optional. - .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.
- 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.
- The
kqueue
andselect
IOLoop implementations now report writeability correctly, fixing flow control in IOStream. - When a new .IOLoop is created, it automatically becomes "current" for the thread if there is not already a current instance.
- New method .PeriodicCallback.is_running can be used to see whether the .PeriodicCallback has been started.
- .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.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.
- It is now possible to yield
asyncio.Future
objects in coroutines when the ~functools.singledispatch library is available andtornado.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.
- It is now possible to yield
Deferred
objects in coroutines when the ~functools.singledispatch library is available andtornado.platform.twisted
has been imported.
- .TCPClient will no longer raise an exception due to an ill-timed timeout.
- .TCPServer no longer ignores its
read_chunk_size
argument.
- .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.
- 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.
- 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 withRequestHandler.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 withoutread_message()
.