What’s new in Tornado 2.3
May 31, 2012
HTTP clients
tornado.httpclient.HTTPClient
now supports the same constructor
keyword arguments as AsyncHTTPClient
.
- The
max_clients
keyword argument to AsyncHTTPClient.configure
now works.
tornado.simple_httpclient
now supports the OPTIONS
and PATCH
HTTP methods.
tornado.simple_httpclient
is better about closing its sockets
instead of leaving them for garbage collection.
tornado.simple_httpclient
correctly verifies SSL certificates for
URLs containing IPv6 literals (This bug affected Python 2.5 and 2.6).
tornado.simple_httpclient
no longer includes basic auth credentials
in the Host
header when those credentials are extracted from the URL.
tornado.simple_httpclient
no longer modifies the caller-supplied header
dictionary, which caused problems when following redirects.
tornado.curl_httpclient
now supports client SSL certificates (using
the same client_cert
and client_key
arguments as
tornado.simple_httpclient
)
HTTP Server
HTTPServer
now works correctly with paths starting with //
HTTPHeaders.copy
(inherited from dict.copy
) now works correctly.
HTTPConnection.address
is now always the socket address, even for non-IP
sockets. HTTPRequest.remote_ip
is 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
IOStream
now has an error
attribute that can be used to determine
why a socket was closed.
tornado.iostream.IOStream.read_until
and read_until_regex
are much
faster with large input.
IOStream.write
performs better when given very large strings.
IOLoop.instance()
is now thread-safe.
tornado.options
tornado.options
options with multiple=True
that are set more than
once now overwrite rather than append. This makes it possible to override
values set in parse_config_file
with parse_command_line
.
tornado.options
--help
output is now prettier.
tornado.options.options
now 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
else
clauses in
try
/except
/finally
/else
blocks.
tornado.web
tornado.web.RequestHandler
now supports the PATCH
HTTP method.
Note that this means any existing methods named patch
in
RequestHandler
subclasses will need to be renamed.
tornado.web.addslash
and removeslash
decorators now send permanent
redirects (301) instead of temporary (302).
RequestHandler.flush
now invokes its callback whether there was any data
to flush or not.
- Repeated calls to
RequestHandler.set_cookie
with the same name now
overwrite the previous cookie instead of producing additional copies.
tornado.web.OutputTransform.transform_first_chunk
now 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
URLSpec
regexes
are constructed from unicode strings and keyword arguments are extracted.
- The
reverse_url
function in the template namespace now comes from
the RequestHandler
rather than the Application
. (Unless overridden,
RequestHandler.reverse_url
is just an alias for the Application
method).
- The
Etag
header is now returned on 304 responses to an If-None-Match
request, improving compatibility with some caches.
tornado.web
will no longer produce responses with status code 304
that also have entity headers such as Content-Length
.