What’s new in Tornado 3.1¶
Jun 15, 2013¶
Many reference cycles have been broken up throughout the package, allowing for more efficient garbage collection on CPython.
Silenced some log messages when connections are opened and immediately closed (i.e. port scans), or other situations related to closed connections.
oauth_version=1.0in its request as required by the spec.
authorize_redirectmethods in the
tornado.authmixin classes all now return Futures. These methods are asynchronous in
OAuthMixinand derived classes, although they do not take a callback. The
Futurethese methods return must be yielded if they are called from a function decorated with
/account/verify_credentialsto get information about the logged-in user, which is more robust against changing screen names.
demosdirectory (in the source distribution) has a new
Fixed a potential memory leak with long chains of
tornado.httpclient.HTTPRequesttakes a new argument
auth_mode, which can be either
digest. Digest authentication is only supported with
tornado.curl_httpclientno longer goes into an infinite loop when pycurl returns a negative timeout.
curl_httpclientnow supports the
OPTIONSmethods without the use of
Worked around a class of bugs in libcurl that would result in errors from
IOLoop.update_handlerin various scenarios including digest authentication and socks proxies.
TCP_NODELAYflag is now set when appropriate in
simple_httpclientno longer logs exceptions, since those exceptions are made available to the caller as
tornado.httpserver.HTTPServerhandles malformed HTTP headers more gracefully.
HTTPServernow supports lists of IPs in
X-Forwarded-For(it chooses the last, i.e. nearest one).
Memory is now reclaimed promptly on CPython when an HTTP request fails because it exceeded the maximum upload size.
TCP_NODELAYflag is now set when appropriate in
no_keep_aliveoption is now respected with HTTP 1.0 connections that explicitly pass
Connection: keep-alivecheck for HTTP 1.0 connections is now case-insensitive.
The cache used in
HTTPHeaderswill no longer grow without bound.
IOLoopimplementations (such as
pyzmq) accept objects other than integer file descriptors; these objects will now have their
.close()method called when the
IOLoop` is closed with ``all_fds=True.
The stub handles left behind by
IOLoop.remove_timeoutwill now get cleaned up instead of waiting to expire.
Fixed a bug in
BaseIOStream.read_until_closethat would sometimes cause data to be passed to the final callback instead of the streaming callback.
IOStreamclose callback is now run more reliably if there is an exception in
BaseIOStream.set_nodelaycan be used to set the
Fixed a case where errors in
SimpleAsyncHTTPClient) were not being reported correctly.
Locale.format_datenow works on Python 3.
Resolverimplementation now works on Solaris.
Fixed a potential CPU DoS when
tornado.netutil.ssl_match_hostnameis used on certificates with an abusive wildcard pattern.
All instances of
ThreadedResolvernow share a single thread pool, whose size is set by the first one to be created (or the static
ExecutorResolveris now documented for public use.
bind_socketsnow works in configurations with incomplete IPv6 support.
multiple=Truenow works on Python 3.
OptionParserinstances support some new dict-like methods:
items(), iteration over keys, and (read-only) access to options with square braket syntax.
OptionParser.group_dictreturns all options with a given group name, and
OptionParser.as_dictreturns all options.
tornado.stack_contexthas been rewritten and is now much faster.
run_with_stack_contextfacilitates the use of stack contexts with coroutines.
Some internal names used by the template system have been changed; now all “reserved” names in templates start with
tornado.testing.AsyncTestCase.waitnow raises the correct exception when it has been modified by
tornado.testing.gen_testcan now be called as
@gen_test(timeout=60)to give some tests a longer timeout than others.
0as the port to
getaddrinfo, which works better with some unusual network configurations.
tornado.web.StaticFileHandlernow works on Windows when the client passes an
If-Modified-Sincetimestamp before 1970.
RequestHandler.log_exceptioncan be overridden to customize the logging behavior when an exception is uncaught. Most apps that currently override
_handle_request_exceptioncan now use a combination of
Arguments extracted from the url path are now decoded with
plus=False, so plus signs are left as-is instead of being turned into spaces.
RequestHandler.send_errorwill now only be called once per request, even if multiple exceptions are caught by the stack context.
RequestHandler.current_usermay now be assigned to normally.
RequestHandler.redirectno longer silently strips control characters and whitespace. It is now an error to pass control characters, newlines or tabs.
StaticFileHandlerhas been reorganized internally and now has additional extension points that can be overridden in subclasses.
StaticFileHandlernow supports HTTP
StaticFileHandleris still not suitable for files too large to comfortably fit in memory, but
Rangesupport is necessary in some browsers to enable seeking of HTML5 audio and video.
StaticFileHandlernow uses longer hashes by default, and uses the same hashes for
Etagas it does for versioned urls.
StaticFileHandlernow reads its file in chunks, which will reduce memory fragmentation.
Fixed a problem with the
Dateheader and cookie expiration dates when the system locale is set to a non-english configuration.
Fixed an exception in
WSGIContainerwhen the connection is closed while output is being written.