=================== Changes in IPython =================== .. contents:: Release 0.3 =========== New features ------------ * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and zope.interface are now easy installable, we can declare them as dependencies in our setupegg.py script. * IPython is now compatible with Twisted 2.5.0 and 8.x. * Added a new example of how to use :mod:`ipython1.kernel.asynclient`. * Initial draft of a process daemon in :mod:`ipython1.daemon`. * The ``TaskController`` now has methods for getting the queue status. * The ``TaskResult`` objects not have information about how long the task took to run. * We are attaching additional attributes to exceptions ``(_ipython_*)`` that we use to carry additional info around. * New top-level module :mod:`asynclient` that has asynchronous versions (that return deferreds) of the client classes. This is designed to users who want to run their own Twisted reactor * All the clients in :mod:`client` are now based on Twisted. This is done by running the Twisted reactor in a separate thread and using the :func:`blockingCallFromThread` function that is in recent versions of Twisted. * Functions can now be pushed/pulled to/from engines using :meth:`MultiEngineClient.push_function` and :meth:`MultiEngineClient.pull_function`. * Gather/scatter are now implemented in the client to reduce the work load of the controller and improve performance. * Complete rewrite of the IPython docuementation. All of the documentation from the IPython website has been moved into docs/source as restructured text documents. PDF and HTML documentation are being generated using Sphinx. * New developer oriented documentation: development guidelines and roadmap. * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt`` file that is organized by release and is meant to provide something more relevant for users. Bug fixes --------- * Created a proper ``MANIFEST.in`` file to create source distributions. * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine actions were being collected with a :class:`DeferredList` with ``fireononeerrback=1``. This meant that methods were returning before all engines had given their results. This was causing extremely odd bugs in certain cases. To fix this problem, we have 1) set ``fireononeerrback=0`` to make sure all results (or exceptions) are in before returning and 2) introduced a :exc:`CompositeError` exception that wraps all of the engine exceptions. This is a huge change as it means that users will have to catch :exc:`CompositeError` rather than the actual exception. Backwards incompatible changes ------------------------------ * All names have been renamed to conform to the lowercase_with_underscore convention. This will require users to change references to all names like ``queueStatus`` to ``queue_status``. * Previously, methods like :meth:`MultiEngineClient.push` and :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was becoming a problem as we weren't able to introduce new keyword arguments into the API. Now these methods simple take a dict or sequence. This has also allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and :meth:`pullAll`. These things are now handled with the ``targets`` keyword argument that defaults to ``'all'``. * The :attr:`MultiEngineClient.magicTargets` has been renamed to :attr:`MultiEngineClient.targets`. * All methods in the MultiEngine interface now accept the optional keyword argument ``block``. * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and :class:`TaskController` to :class:`TaskClient`. * Renamed the top-level module from :mod:`api` to :mod:`client`. * Most methods in the multiengine interface now raise a :exc:`CompositeError` exception that wraps the user's exceptions, rather than just raising the raw user's exception. * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push`` and ``pull``. Version 0.8.2 ============= Changes made since version 0.8.1 was released: * %pushd/%popd behave differently; now "pushd /foo" pushes CURRENT directory and jumps to /foo. The current behaviour is closer to the documented behaviour, and should not trip anyone. Version 0.8.3 ============= * pydb is now disabled by default (due to %run -d problems). You can enable it by passing -pydb command line argument to IPython. Note that setting it in config file won't work. Releases prior to 0.3 ===================== Changes prior to version 0.3 of IPython are described in the older file ``ChangeLog``. Please refer to this document for details.