What's new in Tornado 1.2
=========================

Feb 20, 2011
------------

::
    
    We are pleased to announce the release of Tornado 1.2, available from
    http://github.com/downloads/facebook/tornado/tornado-1.2.tar.gz
    
    Backwards compatibility notes:
    * This release includes the backwards-incompatible security change from
      version 1.1.1.  Users upgrading from 1.1 or earlier should read the
      release notes from that release:
      http://groups.google.com/group/python-tornado/browse_thread/thread/b36191c781580cde
    * StackContexts that do something other than catch exceptions may need to
      be modified to be reentrant.
      https://github.com/facebook/tornado/commit/7a7e24143e77481d140fb5579bc67e4c45cbcfad
    * When XSRF tokens are used, the token must also be present on PUT and
      DELETE requests (anything but GET and HEAD)
    
    New features:
    * A new HTTP client implementation is available in the module
      tornado.simple_httpclient.  This HTTP client does not depend on pycurl.
      It has not yet been tested extensively in production, but is intended
      to eventually replace the pycurl-based HTTP client in a future release of
      Tornado.  To transparently replace tornado.httpclient.AsyncHTTPClient with
      this new implementation, you can set the environment variable
      USE_SIMPLE_HTTPCLIENT=1 (note that the next release of Tornado will
      likely include a different way to select HTTP client implementations)
    * Request logging is now done by the Application rather than the
      RequestHandler.  Logging behavior may be customized by either overriding
      Application.log_request in a subclass or by passing log_function
      as an Application setting
    * Application.listen(port): Convenience method as an alternative to
      explicitly creating an HTTPServer
    * tornado.escape.linkify(): Wrap urls in <a> tags
    * RequestHandler.create_signed_value(): Create signatures like the
      secure_cookie methods without setting cookies.
    * tornado.testing.get_unused_port(): Returns a port selected in the same
      way as inAsyncHTTPTestCase
    * AsyncHTTPTestCase.fetch(): Convenience method for synchronous fetches
    * IOLoop.set_blocking_signal_threshold(): Set a callback to be run when
      the IOLoop is blocked.
    * IOStream.connect(): Asynchronously connect a client socket
    * AsyncHTTPClient.handle_callback_exception(): May be overridden
      in subclass for custom error handling
    * httpclient.HTTPRequest has two new keyword arguments, validate_cert and
      ca_certs. Setting validate_cert=False will disable all certificate checks
      when fetching https urls.  ca_certs may be set to a filename containing
      trusted certificate authorities (defaults will be used if this is
      unspecified)
    * HTTPRequest.get_ssl_certificate(): Returns the client's SSL certificate
      (if client certificates were requested in the server's ssl_options
    * StaticFileHandler can be configured to return a default file (e.g.
      index.html) when a directory is requested
    * Template directives of the form "{% from x import y %}" are now
      supported (in addition to the existing support for "{% import x
      %}"
    * FacebookGraphMixin.get_authenticated_user now accepts a new
      parameter 'extra_fields' which may be used to request additional
      information about the user
    
    Bug fixes:
    * auth: Fixed KeyError with Facebook offline_access
    * auth: Uses request.uri instead of request.path as the default redirect
      so that parameters are preserved.
    * escape: xhtml_escape() now returns a unicode string, not
      utf8-encoded bytes
    * ioloop: Callbacks added with add_callback are now run in the order they
      were added
    * ioloop: PeriodicCallback.stop can now be called from inside the callback.
    * iostream: Fixed several bugs in SSLIOStream
    * iostream: Detect when the other side has closed the connection even with
      the select()-based IOLoop
    * iostream: read_bytes(0) now works as expected
    * iostream: Fixed bug when writing large amounts of data on windows
    * iostream: Fixed infinite loop that could occur with unhandled exceptions
    * httpclient: Fix bugs when some requests use proxies and others don't
    * httpserver: HTTPRequest.protocol is now set correctly when using the
      built-in SSL support
    * httpserver: When using multiple processes, the standard library's
      random number generator is re-seeded in each child process
    * httpserver: With xheaders enabled, X-Forwarded-Proto is supported as an
      alternative to X-Scheme
    * httpserver: Fixed bugs in multipart/form-data parsing
    * locale: format_date() now behaves sanely with dates in the future
    * locale: Updates to the language list
    * stack_context: Fixed bug with contexts leaking through reused IOStreams
    * stack_context: Simplified semantics and improved performance
    * web: The order of css_files from UIModules is now preserved
    * web: Fixed error with default_host redirect
    * web: StaticFileHandler works when os.path.sep != '/' (i.e. on Windows)
    * web: Fixed a caching-related bug in StaticFileHandler when a file's
      timestamp has changed but its contents have not.
    * web: Fixed bugs with HEAD requests and e.g. Etag headers
    * web: Fix bugs when different handlers have different static_paths
    * web: @removeslash will no longer cause a redirect loop when applied to the
      root path
    * websocket: Now works over SSL
    * websocket: Improved compatibility with proxies
    
    Many thanks to everyone who contributed patches, bug reports, and feedback
    that went into this release!
    
    -Ben
