What’s new in Tornado 2.2¶
Jan 30, 2012¶
Highlights¶
- Updated and expanded WebSocket support.
- Improved compatibility in the Twisted/Tornado bridge.
- Template errors now generate better stack traces.
- Better exception handling in
tornado.gen
.
Security fixes¶
tornado.simple_httpclient
now disables SSLv2 in all cases. Previously SSLv2 would be allowed if the Python interpreter was linked against a pre-1.0 version of OpenSSL.
Backwards-incompatible changes¶
tornado.process.fork_processes
now raisesSystemExit
if all child processes exit cleanly rather than returningNone
. The old behavior was surprising and inconsistent with most of the documented examples of this function (which did not check the return value).- On Python 2.6,
tornado.simple_httpclient
only supports SSLv3. This is because Python 2.6 does not expose a way to support both SSLv3 and TLSv1 without also supporting the insecure SSLv2. tornado.websocket
no longer supports the older “draft 76” version of the websocket protocol by default, although this version can be enabled by overridingtornado.websocket.WebSocketHandler.allow_draft76
.
tornado.httpclient
¶
SimpleAsyncHTTPClient
no longer hangs onHEAD
requests, responses with no content, or emptyPOST
/PUT
response bodies.SimpleAsyncHTTPClient
now supports 303 and 307 redirect codes.tornado.curl_httpclient
now accepts non-integer timeouts.tornado.curl_httpclient
now supports basic authentication with an empty password.
tornado.httpserver
¶
HTTPServer
withxheaders=True
will no longer acceptX-Real-IP
headers that don’t look like valid IP addresses.HTTPServer
now treats theConnection
request header as case-insensitive.
tornado.ioloop
and tornado.iostream
¶
IOStream.write
now works correctly when given an empty string.IOStream.read_until
(andread_until_regex
) now perform better when there is a lot of buffered data, which improves performance ofSimpleAsyncHTTPClient
when downloading files with lots of chunks.SSLIOStream
now works correctly whenssl_version
is set to a value other thanSSLv23
.- Idle
IOLoops
no longer wake up several times a second. tornado.ioloop.PeriodicCallback
no longer triggers duplicate callbacks when stopped and started repeatedly.
tornado.template
¶
- Exceptions in template code will now show better stack traces that reference lines from the original template file.
{#
and#}
can now be used for comments (and unlike the old{% comment %}
directive, these can wrap other template directives).- Template directives may now span multiple lines.
tornado.web
¶
- Now behaves better when given malformed
Cookie
headers RequestHandler.redirect
now has astatus
argument to send status codes other than 301 and 302.- New method
RequestHandler.on_finish
may be overridden for post-request processing (as a counterpart toRequestHandler.prepare
) StaticFileHandler
now outputsContent-Length
andEtag
headers onHEAD
requests.StaticFileHandler
now has overridableget_version
andparse_url_path
methods for use in subclasses.RequestHandler.static_url
now takes aninclude_host
parameter (in addition to the old support for theRequestHandler.include_host
attribute).
tornado.websocket
¶
- Updated to support the latest version of the protocol, as finalized in RFC 6455.
- Many bugs were fixed in all supported protocol versions.
tornado.websocket
no longer supports the older “draft 76” version of the websocket protocol by default, although this version can be enabled by overridingtornado.websocket.WebSocketHandler.allow_draft76
.WebSocketHandler.write_message
now accepts abinary
argument to send binary messages.- Subprotocols (i.e. the
Sec-WebSocket-Protocol
header) are now supported; see theWebSocketHandler.select_subprotocol
method for details. .WebSocketHandler.get_websocket_scheme
can be used to select the appropriate url scheme (ws://
orwss://
) in cases whereHTTPRequest.protocol
is not set correctly.
Other modules¶
tornado.auth.TwitterMixin.authenticate_redirect
now takes acallback_uri
parameter.tornado.auth.TwitterMixin.twitter_request
now accepts both URLs and partial paths (complete URLs are useful for the search API which follows different patterns).- Exception handling in
tornado.gen
has been improved. It is now possible to catch exceptions thrown by aTask
. tornado.netutil.bind_sockets
now works whengetaddrinfo
returns duplicate addresses.tornado.platform.twisted
compatibility has been significantly improved. Twisted version 11.1.0 is now supported in addition to 11.0.0.tornado.process.fork_processes
correctly reseeds therandom
module even whenos.urandom
is not implemented.tornado.testing.main
supports a new flag--exception_on_interrupt
, which can be set to false to makeCtrl-C
kill the process more reliably (at the expense of stack traces when it does so).tornado.version_info
is now a four-tuple so official releases can be distinguished from development branches.