tornado/website/sphinx/releases/next.rst

122 lines
6.8 KiB
ReStructuredText
Raw Normal View History

2012-09-08 19:49:22 +00:00
What's new in the next release of Tornado
=========================================
In progress
-----------
* The Tornado test suite now requires ``unittest2`` when run on Python 2.5
or 2.6.
* `tornado.testing.AsyncTestCase` and friends now extend ``unittest2.TestCase``
when it is available (and continue to use the standard ``unittest`` module
when ``unittest2`` is not available)
* `tornado.netutil.bind_sockets` no longer sets ``AI_ADDRCONFIG``; this will
cause it to bind to both ipv4 and ipv6 more often than before.
* `tornado.netutil.bind_sockets` has a new ``flags`` argument that can
be used to pass additional flags to ``getaddrinfo``.
2012-09-10 01:43:52 +00:00
* Tornado no longer logs to the root logger. Details on the new logging
scheme can be found under the `tornado.log` module. Note that in some
cases this will require that you add an explicit logging configuration
in ordre to see any output (perhaps just calling ``logging.basicConfig()``),
although both `IOLoop.start()` and `tornado.options.parse_command_line`
will do this for you.
* Errors while rendering templates no longer log the generated code,
since the enhanced stack traces (from version 2.1) should make this
unnecessary.
* `tornado.testing.ExpectLog` can be used as a finer-grained alternative
to `tornado.testing.LogTrapTestCase`
* The command-line interface to `tornado.testing.main` now supports
additional arguments from the underlying `unittest` module:
``verbose``, ``quiet``, ``failfast``, ``catch``, ``buffer``.
* Empty HTTP request arguments are no longer ignored. This applies to
``HTTPRequest.arguments`` and ``RequestHandler.get_argument[s]``
in WSGI and non-WSGI modes.
* New function `tornado.testing.bind_unused_port` both chooses a port
and binds a socket to it, so there is no risk of another process
using the same port. ``get_unused_port`` is now deprecated.
* The `tornado.database` module has been removed. It is now available
as a separate package, `torndb <https://github.com/bdarnell/torndb>`_
2012-09-17 02:53:32 +00:00
* New class `tornado.iostream.PipeIOStream` provides the IOStream
interface on pipe file descriptors.
* Much of `IOStream` has been refactored into a separate class
`BaseIOStream`.
* New class `tornado.process.Subprocess` wraps `subprocess.Popen` with
`PipeIOStream` access to the child's file descriptors.
2012-09-29 20:16:23 +00:00
* `IOLoop` now uses `signal.set_wakeup_fd` where available (Python 2.6+
on Unix) to avoid a race condition that could result in Python signal
handlers being delayed.
* `WebSocketHandler` has new methods `ping` and `on_pong` to send pings
to the browser (not supported on the ``draft76`` protocol)
* The ``Date`` HTTP header is now set by default on all responses.
* Several methods related to HTTP status codes now take a ``reason`` keyword
argument to specify an alternate "reason" string (i.e. the "Not Found" in
"HTTP/1.1 404 Not Found"). It is now possible to set status codes other
than those defined in the spec, as long as a reason string is given.
* New method `IOLoop.add_callback_from_signal` is safe to use in a signal
handler (the regular `add_callback` method may deadlock).
* `stack_context.wrap` now runs the wrapped callback in a more consistent
environment by recreating contexts even if they already exist on the
stack.
* Fixed a bug in which stack contexts could leak from one callback
chain to another.
* `tornado.autoreload` is now more reliable when there are errors at import
time.
* New optional dependency on `concurrent.futures` to provide better support
for working with threads. `concurrent.futures` is in the standard library
for Python 3.2+, and can be installed on older versions with
``pip install futures``.
* New module `tornado.concurrent` contains code to support working with
`concurrent.futures`, or to emulate future-based interface when that module
is not available.
* New method `IOLoop.add_future` to run a callback on the IOLoop when
an asynchronous ``Future`` finishes.
* New class `tornado.netutil.Resolver` provides an asynchronous
interface to `socket.getaddrinfo`. The interface is based on (but
does not require) `concurrent.futures`. When used with
`concurrent.futures.ThreadPoolExecutor`, it allows for DNS
resolution without blocking the main thread.
* `SimpleAsyncHTTPClient` now takes a ``resolver`` keyword argument (which
may be passed to either the constructor or ``configure``), to allow it to
use the new non-blocking `tornado.netutil.Resolver`.
* Functions using `gen.engine` may now yield ``Future`` objects.
* New function `IOLoop.current` returns the ``IOLoop`` that is running
on the current thread (as opposed to `IOLoop.instance`, which returns a
specific thread's (usually the main thread's) IOLoop).
* `tornado.options.parse_config_file` now configures logging automatically
by default, in the same way that `parse_command_line` does.
* New function `tornado.options.add_parse_callback` schedules a callback
to be run after the command line or config file has been parsed. The
keyword argument ``final=False`` can be used on either parsing function
to supress these callbacks.
* Function `tornado.options.enable_pretty_logging` has been moved to the
`tornado.log` module.
* `tornado.options.define` now takes a ``callback`` argument. This callback
will be run with the new value whenever the option is changed. This is
especially useful for options that set other options, such as by reading
from a config file.
* `tornado.option.parse_command_line` ``--help`` output now goes to ``stderr``
rather than ``stdout``.
* The class underlying the functions in `tornado.options` is now public
(`tornado.options.OptionParser`). This can be used to create multiple
independent option sets, such as for subcommands.
* `tornado.options.options` is no longer a subclass of `dict`; attribute-style
access is now required.
* The ``max_clients`` argument to `AsyncHTTPClient` is now a keyword-only
argument.
* Keyword arguments to `AsyncHTTPClient.configure` are no longer used
when instantiating an implementation subclass directly.
* The `IOLoop` poller implementations (``select``, ``epoll``, ``kqueue``)
are now available as distinct subclasses of `IOLoop`. Instantiating
`IOLoop` will continue to automatically choose the best available
implementation.
* `IOLoop` now has a static ``configure`` method like the one on
`AsyncHTTPClient`, which can be used to select an IOLoop implementation
other than the default.
* The deprecated ``--autoreload`` option of `tornado.testing.main` has
been removed. Use ``python -m tornado.autoreload`` as a prefix command
instead.
* The ``--httpclient`` option of `tornado.testing.main` has been moved
to `tornado.test.runtests` so as not to pollute the application
option namespace. The `tornado.options` module's new callback
support now makes it easy to add options from a wrapper script
instead of putting all possible options in `tornado.testing.main`.