- What’s new in Tornado 4.1
- What’s new in Tornado 4.1
- Feb 7, 2015
- Highlights
- Backwards-compatibility notes
- tornado.concurrent
- tornado.curl_httpclient
- tornado.gen
- tornado.httpclient
- tornado.httpserver
- tornado.httputil
- tornado.ioloop
- tornado.iostream
- tornado.options
- tornado.platform.asyncio
- tornado.platform.twisted
- tornado.tcpclient
- tornado.tcpserver
- tornado.testing
- tornado.web
- tornado.websocket
What’s new in Tornado 4.1
What’s new in Tornado 4.1
Feb 7, 2015
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
Futuresin 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_optionskeyword argument to websocket_connect on the client side. -
When the appropriate packages are installed, it is possible to yield asyncio.Future or Twisted
Deferedobjects in Tornado coroutines.
Backwards-compatibility notes
- HTTPServer now calls
start_requestwith the correct arguments. This change is backwards-incompatible, affecting 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.
-
Future now catches and logs exceptions in its callbacks.
tornado.curl_httpclient
-
tornado.curl_httpclientnow supports request bodies forPATCHand custom methods. -
tornado.curl_httpclientnow supports resubmitting bodies after following redirects for methods other thanPOST. -
curl_httpclientnow runs the streaming and header callbacks on the IOLoop. -
tornado.curl_httpclientnow 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
Futuresin the order they resolve. -
When the singledispatch library is available (standard on Python 3.4, available via
pip install singledispatchon 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.enginenow correctly captures the stack context for its callbacks.
tornado.httpclient
- tornado.httpclient.HTTPRequest accepts a new argument
raise_error=Falseto suppress the default behavior of raising an error for non-200 response codes.
tornado.httpserver
-
HTTPServer now calls
start_requestwith 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.1instead of echoing the request version.
tornado.httputil
-
New function tornado.httputil.split_host_and_port for parsing the
netlocportion of URLs. -
The
contextargument to HTTPServerRequest is now optional, and if a context is supplied theremote_ipattribute 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-databodies will always be logged quietly instead of raising an unhandled exception; previously the behavior was inconsistent depending on the exact error.
tornado.ioloop
-
The
kqueueandselectIOLoop 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.
tornado.iostream
-
IOStream.start_tls now uses the
server_hostnameparameter for certificate validation. -
SSLIOStream will no longer consume 100% CPU after certain error conditions.
-
SSLIOStream no longer logs
EBADFerrors 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.
tornado.platform.asyncio
-
It is now possible to yield
asyncio.Futureobjects in coroutines when the singledispatch library is available andtornado.platform.asynciohas been imported. -
New methods tornado.platform.asyncio.to_tornado_future and to_asyncio_future convert between the two libraries’ Future classes.
tornado.platform.twisted
- It is now possible to yield
Deferredobjects in coroutines when the singledispatch library is available andtornado.platform.twistedhas 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_sizeargument.
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
tearDownwhen necessary.
tornado.web
-
The
asynchronousdecorator 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
reasonkeyword 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_hostsetting now match the request protocol instead of redirecting HTTPS to HTTP. -
Malformed
_xsrfcookies are now ignored instead of causing uncaught exceptions. -
Application.start_requestnow 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_optionskeyword argument to websocket_connect on the client side. -
WebSocketHandler no longer logs stack traces when the connection is closed.
-
WebSocketHandler.open now accepts
*args, **kwfor consistency withRequestHandler.getand related methods. -
The
Sec-WebSocket-Versionheader now includes all supported versions. -
websocket_connect now has a
on_message_callbackkeyword argument for callback-style use withoutread_message().
