What’s new in Tornado 2.3¶
May 31, 2012¶
HTTP clients¶
tornado.httpclient.HTTPClientnow supports the same constructor keyword arguments asAsyncHTTPClient.- The
max_clientskeyword argument toAsyncHTTPClient.configurenow works. tornado.simple_httpclientnow supports theOPTIONSandPATCHHTTP methods.tornado.simple_httpclientis better about closing its sockets instead of leaving them for garbage collection.tornado.simple_httpclientcorrectly verifies SSL certificates for URLs containing IPv6 literals (This bug affected Python 2.5 and 2.6).tornado.simple_httpclientno longer includes basic auth credentials in theHostheader when those credentials are extracted from the URL.tornado.simple_httpclientno longer modifies the caller-supplied header dictionary, which caused problems when following redirects.tornado.curl_httpclientnow supports client SSL certificates (using the sameclient_certandclient_keyarguments astornado.simple_httpclient)
HTTP Server¶
HTTPServernow works correctly with paths starting with//HTTPHeaders.copy(inherited fromdict.copy) now works correctly.HTTPConnection.addressis now always the socket address, even for non-IP sockets.HTTPRequest.remote_ipis still always an IP-style address (fake data is used for non-IP sockets)- Extra data at the end of multipart form bodies is now ignored, which fixes a compatibility problem with an iOS HTTP client library.
IOLoop and IOStream¶
IOStreamnow has anerrorattribute that can be used to determine why a socket was closed.tornado.iostream.IOStream.read_untilandread_until_regexare much faster with large input.IOStream.writeperforms better when given very large strings.IOLoop.instance()is now thread-safe.
tornado.options¶
tornado.optionsoptions withmultiple=Truethat are set more than once now overwrite rather than append. This makes it possible to override values set inparse_config_filewithparse_command_line.tornado.options--helpoutput is now prettier.tornado.options.optionsnow supports attribute assignment.
tornado.template¶
- Template files containing non-ASCII (utf8) characters now work on Python 3 regardless of the locale environment variables.
- Templates now support
elseclauses intry/except/finally/elseblocks.
tornado.web¶
tornado.web.RequestHandlernow supports thePATCHHTTP method. Note that this means any existing methods namedpatchinRequestHandlersubclasses will need to be renamed.tornado.web.addslashandremoveslashdecorators now send permanent redirects (301) instead of temporary (302).RequestHandler.flushnow invokes its callback whether there was any data to flush or not.- Repeated calls to
RequestHandler.set_cookiewith the same name now overwrite the previous cookie instead of producing additional copies. tornado.web.OutputTransform.transform_first_chunknow takes and returns a status code in addition to the headers and chunk. This is a backwards-incompatible change to an interface that was never technically private, but was not included in the documentation and does not appear to have been used outside Tornado itself.- Fixed a bug on python versions before 2.6.5 when
URLSpecregexes are constructed from unicode strings and keyword arguments are extracted. - The
reverse_urlfunction in the template namespace now comes from theRequestHandlerrather than theApplication. (Unless overridden,RequestHandler.reverse_urlis just an alias for theApplicationmethod). - The
Etagheader is now returned on 304 responses to anIf-None-Matchrequest, improving compatibility with some caches. tornado.webwill no longer produce responses with status code 304 that also have entity headers such asContent-Length.
Other modules¶
tornado.auth.FacebookGraphMixinno longer sendspost_argsredundantly in the url.- The
extra_paramsargument totornado.escape.linkifymay now be a callable, to allow parameters to be chosen separately for each link. tornado.genno longer leaksStackContextswhen a@gen.enginewrapped function is called repeatedly.tornado.locale.get_supported_localesno longer takes a meaninglessclsargument.StackContextinstances now have a deactivation callback that can be used to prevent further propagation.tornado.testing.AsyncTestCase.waitnow resets its timeout on each call.tornado.wsgi.WSGIApplicationnow parses arguments correctly on Python 3.- Exception handling on Python 3 has been improved; previously some exceptions
such as
UnicodeDecodeErrorwould generateTypeErrors