##// END OF EJS Templates
whatsnew/version0.9.txt: Fix '~./ipython' -> '~/.ipython' typo
W. Trevor King -
Show More
@@ -1,283 +1,283 b''
1 ========================================
1 ========================================
2 0.9 series
2 0.9 series
3 ========================================
3 ========================================
4
4
5 Release 0.9.1
5 Release 0.9.1
6 =============
6 =============
7
7
8 This release was quickly made to restore compatibility with Python 2.4, which
8 This release was quickly made to restore compatibility with Python 2.4, which
9 version 0.9 accidentally broke. No new features were introduced, other than
9 version 0.9 accidentally broke. No new features were introduced, other than
10 some additional testing support for internal use.
10 some additional testing support for internal use.
11
11
12
12
13 Release 0.9
13 Release 0.9
14 ===========
14 ===========
15
15
16 New features
16 New features
17 ------------
17 ------------
18
18
19 * All furl files and security certificates are now put in a read-only
19 * All furl files and security certificates are now put in a read-only
20 directory named ~./ipython/security.
20 directory named ~/.ipython/security.
21
21
22 * A single function :func:`get_ipython_dir`, in :mod:`IPython.genutils` that
22 * A single function :func:`get_ipython_dir`, in :mod:`IPython.genutils` that
23 determines the user's IPython directory in a robust manner.
23 determines the user's IPython directory in a robust manner.
24
24
25 * Laurent's WX application has been given a top-level script called
25 * Laurent's WX application has been given a top-level script called
26 ipython-wx, and it has received numerous fixes. We expect this code to be
26 ipython-wx, and it has received numerous fixes. We expect this code to be
27 architecturally better integrated with Gael's WX 'ipython widget' over the
27 architecturally better integrated with Gael's WX 'ipython widget' over the
28 next few releases.
28 next few releases.
29
29
30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
31 code adds a number of new editor hooks to synchronize with editors under
31 code adds a number of new editor hooks to synchronize with editors under
32 Windows.
32 Windows.
33
33
34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
35 This work was sponsored by Enthought, and while it's still very new, it is
35 This work was sponsored by Enthought, and while it's still very new, it is
36 based on a more cleanly organized arhictecture of the various IPython
36 based on a more cleanly organized arhictecture of the various IPython
37 components. We will continue to develop this over the next few releases as a
37 components. We will continue to develop this over the next few releases as a
38 model for GUI components that use IPython.
38 model for GUI components that use IPython.
39
39
40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
42 different internal organizations, but the whole team is working on finding
42 different internal organizations, but the whole team is working on finding
43 what the right abstraction points are for a unified codebase.
43 what the right abstraction points are for a unified codebase.
44
44
45 * As part of the frontend work, Barry Wark also implemented an experimental
45 * As part of the frontend work, Barry Wark also implemented an experimental
46 event notification system that various ipython components can use. In the
46 event notification system that various ipython components can use. In the
47 next release the implications and use patterns of this system regarding the
47 next release the implications and use patterns of this system regarding the
48 various GUI options will be worked out.
48 various GUI options will be worked out.
49
49
50 * IPython finally has a full test system, that can test docstrings with
50 * IPython finally has a full test system, that can test docstrings with
51 IPython-specific functionality. There are still a few pieces missing for it
51 IPython-specific functionality. There are still a few pieces missing for it
52 to be widely accessible to all users (so they can run the test suite at any
52 to be widely accessible to all users (so they can run the test suite at any
53 time and report problems), but it now works for the developers. We are
53 time and report problems), but it now works for the developers. We are
54 working hard on continuing to improve it, as this was probably IPython's
54 working hard on continuing to improve it, as this was probably IPython's
55 major Achilles heel (the lack of proper test coverage made it effectively
55 major Achilles heel (the lack of proper test coverage made it effectively
56 impossible to do large-scale refactoring). The full test suite can now
56 impossible to do large-scale refactoring). The full test suite can now
57 be run using the :command:`iptest` command line program.
57 be run using the :command:`iptest` command line program.
58
58
59 * The notion of a task has been completely reworked. An `ITask` interface has
59 * The notion of a task has been completely reworked. An `ITask` interface has
60 been created. This interface defines the methods that tasks need to
60 been created. This interface defines the methods that tasks need to
61 implement. These methods are now responsible for things like submitting
61 implement. These methods are now responsible for things like submitting
62 tasks and processing results. There are two basic task types:
62 tasks and processing results. There are two basic task types:
63 :class:`IPython.kernel.task.StringTask` (this is the old `Task` object, but
63 :class:`IPython.kernel.task.StringTask` (this is the old `Task` object, but
64 renamed) and the new :class:`IPython.kernel.task.MapTask`, which is based on
64 renamed) and the new :class:`IPython.kernel.task.MapTask`, which is based on
65 a function.
65 a function.
66
66
67 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
67 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
68 standardize the idea of a `map` method. This interface has a single `map`
68 standardize the idea of a `map` method. This interface has a single `map`
69 method that has the same syntax as the built-in `map`. We have also defined
69 method that has the same syntax as the built-in `map`. We have also defined
70 a `mapper` factory interface that creates objects that implement
70 a `mapper` factory interface that creates objects that implement
71 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both the
71 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both the
72 multiengine and task controller now have mapping capabilties.
72 multiengine and task controller now have mapping capabilties.
73
73
74 * The parallel function capabilities have been reworks. The major changes are
74 * The parallel function capabilities have been reworks. The major changes are
75 that i) there is now an `@parallel` magic that creates parallel functions,
75 that i) there is now an `@parallel` magic that creates parallel functions,
76 ii) the syntax for mulitple variable follows that of `map`, iii) both the
76 ii) the syntax for mulitple variable follows that of `map`, iii) both the
77 multiengine and task controller now have a parallel function implementation.
77 multiengine and task controller now have a parallel function implementation.
78
78
79 * All of the parallel computing capabilities from `ipython1-dev` have been
79 * All of the parallel computing capabilities from `ipython1-dev` have been
80 merged into IPython proper. This resulted in the following new subpackages:
80 merged into IPython proper. This resulted in the following new subpackages:
81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`IPython.config`,
81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`IPython.config`,
82 :mod:`IPython.tools` and :mod:`IPython.testing`.
82 :mod:`IPython.tools` and :mod:`IPython.testing`.
83
83
84 * As part of merging in the `ipython1-dev` stuff, the `setup.py` script and
84 * As part of merging in the `ipython1-dev` stuff, the `setup.py` script and
85 friends have been completely refactored. Now we are checking for
85 friends have been completely refactored. Now we are checking for
86 dependencies using the approach that matplotlib uses.
86 dependencies using the approach that matplotlib uses.
87
87
88 * The documentation has been completely reorganized to accept the
88 * The documentation has been completely reorganized to accept the
89 documentation from `ipython1-dev`.
89 documentation from `ipython1-dev`.
90
90
91 * We have switched to using Foolscap for all of our network protocols in
91 * We have switched to using Foolscap for all of our network protocols in
92 :mod:`IPython.kernel`. This gives us secure connections that are both
92 :mod:`IPython.kernel`. This gives us secure connections that are both
93 encrypted and authenticated.
93 encrypted and authenticated.
94
94
95 * We have a brand new `COPYING.txt` files that describes the IPython license
95 * We have a brand new `COPYING.txt` files that describes the IPython license
96 and copyright. The biggest change is that we are putting "The IPython
96 and copyright. The biggest change is that we are putting "The IPython
97 Development Team" as the copyright holder. We give more details about
97 Development Team" as the copyright holder. We give more details about
98 exactly what this means in this file. All developer should read this and use
98 exactly what this means in this file. All developer should read this and use
99 the new banner in all IPython source code files.
99 the new banner in all IPython source code files.
100
100
101 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
101 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
102
102
103 * String lists now support ``sort(field, nums = True)`` method (to easily sort
103 * String lists now support ``sort(field, nums = True)`` method (to easily sort
104 system command output). Try it with ``a = !ls -l ; a.sort(1, nums=1)``.
104 system command output). Try it with ``a = !ls -l ; a.sort(1, nums=1)``.
105
105
106 * '%cpaste foo' now assigns the pasted block as string list, instead of string
106 * '%cpaste foo' now assigns the pasted block as string list, instead of string
107
107
108 * The ipcluster script now run by default with no security. This is done
108 * The ipcluster script now run by default with no security. This is done
109 because the main usage of the script is for starting things on localhost.
109 because the main usage of the script is for starting things on localhost.
110 Eventually when ipcluster is able to start things on other hosts, we will put
110 Eventually when ipcluster is able to start things on other hosts, we will put
111 security back.
111 security back.
112
112
113 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
113 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
114 Last part of dir name is checked first. If no matches for that are found,
114 Last part of dir name is checked first. If no matches for that are found,
115 look at the whole path.
115 look at the whole path.
116
116
117
117
118 Bug fixes
118 Bug fixes
119 ---------
119 ---------
120
120
121 * The Windows installer has been fixed. Now all IPython scripts have ``.bat``
121 * The Windows installer has been fixed. Now all IPython scripts have ``.bat``
122 versions created. Also, the Start Menu shortcuts have been updated.
122 versions created. Also, the Start Menu shortcuts have been updated.
123
123
124 * The colors escapes in the multiengine client are now turned off on win32 as
124 * The colors escapes in the multiengine client are now turned off on win32 as
125 they don't print correctly.
125 they don't print correctly.
126
126
127 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing
127 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing
128 mpi_import_statement incorrectly, which was leading the engine to crash when
128 mpi_import_statement incorrectly, which was leading the engine to crash when
129 mpi was enabled.
129 mpi was enabled.
130
130
131 * A few subpackages had missing ``__init__.py`` files.
131 * A few subpackages had missing ``__init__.py`` files.
132
132
133 * The documentation is only created if Sphinx is found. Previously, the
133 * The documentation is only created if Sphinx is found. Previously, the
134 ``setup.py`` script would fail if it was missing.
134 ``setup.py`` script would fail if it was missing.
135
135
136 * Greedy ``cd`` completion has been disabled again (it was enabled in 0.8.4) as
136 * Greedy ``cd`` completion has been disabled again (it was enabled in 0.8.4) as
137 it caused problems on certain platforms.
137 it caused problems on certain platforms.
138
138
139
139
140 Backwards incompatible changes
140 Backwards incompatible changes
141 ------------------------------
141 ------------------------------
142
142
143 * The ``clusterfile`` options of the :command:`ipcluster` command has been
143 * The ``clusterfile`` options of the :command:`ipcluster` command has been
144 removed as it was not working and it will be replaced soon by something much
144 removed as it was not working and it will be replaced soon by something much
145 more robust.
145 more robust.
146
146
147 * The :mod:`IPython.kernel` configuration now properly find the user's
147 * The :mod:`IPython.kernel` configuration now properly find the user's
148 IPython directory.
148 IPython directory.
149
149
150 * In ipapi, the :func:`make_user_ns` function has been replaced with
150 * In ipapi, the :func:`make_user_ns` function has been replaced with
151 :func:`make_user_namespaces`, to support dict subclasses in namespace
151 :func:`make_user_namespaces`, to support dict subclasses in namespace
152 creation.
152 creation.
153
153
154 * :class:`IPython.kernel.client.Task` has been renamed
154 * :class:`IPython.kernel.client.Task` has been renamed
155 :class:`IPython.kernel.client.StringTask` to make way for new task types.
155 :class:`IPython.kernel.client.StringTask` to make way for new task types.
156
156
157 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
157 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
158 and `map`.
158 and `map`.
159
159
160 * Renamed the values that the rename `dist` keyword argument can have from
160 * Renamed the values that the rename `dist` keyword argument can have from
161 `'basic'` to `'b'`.
161 `'basic'` to `'b'`.
162
162
163 * IPython has a larger set of dependencies if you want all of its capabilities.
163 * IPython has a larger set of dependencies if you want all of its capabilities.
164 See the `setup.py` script for details.
164 See the `setup.py` script for details.
165
165
166 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
166 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
167 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
167 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
168 Instead they take the filename of a file that contains the FURL for that
168 Instead they take the filename of a file that contains the FURL for that
169 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
169 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
170 and the constructor can be left empty.
170 and the constructor can be left empty.
171
171
172 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
172 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
173 using the factory functions :func:`get_multiengine_client` and
173 using the factory functions :func:`get_multiengine_client` and
174 :func:`get_task_client`. These return a `Deferred` to the actual client.
174 :func:`get_task_client`. These return a `Deferred` to the actual client.
175
175
176 * The command line options to `ipcontroller` and `ipengine` have changed to
176 * The command line options to `ipcontroller` and `ipengine` have changed to
177 reflect the new Foolscap network protocol and the FURL files. Please see the
177 reflect the new Foolscap network protocol and the FURL files. Please see the
178 help for these scripts for details.
178 help for these scripts for details.
179
179
180 * The configuration files for the kernel have changed because of the Foolscap
180 * The configuration files for the kernel have changed because of the Foolscap
181 stuff. If you were using custom config files before, you should delete them
181 stuff. If you were using custom config files before, you should delete them
182 and regenerate new ones.
182 and regenerate new ones.
183
183
184 Changes merged in from IPython1
184 Changes merged in from IPython1
185 -------------------------------
185 -------------------------------
186
186
187 New features
187 New features
188 ............
188 ............
189
189
190 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and
190 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and
191 zope.interface are now easy installable, we can declare them as dependencies
191 zope.interface are now easy installable, we can declare them as dependencies
192 in our setupegg.py script.
192 in our setupegg.py script.
193
193
194 * IPython is now compatible with Twisted 2.5.0 and 8.x.
194 * IPython is now compatible with Twisted 2.5.0 and 8.x.
195
195
196 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
196 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
197
197
198 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
198 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
199 been merged into IPython and is still in `ipython1-dev`.
199 been merged into IPython and is still in `ipython1-dev`.
200
200
201 * The ``TaskController`` now has methods for getting the queue status.
201 * The ``TaskController`` now has methods for getting the queue status.
202
202
203 * The ``TaskResult`` objects not have information about how long the task
203 * The ``TaskResult`` objects not have information about how long the task
204 took to run.
204 took to run.
205
205
206 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
206 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
207 we use to carry additional info around.
207 we use to carry additional info around.
208
208
209 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
209 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
210 return deferreds) of the client classes. This is designed to users who want
210 return deferreds) of the client classes. This is designed to users who want
211 to run their own Twisted reactor.
211 to run their own Twisted reactor.
212
212
213 * All the clients in :mod:`client` are now based on Twisted. This is done by
213 * All the clients in :mod:`client` are now based on Twisted. This is done by
214 running the Twisted reactor in a separate thread and using the
214 running the Twisted reactor in a separate thread and using the
215 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
215 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
216
216
217 * Functions can now be pushed/pulled to/from engines using
217 * Functions can now be pushed/pulled to/from engines using
218 :meth:`MultiEngineClient.push_function` and
218 :meth:`MultiEngineClient.push_function` and
219 :meth:`MultiEngineClient.pull_function`.
219 :meth:`MultiEngineClient.pull_function`.
220
220
221 * Gather/scatter are now implemented in the client to reduce the work load
221 * Gather/scatter are now implemented in the client to reduce the work load
222 of the controller and improve performance.
222 of the controller and improve performance.
223
223
224 * Complete rewrite of the IPython docuementation. All of the documentation
224 * Complete rewrite of the IPython docuementation. All of the documentation
225 from the IPython website has been moved into docs/source as restructured
225 from the IPython website has been moved into docs/source as restructured
226 text documents. PDF and HTML documentation are being generated using
226 text documents. PDF and HTML documentation are being generated using
227 Sphinx.
227 Sphinx.
228
228
229 * New developer oriented documentation: development guidelines and roadmap.
229 * New developer oriented documentation: development guidelines and roadmap.
230
230
231 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt``
231 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt``
232 file that is organized by release and is meant to provide something more
232 file that is organized by release and is meant to provide something more
233 relevant for users.
233 relevant for users.
234
234
235 Bug fixes
235 Bug fixes
236 .........
236 .........
237
237
238 * Created a proper ``MANIFEST.in`` file to create source distributions.
238 * Created a proper ``MANIFEST.in`` file to create source distributions.
239
239
240 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
240 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
241 actions were being collected with a :class:`DeferredList` with
241 actions were being collected with a :class:`DeferredList` with
242 ``fireononeerrback=1``. This meant that methods were returning
242 ``fireononeerrback=1``. This meant that methods were returning
243 before all engines had given their results. This was causing extremely odd
243 before all engines had given their results. This was causing extremely odd
244 bugs in certain cases. To fix this problem, we have 1) set
244 bugs in certain cases. To fix this problem, we have 1) set
245 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
245 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
246 before returning and 2) introduced a :exc:`CompositeError` exception
246 before returning and 2) introduced a :exc:`CompositeError` exception
247 that wraps all of the engine exceptions. This is a huge change as it means
247 that wraps all of the engine exceptions. This is a huge change as it means
248 that users will have to catch :exc:`CompositeError` rather than the actual
248 that users will have to catch :exc:`CompositeError` rather than the actual
249 exception.
249 exception.
250
250
251 Backwards incompatible changes
251 Backwards incompatible changes
252 ..............................
252 ..............................
253
253
254 * All names have been renamed to conform to the lowercase_with_underscore
254 * All names have been renamed to conform to the lowercase_with_underscore
255 convention. This will require users to change references to all names like
255 convention. This will require users to change references to all names like
256 ``queueStatus`` to ``queue_status``.
256 ``queueStatus`` to ``queue_status``.
257
257
258 * Previously, methods like :meth:`MultiEngineClient.push` and
258 * Previously, methods like :meth:`MultiEngineClient.push` and
259 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
259 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
260 becoming a problem as we weren't able to introduce new keyword arguments into
260 becoming a problem as we weren't able to introduce new keyword arguments into
261 the API. Now these methods simple take a dict or sequence. This has also
261 the API. Now these methods simple take a dict or sequence. This has also
262 allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and
262 allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and
263 :meth:`pullAll`. These things are now handled with the ``targets`` keyword
263 :meth:`pullAll`. These things are now handled with the ``targets`` keyword
264 argument that defaults to ``'all'``.
264 argument that defaults to ``'all'``.
265
265
266 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
266 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
267 :attr:`MultiEngineClient.targets`.
267 :attr:`MultiEngineClient.targets`.
268
268
269 * All methods in the MultiEngine interface now accept the optional keyword
269 * All methods in the MultiEngine interface now accept the optional keyword
270 argument ``block``.
270 argument ``block``.
271
271
272 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
272 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
273 :class:`TaskController` to :class:`TaskClient`.
273 :class:`TaskController` to :class:`TaskClient`.
274
274
275 * Renamed the top-level module from :mod:`api` to :mod:`client`.
275 * Renamed the top-level module from :mod:`api` to :mod:`client`.
276
276
277 * Most methods in the multiengine interface now raise a :exc:`CompositeError`
277 * Most methods in the multiengine interface now raise a :exc:`CompositeError`
278 exception that wraps the user's exceptions, rather than just raising the raw
278 exception that wraps the user's exceptions, rather than just raising the raw
279 user's exception.
279 user's exception.
280
280
281 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
281 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
282 and ``pull``.
282 and ``pull``.
283
283
General Comments 0
You need to be logged in to leave comments. Login now