diff --git a/docs/releases/next.rst b/docs/releases/next.rst index 1eb11440..597b1077 100644 --- a/docs/releases/next.rst +++ b/docs/releases/next.rst @@ -4,82 +4,173 @@ What's new in the next version of Tornado In progress ----------- -* `tornado.util.import_object` now works with top-level module names that - do not contain a dot. -* `tornado.util.import_object` now consistently raises `ImportError` - instead of `AttributeError` when it fails. -* The ``handlers`` list passed to the `tornado.web.Application` constructor - and `~tornado.web.Application.add_handlers` methods can now contain - lists in addition to tuples and `~tornado.web.URLSpec` objects. +Multiple modules +~~~~~~~~~~~~~~~~ + +* Many reference cycles have been broken up throughout the package, + allowing for more efficient garbage collection on CPython. +* Silenced some log messages when connections are opened and immediately + closed (i.e. port scans), or other situations related to closed + connections. +* Various small speedups: `.HTTPHeaders` case normalization, `.UIModule` + proxy objects, precompile some regexes. + +`tornado.auth` +~~~~~~~~~~~~~~ + +* `tornado.auth.OAuthMixin` always sends ``oauth_version=1.0`` in its + request as required by the spec. + +`tornado.escape` +~~~~~~~~~~~~~~~~ + +* `.url_escape` and `.url_unescape` have a new ``plus`` argument (defaulting + to True for consistency with the previous behavior) which specifies + whether they work like `urllib.parse.unquote` or `urllib.parse.unquote_plus`. + +`tornado.gen` +~~~~~~~~~~~~~ + +* Fixed a potential memory leak with long chains of `tornado.gen` coroutines. + +`tornado.httpclient` +~~~~~~~~~~~~~~~~~~~~ + * `tornado.httpclient.HTTPRequest` takes a new argument ``auth_mode``, which can be either ``basic`` or ``digest``. Digest authentication is only supported with ``tornado.curl_httpclient``. -* `tornado.stack_context` has been rewritten and is now much faster. * ``tornado.curl_httpclient`` no longer goes into an infinite loop when pycurl returns a negative timeout. -* `tornado.testing.AsyncTestCase.wait` now raises the correct exception - when it has been modified by `tornado.stack_context`. -* `tornado.web.StaticFileHandler` now works on Windows when the client - passes an ``If-Modified-Since`` timestamp before 1970. +* ``curl_httpclient`` now supports the ``PATCH`` and ``OPTIONS`` methods + without the use of ``allow_nonstandard_methods=True``. +* Worked around a class of bugs in libcurl that would result in + errors from `.IOLoop.update_handler` in various scenarios including + digest authentication and socks proxies. + +`tornado.httpserver` +~~~~~~~~~~~~~~~~~~~~ + * `tornado.httpserver.HTTPServer` handles malformed HTTP headers more gracefully. -* `tornado.auth.OAuthMixin` always sends ``oauth_version=1.0`` in its - request as required by the spec. -* Many reference cycles have been broken up throughout the package, - allowing for more efficient garbage collection on CPython. -* `tornado.testing.gen_test` can now be called as ``@gen_test(timeout=60)`` - to give some tests a longer timeout than others. -* The environment variable ``ASYNC_TEST_TIMEOUT`` can now be set to - override the default timeout for `.AsyncTestCase.wait` and `.gen_test`. +* `.HTTPServer` now supports lists of IPs in ``X-Forwarded-For`` + (it chooses the last, i.e. nearest one). +* Memory is now reclaimed promptly on CPython when an HTTP request + fails because it exceeded the maximum upload size. +* The ``TCP_NODELAY`` flag is now set when appropriate in `.HTTPServer` + and ``simple_httpclient``. +* The `.HTTPServer` ``no_keep_alive`` option is now respected with + HTTP 1.0 connections that explicitly pass ``Connection: keep-alive``. +* The ``Connection: keep-alive`` check for HTTP 1.0 connections is now + case-insensitive. + +`tornado.httputil` +~~~~~~~~~~~~~~~~~~ + +* The cache used in `.HTTPHeaders` will no longer grow without bound. + +`tornado.ioloop` +~~~~~~~~~~~~~~~~ + * Some `.IOLoop` implementations (such as ``pyzmq``) accept objects other than integer file descriptors; these objects will now have their ``.close()`` method called when the ``IOLoop` is closed with ``all_fds=True``. -* `.HTTPServer` now supports lists of IPs in ``X-Forwarded-For`` - (it chooses the last, i.e. nearest one). -* Fixed an exception in `.WSGIContainer` when the connection is closed - while output is being written. -* Silenced some log messages when connections are opened and immediately - closed (i.e. port scans), or other situations related to closed - connections. -* The default `.Resolver` implementation now works on Solaris. -* Memory is now reclaimed promptly on CPython when an HTTP request - fails because it exceeded the maximum upload size. -* `tornado.options.define` with ``multiple=True`` now works on Python 3. -* `.Locale.format_date` now works on Python 3. -* Some internal names used by the template system have been changed; - now all "reserved" names in templates start with ``_tt_``. -* The constructors of `.TCPServer` and `.HTTPServer` now take a - ``max_buffer_size`` keyword argument. +* The stub handles left behind by `.IOLoop.remove_timeout` will now get + cleaned up instead of waiting to expire. + +`tornado.iostream` +~~~~~~~~~~~~~~~~~~ + * Fixed a bug in `.BaseIOStream.read_until_close` that would sometimes cause data to be passed to the final callback instead of the streaming callback. * The `.IOStream` close callback is now run more reliably if there is an exception in ``_try_inline_read``. +* New methods `.BaseIOStream.set_nodelay` and + `.WebSocketHandler.set_nodelay` can be used to set the + ``TCP_NODELAY`` flag. +* Fixed a case where errors in ``SSLIOStream.connect`` (and + ``SimpleAsyncHTTPClient``) were not being reported correctly. + +`tornado.locale` +~~~~~~~~~~~~~~~~ + +* `.Locale.format_date` now works on Python 3. + +`tornado.netutil` +~~~~~~~~~~~~~~~~~ + +* The default `.Resolver` implementation now works on Solaris. +* `.Resolver` now has a `~.Resolver.close` method. +* Fixed a potential CPU DoS when ``tornado.netutil.ssl_match_hostname`` + is used on certificates with an abusive wildcard pattern. + +`tornado.options` +~~~~~~~~~~~~~~~~~ + +* `tornado.options.define` with ``multiple=True`` now works on Python 3. +* `tornado.options.options` and other `.OptionParser` instances support some + new dict-like methods: `~.OptionParser.items()`, iteration over keys, + and (read-only) access to options with square braket syntax. + `.OptionParser.group_dict` returns all options with a given group + name, and `.OptionParser.as_dict` returns all options. + +`tornado.stack_context` +~~~~~~~~~~~~~~~~~~~~~~~ + +* `tornado.stack_context` has been rewritten and is now much faster. +* New function `.run_with_stack_context` facilitates the use of stack + contexts with coroutines. + +`tornado.tcpserver` +~~~~~~~~~~~~~~~~~~~ + +* The constructors of `.TCPServer` and `.HTTPServer` now take a + ``max_buffer_size`` keyword argument. + +`tornado.template` +~~~~~~~~~~~~~~~~~~ + +* Some internal names used by the template system have been changed; + now all "reserved" names in templates start with ``_tt_``. + +`tornado.testing` +~~~~~~~~~~~~~~~~~ + +* `tornado.testing.AsyncTestCase.wait` now raises the correct exception + when it has been modified by `tornado.stack_context`. +* `tornado.testing.gen_test` can now be called as ``@gen_test(timeout=60)`` + to give some tests a longer timeout than others. +* The environment variable ``ASYNC_TEST_TIMEOUT`` can now be set to + override the default timeout for `.AsyncTestCase.wait` and `.gen_test`. +* `.bind_unused_port` now passes ``None`` instead of ``0`` as the port + to ``getaddrinfo``, which works better with some unusual network + configurations. + +`tornado.util` +~~~~~~~~~~~~~~ + +* `tornado.util.import_object` now works with top-level module names that + do not contain a dot. +* `tornado.util.import_object` now consistently raises `ImportError` + instead of `AttributeError` when it fails. + +`tornado.web` +~~~~~~~~~~~~~ + +* The ``handlers`` list passed to the `tornado.web.Application` constructor + and `~tornado.web.Application.add_handlers` methods can now contain + lists in addition to tuples and `~tornado.web.URLSpec` objects. +* `tornado.web.StaticFileHandler` now works on Windows when the client + passes an ``If-Modified-Since`` timestamp before 1970. * New method `.RequestHandler.log_exception` can be overridden to customize the logging behavior when an exception is uncaught. Most apps that currently override ``_handle_request_exception`` can now use a combination of `.RequestHandler.log_exception` and `.write_error`. -* The ``TCP_NODELAY`` flag is now set when appropriate in `.HTTPServer` - and ``simple_httpclient``. -* New methods `.BaseIOStream.set_nodelay` and - `.WebSocketHandler.set_nodelay` can be used to set the - ``TCP_NODELAY`` flag. -* The cache used in `.HTTPHeaders` will no longer grow without bound. -* Various small speedups: `.HTTPHeaders` case normalization, `.UIModule` - proxy objects, precompile some regexes. -* `.bind_unused_port` now passes ``None`` instead of ``0`` as the port - to ``getaddrinfo``, which works better with some unusual network - configurations. * `.RequestHandler.get_argument` now raises `.MissingArgumentError` (a subclass of `tornado.web.HTTPError`, which is what it raised previously) if the argument cannot be found. -* New function `.run_with_stack_context` facilitates the use of stack - contexts with coroutines. -* `.url_escape` and `.url_unescape` have a new ``plus`` argument (defaulting - to True for consistency with the previous behavior) which specifies - whether they work like `urllib.parse.unquote` or `urllib.parse.unquote_plus`. * `.Application.reverse_url` now uses `.url_escape` with ``plus=False``, i.e. spaces are encoded as ``%20`` instead of ``+``. * Arguments extracted from the url path are now decoded with @@ -94,12 +185,6 @@ In progress `.Future`. The `~tornado.web.asynchronous` decorator is not used with ``prepare``; one of the `.Future`-related decorators should be used instead. * ``RequestHandler.current_user`` may now be assigned to normally. -* The `.HTTPServer` ``no_keep_alive`` option is now respected with - HTTP 1.0 connections that explicitly pass ``Connection: keep-alive``. -* The ``Connection: keep-alive`` check for HTTP 1.0 connections is now - case-insensitive. -* The stub handles left behind by `.IOLoop.remove_timeout` will now get - cleaned up instead of waiting to expire. * `.RequestHandler.redirect` no longer silently strips control characters and whitespace. It is now an error to pass control characters, newlines or tabs. @@ -116,21 +201,11 @@ In progress the url versioning. * `.StaticFileHandler` now reads its file in chunks, which will reduce memory fragmentation. -* Fixed a case where errors in ``SSLIOStream.connect`` (and - ``SimpleAsyncHTTPClient``) were not being reported correctly. -* `.Resolver` now has a `~.Resolver.close` method. -* Fixed a potential memory leak with long chains of `tornado.gen` coroutines. -* ``curl_httpclient`` now supports the ``PATCH`` and ``OPTIONS`` methods - without the use of ``allow_nonstandard_methods=True``. -* `tornado.options.options` and other `.OptionParser` instances support some - new dict-like methods: `~.OptionParser.items()`, iteration over keys, - and (read-only) access to options with square braket syntax. - `.OptionParser.group_dict` returns all options with a given group - name, and `.OptionParser.as_dict` returns all options. -* Fixed a potential CPU DoS when ``tornado.netutil.ssl_match_hostname`` - is used on certificates with an abusive wildcard pattern. * Fixed a problem with the ``Date`` header and cookie expiration dates when the system locale is set to a non-english configuration. -* Worked around a class of bugs in libcurl that would result in - errors from `.IOLoop.update_handler` in various scenarios including - digest authentication and socks proxies. + +`tornado.wsgi` +~~~~~~~~~~~~~~ + +* Fixed an exception in `.WSGIContainer` when the connection is closed + while output is being written.