##// END OF EJS Templates
Updating development.txt with a short description of a typical IPython development workflow using...
Brian E Granger -
Show More
@@ -1,315 +1,344 b''
1 .. _development:
1 .. _development:
2
2
3 ==================================
3 ==================================
4 IPython development guidelines
4 IPython development guidelines
5 ==================================
5 ==================================
6
6
7 .. contents::
7 .. contents::
8 ..
9 1 Overview
10 2 Project organization
11 2.1 Subpackages
12 2.2 Installation and dependencies
13 2.3 Specific subpackages
14 3 Version control
15 4 Documentation
16 4.1 Standalone documentation
17 4.2 Docstring format
18 5 Coding conventions
19 5.1 General
20 5.2 Naming conventions
21 6 Testing
22 7 Configuration
23 ..
24
8
25
9
26 Overview
10 Overview
27 ========
11 ========
28
12
29 IPython is the next generation of IPython. It is named such for two reasons:
13 IPython is the next generation of IPython. It is named such for two reasons:
30
14
31 - Eventually, IPython will become IPython version 1.0.
15 - Eventually, IPython will become IPython version 1.0.
32 - This new code base needs to be able to co-exist with the existing IPython until
16 - This new code base needs to be able to co-exist with the existing IPython until
33 it is a full replacement for it. Thus we needed a different name. We couldn't
17 it is a full replacement for it. Thus we needed a different name. We couldn't
34 use ``ipython`` (lowercase) as some files systems are case insensitive.
18 use ``ipython`` (lowercase) as some files systems are case insensitive.
35
19
36 There are two, no three, main goals of the IPython effort:
20 There are two, no three, main goals of the IPython effort:
37
21
38 1. Clean up the existing codebase and write lots of tests.
22 1. Clean up the existing codebase and write lots of tests.
39 2. Separate the core functionality of IPython from the terminal to enable IPython
23 2. Separate the core functionality of IPython from the terminal to enable IPython
40 to be used from within a variety of GUI applications.
24 to be used from within a variety of GUI applications.
41 3. Implement a system for interactive parallel computing.
25 3. Implement a system for interactive parallel computing.
42
26
43 While the third goal may seem a bit unrelated to the main focus of IPython, it turns
27 While the third goal may seem a bit unrelated to the main focus of IPython, it turns
44 out that the technologies required for this goal are nearly identical with those
28 out that the technologies required for this goal are nearly identical with those
45 required for goal two. This is the main reason the interactive parallel computing
29 required for goal two. This is the main reason the interactive parallel computing
46 capabilities are being put into IPython proper. Currently the third of these goals is
30 capabilities are being put into IPython proper. Currently the third of these goals is
47 furthest along.
31 furthest along.
48
32
49 This document describes IPython from the perspective of developers.
33 This document describes IPython from the perspective of developers.
50
34
51
35
52 Project organization
36 Project organization
53 ====================
37 ====================
54
38
55 Subpackages
39 Subpackages
56 -----------
40 -----------
57
41
58 IPython is organized into semi self-contained subpackages. Each of the subpackages will have its own:
42 IPython is organized into semi self-contained subpackages. Each of the subpackages will have its own:
59
43
60 - **Dependencies**. One of the most important things to keep in mind in
44 - **Dependencies**. One of the most important things to keep in mind in
61 partitioning code amongst subpackages, is that they should be used to cleanly
45 partitioning code amongst subpackages, is that they should be used to cleanly
62 encapsulate dependencies.
46 encapsulate dependencies.
63 - **Tests**. Each subpackage shoud have its own ``tests`` subdirectory that
47 - **Tests**. Each subpackage shoud have its own ``tests`` subdirectory that
64 contains all of the tests for that package. For information about writing tests
48 contains all of the tests for that package. For information about writing tests
65 for IPython, see the `Testing System`_ section of this document.
49 for IPython, see the `Testing System`_ section of this document.
66 - **Configuration**. Each subpackage should have its own ``config`` subdirectory
50 - **Configuration**. Each subpackage should have its own ``config`` subdirectory
67 that contains the configuration information for the components of the
51 that contains the configuration information for the components of the
68 subpackage. For information about how the IPython configuration system
52 subpackage. For information about how the IPython configuration system
69 works, see the `Configuration System`_ section of this document.
53 works, see the `Configuration System`_ section of this document.
70 - **Scripts**. Each subpackage should have its own ``scripts`` subdirectory that
54 - **Scripts**. Each subpackage should have its own ``scripts`` subdirectory that
71 contains all of the command line scripts associated with the subpackage.
55 contains all of the command line scripts associated with the subpackage.
72
56
73 Installation and dependencies
57 Installation and dependencies
74 -----------------------------
58 -----------------------------
75
59
76 IPython will not use `setuptools`_ for installation. Instead, we will use standard
60 IPython will not use `setuptools`_ for installation. Instead, we will use standard
77 ``setup.py`` scripts that use `distutils`_. While there are a number a extremely nice
61 ``setup.py`` scripts that use `distutils`_. While there are a number a extremely nice
78 features that `setuptools`_ has (like namespace packages), the current implementation
62 features that `setuptools`_ has (like namespace packages), the current implementation
79 of `setuptools`_ has performance problems, particularly on shared file systems. In
63 of `setuptools`_ has performance problems, particularly on shared file systems. In
80 particular, when Python packages are installed on NSF file systems, import times
64 particular, when Python packages are installed on NSF file systems, import times
81 become much too long (up towards 10 seconds).
65 become much too long (up towards 10 seconds).
82
66
83 Because IPython is being used extensively in the context of high performance
67 Because IPython is being used extensively in the context of high performance
84 computing, where performance is critical but shared file systems are common, we feel
68 computing, where performance is critical but shared file systems are common, we feel
85 these performance hits are not acceptable. Thus, until the performance problems
69 these performance hits are not acceptable. Thus, until the performance problems
86 associated with `setuptools`_ are addressed, we will stick with plain `distutils`_. We
70 associated with `setuptools`_ are addressed, we will stick with plain `distutils`_. We
87 are hopeful that these problems will be addressed and that we will eventually begin
71 are hopeful that these problems will be addressed and that we will eventually begin
88 using `setuptools`_. Because of this, we are trying to organize IPython in a way that
72 using `setuptools`_. Because of this, we are trying to organize IPython in a way that
89 will make the eventual transition to `setuptools`_ as painless as possible.
73 will make the eventual transition to `setuptools`_ as painless as possible.
90
74
91 Because we will be using `distutils`_, there will be no method for automatically installing dependencies. Instead, we are following the approach of `Matplotlib`_ which can be summarized as follows:
75 Because we will be using `distutils`_, there will be no method for automatically installing dependencies. Instead, we are following the approach of `Matplotlib`_ which can be summarized as follows:
92
76
93 - Distinguish between required and optional dependencies. However, the required
77 - Distinguish between required and optional dependencies. However, the required
94 dependencies for IPython should be only the Python standard library.
78 dependencies for IPython should be only the Python standard library.
95 - Upon installation check to see which optional dependencies are present and tell
79 - Upon installation check to see which optional dependencies are present and tell
96 the user which parts of IPython need which optional dependencies.
80 the user which parts of IPython need which optional dependencies.
97
81
98 It is absolutely critical that each subpackage of IPython has a clearly specified set
82 It is absolutely critical that each subpackage of IPython has a clearly specified set
99 of dependencies and that dependencies are not carelessly inherited from other IPython
83 of dependencies and that dependencies are not carelessly inherited from other IPython
100 subpackages. Furthermore, tests that have certain dependencies should not fail if
84 subpackages. Furthermore, tests that have certain dependencies should not fail if
101 those dependencies are not present. Instead they should be skipped and print a
85 those dependencies are not present. Instead they should be skipped and print a
102 message.
86 message.
103
87
104 .. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools
88 .. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools
105 .. _distutils: http://docs.python.org/lib/module-distutils.html
89 .. _distutils: http://docs.python.org/lib/module-distutils.html
106 .. _Matplotlib: http://matplotlib.sourceforge.net/
90 .. _Matplotlib: http://matplotlib.sourceforge.net/
107
91
108 Specific subpackages
92 Specific subpackages
109 --------------------
93 --------------------
110
94
111 ``core``
95 ``core``
112 This is the core functionality of IPython that is independent of the
96 This is the core functionality of IPython that is independent of the
113 terminal, network and GUIs. Most of the code that is in the current
97 terminal, network and GUIs. Most of the code that is in the current
114 IPython trunk will be refactored, cleaned up and moved here.
98 IPython trunk will be refactored, cleaned up and moved here.
115
99
116 ``kernel``
100 ``kernel``
117 The enables the IPython core to be expose to a the network. This is
101 The enables the IPython core to be expose to a the network. This is
118 also where all of the parallel computing capabilities are to be found.
102 also where all of the parallel computing capabilities are to be found.
119
103
120 ``config``
104 ``config``
121 The configuration package used by IPython.
105 The configuration package used by IPython.
122
106
123 ``frontends``
107 ``frontends``
124 The various frontends for IPython. A frontend is the end-user application
108 The various frontends for IPython. A frontend is the end-user application
125 that exposes the capabilities of IPython to the user. The most basic frontend
109 that exposes the capabilities of IPython to the user. The most basic frontend
126 will simply be a terminal based application that looks just like today 's
110 will simply be a terminal based application that looks just like today 's
127 IPython. Other frontends will likely be more powerful and based on GUI toolkits.
111 IPython. Other frontends will likely be more powerful and based on GUI toolkits.
128
112
129 ``notebook``
113 ``notebook``
130 An application that allows users to work with IPython notebooks.
114 An application that allows users to work with IPython notebooks.
131
115
132 ``tools``
116 ``tools``
133 This is where general utilities go.
117 This is where general utilities go.
134
118
135
119
136 Version control
120 Version control
137 ===============
121 ===============
138
122
139 In the past, IPython development has been done using `Subversion`__. We are currently trying out `Bazaar`__ and `Launchpad`__.
123 In the past, IPython development has been done using `Subversion`__. Recently, we made the transition to using `Bazaar`__ and `Launchpad`__. This makes it much easier for people
124 to contribute code to IPython. Here is a sketch of how to use Bazaar for IPython
125 development. First, you should install Bazaar. After you have done that, make
126 sure that it is working by getting the latest main branch of IPython::
127
128 $ bzr branch lp:ipython
129
130 Now you can create a new branch for you to do your work in::
131
132 $ bzr branch ipython ipython-mybranch
133
134 The typical work cycle in this branch will be to make changes in `ipython-mybranch`
135 and then commit those changes using the commit command::
136
137 $ ...do work in ipython-mybranch...
138 $ bzr ci -m "the commit message goes here"
139
140 While working with this branch, it is a good idea to merge in changes that have been
141 made upstream in the parent branch. This can be done by doing::
142
143 $ bzr pull
144
145 If this command shows that the branches have diverged, then you should do a merge
146 instead::
147
148 $ bzr merge lp:ipython
149
150 If you want others to be able to see your branch, you can create an account with
151 launchpad and push the branch to your own workspace::
152
153 $ bzr push bzr+ssh://<me>@bazaar.launchpad.net/~<me>/+junk/ipython-mybranch
154
155 Finally, once the work in your branch is done, you can merge your changes back into
156 the `ipython` branch by using merge::
157
158 $ cd ipython
159 $ merge ../ipython-mybranch
160 [resolve any conflicts]
161 $ bzr ci -m "Fixing that bug"
162 $ bzr push
163
164 But this will require you to have write permissions to the `ipython` branch. It you don't
165 you can tell one of the IPython devs about your branch and they can do the merge for you.
166
167 More information about Bazaar workflows can be found `here`__.
140
168
141 .. __: http://subversion.tigris.org/
169 .. __: http://subversion.tigris.org/
142 .. __: http://bazaar-vcs.org/
170 .. __: http://bazaar-vcs.org/
143 .. __: http://www.launchpad.net/ipython
171 .. __: http://www.launchpad.net/ipython
172 .. __: http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html
144
173
145 Documentation
174 Documentation
146 =============
175 =============
147
176
148 Standalone documentation
177 Standalone documentation
149 ------------------------
178 ------------------------
150
179
151 All standalone documentation should be written in plain text (``.txt``) files using
180 All standalone documentation should be written in plain text (``.txt``) files using
152 `reStructuredText`_ for markup and formatting. All such documentation should be placed
181 `reStructuredText`_ for markup and formatting. All such documentation should be placed
153 in the top level directory ``docs`` of the IPython source tree. Or, when appropriate,
182 in the top level directory ``docs`` of the IPython source tree. Or, when appropriate,
154 a suitably named subdirectory should be used. The documentation in this location will
183 a suitably named subdirectory should be used. The documentation in this location will
155 serve as the main source for IPython documentation and all existing documentation
184 serve as the main source for IPython documentation and all existing documentation
156 should be converted to this format.
185 should be converted to this format.
157
186
158 In the future, the text files in the ``docs`` directory will be used to generate all
187 In the future, the text files in the ``docs`` directory will be used to generate all
159 forms of documentation for IPython. This include documentation on the IPython website
188 forms of documentation for IPython. This include documentation on the IPython website
160 as well as *pdf* documentation.
189 as well as *pdf* documentation.
161
190
162 .. _reStructuredText: http://docutils.sourceforge.net/rst.html
191 .. _reStructuredText: http://docutils.sourceforge.net/rst.html
163
192
164 Docstring format
193 Docstring format
165 ----------------
194 ----------------
166
195
167 Good docstrings are very important. All new code will use `Epydoc`_ for generating API
196 Good docstrings are very important. All new code will use `Epydoc`_ for generating API
168 docs, so we will follow the `Epydoc`_ conventions. More specifically, we will use
197 docs, so we will follow the `Epydoc`_ conventions. More specifically, we will use
169 `reStructuredText`_ for markup and formatting, since it is understood by a wide
198 `reStructuredText`_ for markup and formatting, since it is understood by a wide
170 variety of tools. This means that if in the future we have any reason to change from
199 variety of tools. This means that if in the future we have any reason to change from
171 `Epydoc`_ to something else, we'll have fewer transition pains.
200 `Epydoc`_ to something else, we'll have fewer transition pains.
172
201
173 Details about using `reStructuredText`_ for docstrings can be found `here
202 Details about using `reStructuredText`_ for docstrings can be found `here
174 <http://epydoc.sourceforge.net/manual-othermarkup.html>`_.
203 <http://epydoc.sourceforge.net/manual-othermarkup.html>`_.
175
204
176 .. _Epydoc: http://epydoc.sourceforge.net/
205 .. _Epydoc: http://epydoc.sourceforge.net/
177
206
178 Additional PEPs of interest regarding documentation of code:
207 Additional PEPs of interest regarding documentation of code:
179
208
180 - `Docstring Conventions <http://www.python.org/peps/pep-0257.html>`_
209 - `Docstring Conventions <http://www.python.org/peps/pep-0257.html>`_
181 - `Docstring Processing System Framework <http://www.python.org/peps/pep-0256.html>`_
210 - `Docstring Processing System Framework <http://www.python.org/peps/pep-0256.html>`_
182 - `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
211 - `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
183
212
184
213
185 Coding conventions
214 Coding conventions
186 ==================
215 ==================
187
216
188 General
217 General
189 -------
218 -------
190
219
191 In general, we'll try to follow the standard Python style conventions as described here:
220 In general, we'll try to follow the standard Python style conventions as described here:
192
221
193 - `Style Guide for Python Code <http://www.python.org/peps/pep-0008.html>`_
222 - `Style Guide for Python Code <http://www.python.org/peps/pep-0008.html>`_
194
223
195
224
196 Other comments:
225 Other comments:
197
226
198 - In a large file, top level classes and functions should be
227 - In a large file, top level classes and functions should be
199 separated by 2-3 lines to make it easier to separate them visually.
228 separated by 2-3 lines to make it easier to separate them visually.
200 - Use 4 spaces for indentation.
229 - Use 4 spaces for indentation.
201 - Keep the ordering of methods the same in classes that have the same
230 - Keep the ordering of methods the same in classes that have the same
202 methods. This is particularly true for classes that implement
231 methods. This is particularly true for classes that implement
203 similar interfaces and for interfaces that are similar.
232 similar interfaces and for interfaces that are similar.
204
233
205 Naming conventions
234 Naming conventions
206 ------------------
235 ------------------
207
236
208 In terms of naming conventions, we'll follow the guidelines from the `Style Guide for
237 In terms of naming conventions, we'll follow the guidelines from the `Style Guide for
209 Python Code`_.
238 Python Code`_.
210
239
211 For all new IPython code (and much existing code is being refactored), we'll use:
240 For all new IPython code (and much existing code is being refactored), we'll use:
212
241
213 - All ``lowercase`` module names.
242 - All ``lowercase`` module names.
214
243
215 - ``CamelCase`` for class names.
244 - ``CamelCase`` for class names.
216
245
217 - ``lowercase_with_underscores`` for methods, functions, variables and attributes.
246 - ``lowercase_with_underscores`` for methods, functions, variables and attributes.
218
247
219 This may be confusing as most of the existing IPython codebase uses a different convention (``lowerCamelCase`` for methods and attributes). Slowly, we will move IPython over to the new
248 This may be confusing as most of the existing IPython codebase uses a different convention (``lowerCamelCase`` for methods and attributes). Slowly, we will move IPython over to the new
220 convention, providing shadow names for backward compatibility in public interfaces.
249 convention, providing shadow names for backward compatibility in public interfaces.
221
250
222 There are, however, some important exceptions to these rules. In some cases, IPython
251 There are, however, some important exceptions to these rules. In some cases, IPython
223 code will interface with packages (Twisted, Wx, Qt) that use other conventions. At some level this makes it impossible to adhere to our own standards at all times. In particular, when subclassing classes that use other naming conventions, you must follow their naming conventions. To deal with cases like this, we propose the following policy:
252 code will interface with packages (Twisted, Wx, Qt) that use other conventions. At some level this makes it impossible to adhere to our own standards at all times. In particular, when subclassing classes that use other naming conventions, you must follow their naming conventions. To deal with cases like this, we propose the following policy:
224
253
225 - If you are subclassing a class that uses different conventions, use its
254 - If you are subclassing a class that uses different conventions, use its
226 naming conventions throughout your subclass. Thus, if you are creating a
255 naming conventions throughout your subclass. Thus, if you are creating a
227 Twisted Protocol class, used Twisted's ``namingSchemeForMethodsAndAttributes.``
256 Twisted Protocol class, used Twisted's ``namingSchemeForMethodsAndAttributes.``
228
257
229 - All IPython's official interfaces should use our conventions. In some cases
258 - All IPython's official interfaces should use our conventions. In some cases
230 this will mean that you need to provide shadow names (first implement ``fooBar``
259 this will mean that you need to provide shadow names (first implement ``fooBar``
231 and then ``foo_bar = fooBar``). We want to avoid this at all costs, but it
260 and then ``foo_bar = fooBar``). We want to avoid this at all costs, but it
232 will probably be necessary at times. But, please use this sparingly!
261 will probably be necessary at times. But, please use this sparingly!
233
262
234 Implementation-specific *private* methods will use ``_single_underscore_prefix``.
263 Implementation-specific *private* methods will use ``_single_underscore_prefix``.
235 Names with a leading double underscore will *only* be used in special cases, as they
264 Names with a leading double underscore will *only* be used in special cases, as they
236 makes subclassing difficult (such names are not easily seen by child classes).
265 makes subclassing difficult (such names are not easily seen by child classes).
237
266
238 Occasionally some run-in lowercase names are used, but mostly for very short names or
267 Occasionally some run-in lowercase names are used, but mostly for very short names or
239 where we are implementing methods very similar to existing ones in a base class (like
268 where we are implementing methods very similar to existing ones in a base class (like
240 ``runlines()`` where ``runsource()`` and ``runcode()`` had established precedent).
269 ``runlines()`` where ``runsource()`` and ``runcode()`` had established precedent).
241
270
242 The old IPython codebase has a big mix of classes and modules prefixed with an
271 The old IPython codebase has a big mix of classes and modules prefixed with an
243 explicit ``IP``. In Python this is mostly unnecessary, redundant and frowned upon, as
272 explicit ``IP``. In Python this is mostly unnecessary, redundant and frowned upon, as
244 namespaces offer cleaner prefixing. The only case where this approach is justified is
273 namespaces offer cleaner prefixing. The only case where this approach is justified is
245 for classes which are expected to be imported into external namespaces and a very
274 for classes which are expected to be imported into external namespaces and a very
246 generic name (like Shell) is too likely to clash with something else. We'll need to
275 generic name (like Shell) is too likely to clash with something else. We'll need to
247 revisit this issue as we clean up and refactor the code, but in general we should
276 revisit this issue as we clean up and refactor the code, but in general we should
248 remove as many unnecessary ``IP``/``ip`` prefixes as possible. However, if a prefix
277 remove as many unnecessary ``IP``/``ip`` prefixes as possible. However, if a prefix
249 seems absolutely necessary the more specific ``IPY`` or ``ipy`` are preferred.
278 seems absolutely necessary the more specific ``IPY`` or ``ipy`` are preferred.
250
279
251 .. _devel_testing:
280 .. _devel_testing:
252
281
253 Testing system
282 Testing system
254 ==============
283 ==============
255
284
256 It is extremely important that all code contributed to IPython has tests. Tests should
285 It is extremely important that all code contributed to IPython has tests. Tests should
257 be written as unittests, doctests or as entities that the `Nose`_ testing package will
286 be written as unittests, doctests or as entities that the `Nose`_ testing package will
258 find. Regardless of how the tests are written, we will use `Nose`_ for discovering and
287 find. Regardless of how the tests are written, we will use `Nose`_ for discovering and
259 running the tests. `Nose`_ will be required to run the IPython test suite, but will
288 running the tests. `Nose`_ will be required to run the IPython test suite, but will
260 not be required to simply use IPython.
289 not be required to simply use IPython.
261
290
262 .. _Nose: http://code.google.com/p/python-nose/
291 .. _Nose: http://code.google.com/p/python-nose/
263
292
264 Tests of `Twisted`__ using code should be written by subclassing the ``TestCase`` class
293 Tests of `Twisted`__ using code should be written by subclassing the ``TestCase`` class
265 that comes with ``twisted.trial.unittest``. When this is done, `Nose`_ will be able to
294 that comes with ``twisted.trial.unittest``. When this is done, `Nose`_ will be able to
266 run the tests and the twisted reactor will be handled correctly.
295 run the tests and the twisted reactor will be handled correctly.
267
296
268 .. __: http://www.twistedmatrix.com
297 .. __: http://www.twistedmatrix.com
269
298
270 Each subpackage in IPython should have its own ``tests`` directory that contains all
299 Each subpackage in IPython should have its own ``tests`` directory that contains all
271 of the tests for that subpackage. This allows each subpackage to be self-contained. If
300 of the tests for that subpackage. This allows each subpackage to be self-contained. If
272 a subpackage has any dependencies beyond the Python standard library, the tests for
301 a subpackage has any dependencies beyond the Python standard library, the tests for
273 that subpackage should be skipped if the dependencies are not found. This is very
302 that subpackage should be skipped if the dependencies are not found. This is very
274 important so users don't get tests failing simply because they don't have dependencies.
303 important so users don't get tests failing simply because they don't have dependencies.
275
304
276 We also need to look into use Noses ability to tag tests to allow a more modular
305 We also need to look into use Noses ability to tag tests to allow a more modular
277 approach of running tests.
306 approach of running tests.
278
307
279 .. _devel_config:
308 .. _devel_config:
280
309
281 Configuration system
310 Configuration system
282 ====================
311 ====================
283
312
284 IPython uses `.ini`_ files for configuration purposes. This represents a huge
313 IPython uses `.ini`_ files for configuration purposes. This represents a huge
285 improvement over the configuration system used in IPython. IPython works with these
314 improvement over the configuration system used in IPython. IPython works with these
286 files using the `ConfigObj`_ package, which IPython includes as
315 files using the `ConfigObj`_ package, which IPython includes as
287 ``ipython1/external/configobj.py``.
316 ``ipython1/external/configobj.py``.
288
317
289 Currently, we are using raw `ConfigObj`_ objects themselves. Each subpackage of IPython
318 Currently, we are using raw `ConfigObj`_ objects themselves. Each subpackage of IPython
290 should contain a ``config`` subdirectory that contains all of the configuration
319 should contain a ``config`` subdirectory that contains all of the configuration
291 information for the subpackage. To see how configuration information is defined (along
320 information for the subpackage. To see how configuration information is defined (along
292 with defaults) see at the examples in ``ipython1/kernel/config`` and
321 with defaults) see at the examples in ``ipython1/kernel/config`` and
293 ``ipython1/core/config``. Likewise, to see how the configuration information is used,
322 ``ipython1/core/config``. Likewise, to see how the configuration information is used,
294 see examples in ``ipython1/kernel/scripts/ipengine.py``.
323 see examples in ``ipython1/kernel/scripts/ipengine.py``.
295
324
296 Eventually, we will add a new layer on top of the raw `ConfigObj`_ objects. We are
325 Eventually, we will add a new layer on top of the raw `ConfigObj`_ objects. We are
297 calling this new layer, ``tconfig``, as it will use a `Traits`_-like validation model.
326 calling this new layer, ``tconfig``, as it will use a `Traits`_-like validation model.
298 We won't actually use `Traits`_, but will implement something similar in pure Python.
327 We won't actually use `Traits`_, but will implement something similar in pure Python.
299 But, even in this new system, we will still use `ConfigObj`_ and `.ini`_ files
328 But, even in this new system, we will still use `ConfigObj`_ and `.ini`_ files
300 underneath the hood. Talk to Fernando if you are interested in working on this part of
329 underneath the hood. Talk to Fernando if you are interested in working on this part of
301 IPython. The current prototype of ``tconfig`` is located in the IPython sandbox.
330 IPython. The current prototype of ``tconfig`` is located in the IPython sandbox.
302
331
303 .. _.ini: http://docs.python.org/lib/module-ConfigParser.html
332 .. _.ini: http://docs.python.org/lib/module-ConfigParser.html
304 .. _ConfigObj: http://www.voidspace.org.uk/python/configobj.html
333 .. _ConfigObj: http://www.voidspace.org.uk/python/configobj.html
305 .. _Traits: http://code.enthought.com/traits/
334 .. _Traits: http://code.enthought.com/traits/
306
335
307
336
308
337
309
338
310
339
311
340
312
341
313
342
314
343
315
344
General Comments 0
You need to be logged in to leave comments. Login now