What’s new in Tornado 3.2¶
Jan 14, 2014¶
Installation¶
Tornado now depends on the backports.ssl_match_hostname when running on Python 2. This will be installed automatically when using
pip
oreasy_install
Tornado now includes an optional C extension module, which greatly improves performance of websockets. This extension will be built automatically if a C compiler is found at install time.
New modules¶
The
tornado.platform.asyncio
module provides integration with theasyncio
module introduced in Python 3.4 (also available for Python 3.3 withpip install asyncio
).
tornado.auth
¶
Added
GoogleOAuth2Mixin
support authentication to Google services with OAuth 2 instead of OpenID and OAuth 1.FacebookGraphMixin
has been updated to use the current Facebook login URL, which saves a redirect.
tornado.concurrent
¶
TracebackFuture
now accepts atimeout
keyword argument (although it is still incorrect to use a non-zero timeout in non-blocking code).
tornado.curl_httpclient
¶
tornado.curl_httpclient
now works on Python 3 with the soon-to-be-released pycurl 7.19.3, which will officially support Python 3 for the first time. Note that there are some unofficial Python 3 ports of pycurl (Ubuntu has included one for its past several releases); these are not supported for use with Tornado.
tornado.escape
¶
xhtml_escape
now escapes apostrophes as well.tornado.escape.utf8
,to_unicode
, andnative_str
now raiseTypeError
instead ofAssertionError
when given an invalid value.
tornado.gen
¶
Coroutines may now yield dicts in addition to lists to wait for multiple tasks in parallel.
Improved performance of
tornado.gen
when yielding aFuture
that is already done.
tornado.httpclient
¶
tornado.httpclient.HTTPRequest
now uses property setters so that setting attributes after construction applies the same conversions as__init__
(e.g. converting the body attribute to bytes).
tornado.httpserver
¶
Malformed
x-www-form-urlencoded
request bodies will now log a warning and continue instead of causing the request to fail (similar to the existing handling of malformedmultipart/form-data
bodies. This is done mainly because some libraries send this content type by default even when the data is not form-encoded.Fix some error messages for unix sockets (and other non-IP sockets)
tornado.ioloop
¶
IOLoop
now usesIOLoop.handle_callback_exception
consistently for error logging.IOLoop
now frees callback objects earlier, reducing memory usage while idle.IOLoop
will no longer calllogging.basicConfig
if there is a handler defined for the root logger or for thetornado
ortornado.application
loggers (previously it only looked at the root logger).
tornado.iostream
¶
IOStream
now recognizesECONNABORTED
error codes in more places (which was mainly an issue on Windows).IOStream
now frees memory earlier if a connection is closed while there is data in the write buffer.PipeIOStream
now handlesEAGAIN
error codes correctly.SSLIOStream
now initiates the SSL handshake automatically without waiting for the application to try and read or write to the connection.Swallow a spurious exception from
set_nodelay
when a connection has been reset.
tornado.locale
¶
Locale.format_date
no longer forces the use of absolute dates in Russian.
tornado.log
¶
Fix an error from
tornado.log.enable_pretty_logging
whensys.stderr
does not have anisatty
method.tornado.log.LogFormatter
now accepts keyword argumentsfmt
anddatefmt
.
tornado.netutil
¶
is_valid_ip
(and thereforeHTTPRequest.remote_ip
) now rejects empty strings.Synchronously using
ThreadedResolver
at import time to resolve a unicode hostname no longer deadlocks.
tornado.platform.twisted
¶
TwistedResolver
now has better error handling.
tornado.process
¶
Subprocess
no longer leaks file descriptors ifsubprocess.Popen
fails.
tornado.simple_httpclient
¶
simple_httpclient
now applies theconnect_timeout
to requests that are queued and have not yet started.On Python 2.6,
simple_httpclient
now uses TLSv1 instead of SSLv3.simple_httpclient
now enforces the connect timeout during DNS resolution.The embedded
ca-certificates.crt
file has been updated with the current Mozilla CA list.
tornado.web
¶
StaticFileHandler
no longer fails if the client requests aRange
that is larger than the entire file (Facebook has a crawler that does this).RequestHandler.on_connection_close
now works correctly on subsequent requests of a keep-alive connection.New application setting
default_handler_class
can be used to easily set up custom 404 pages.New application settings
autoreload
,compiled_template_cache
,static_hash_cache
, andserve_traceback
can be used to control individual aspects of debug mode.New methods
RequestHandler.get_query_argument
andRequestHandler.get_body_argument
and new attributesHTTPRequest.query_arguments
andHTTPRequest.body_arguments
allow access to arguments without intermingling those from the query string with those from the request body.RequestHandler.decode_argument
and related methods now raise anHTTPError(400)
instead ofUnicodeDecodeError
when the argument could not be decoded.RequestHandler.clear_all_cookies
now acceptsdomain
andpath
arguments, just likeclear_cookie
.It is now possible to specify handlers by name when using the
tornado.web.URLSpec
class.Application
now accepts 4-tuples to specify thename
parameter (which previously required constructing atornado.web.URLSpec
object instead of a tuple).Fixed an incorrect error message when handler methods return a value other than None or a Future.
Exceptions will no longer be logged twice when using both
@asynchronous
and@gen.coroutine
tornado.websocket
¶
WebSocketHandler.write_message
now raisesWebSocketClosedError
instead ofAttributeError
when the connection has been closed.websocket_connect
now accepts preconstructedHTTPRequest
objects.Fix a bug with
WebSocketHandler
when used with some proxies that unconditionally modify theConnection
header.websocket_connect
now returns an error immediately for refused connections instead of waiting for the timeout.WebSocketClientConnection
now has aclose
method.
tornado.wsgi
¶
WSGIContainer
now calls the iterable’sclose()
method even if an error is raised, in compliance with the spec.