On Thursday, May 31, 2012 9:53:06 PM UTC-7, Ben Darnell wrote:
> We are pleased to announce the release of Tornado 2.3, available from
> https://github.com/downloads/facebook/tornado/tornado-2.3.tar.gz
> Release notes:
> http://www.tornadoweb.org/documentation/releases/v2.3.0.html
> Many thanks to everyone who contributed patches, bug reports, and
> feedback that went into
> this release!
> -Ben
> 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``.
> Other modules
> ~~~~~~~~~~~~~
> * `tornado.auth.FacebookGraphMixin` no longer sends ``post_args``
> redundantly
> in the url.
> * The ``extra_params`` argument to `tornado.escape.linkify` may now be
> a callable, to allow parameters to be chosen separately for each link.
> * `tornado.gen` no longer leaks `StackContexts` when a `...@gen.engine``
> wrapped
> function is called repeatedly.
> * `tornado.locale.get_supported_locales` no longer takes a meaningless
> ``cls`` argument.
> * `StackContext` instances now have a deactivation callback that can be
> used to prevent further propagation.
> * `tornado.testing.AsyncTestCase.wait` now resets its timeout on each
> call.
> * `tornado.wsgi.WSGIApplication` now parses arguments correctly on Python
> 3.
> * Exception handling on Python 3 has been improved; previously some
> exceptions
> such as `UnicodeDecodeError` would generate `TypeErrors`