What’s new in Tornado 4.4

Jul 15, 2016

General

  • Tornado now requires Python 2.7 or 3.3+; versions 2.6 and 3.2 are no longer supported. Pypy3 is still supported even though its latest release is mainly based on Python 3.2.
  • The monotonic package is now supported as an alternative to Monotime for monotonic clock support on Python 2.

tornado.curl_httpclient

  • Failures in _curl_setup_request no longer cause the max_clients pool to be exhausted.
  • Non-ascii header values are now handled correctly.

tornado.gen

  • with_timeout now accepts any yieldable object (except YieldPoint), not just tornado.concurrent.Future.

tornado.httpclient

  • The errors raised by timeouts now indicate what state the request was in; the error message is no longer simply “599 Timeout”.
  • Calling repr on a tornado.httpclient.HTTPError no longer raises an error.

tornado.httpserver

  • Int-like enums (including http.HTTPStatus) can now be used as status codes.
  • Responses with status code 204 No Content no longer emit a Content-Length: 0 header.

tornado.ioloop

  • Improved performance when there are large numbers of active timeouts.

tornado.netutil

  • All included Resolver implementations raise IOError (or a subclass) for any resolution failure.

tornado.options

  • Options can now be modified with subscript syntax in addition to attribute syntax.
  • The special variable __file__ is now available inside config files.

tornado.simple_httpclient

  • HTTP/1.0 (not 1.1) responses without a Content-Length header now work correctly.

tornado.tcpserver

  • TCPServer.bind now accepts a reuse_port argument.

tornado.testing

  • Test sockets now always use 127.0.0.1 instead of localhost. This avoids conflicts when the automatically-assigned port is available on IPv4 but not IPv6, or in unusual network configurations when localhost has multiple IP addresses.

tornado.web

  • image/svg+xml is now on the list of compressible mime types.
  • Fixed an error on Python 3 when compression is used with multiple Vary headers.

tornado.websocket

  • WebSocketHandler.__init__ now uses super, which improves support for multiple inheritance.