|
@@
-1,228
+1,228
b''
|
|
1
|
=============================
|
|
1
|
=============================
|
|
2
|
IPython module reorganization
|
|
2
|
IPython module reorganization
|
|
3
|
=============================
|
|
3
|
=============================
|
|
4
|
|
|
4
|
|
|
5
|
Currently, IPython has many top-level modules that serve many different purposes.
|
|
5
|
Currently, IPython has many top-level modules that serve many different purposes.
|
|
6
|
The lack of organization make it very difficult for developers to work on IPython
|
|
6
|
The lack of organization make it very difficult for developers to work on IPython
|
|
7
|
and understand its design. This document contains notes about how we will reorganize
|
|
7
|
and understand its design. This document contains notes about how we will reorganize
|
|
8
|
the modules into sub-packages.
|
|
8
|
the modules into sub-packages.
|
|
9
|
|
|
9
|
|
|
10
|
.. warning::
|
|
10
|
.. warning::
|
|
11
|
|
|
11
|
|
|
12
|
This effort will possibly break third party packages that use IPython as
|
|
12
|
This effort will possibly break third party packages that use IPython as
|
|
13
|
a library or hack on the IPython internals.
|
|
13
|
a library or hack on the IPython internals.
|
|
14
|
|
|
14
|
|
|
15
|
.. warning::
|
|
15
|
.. warning::
|
|
16
|
|
|
16
|
|
|
17
|
This effort will result in the removal from IPython of certain modules
|
|
17
|
This effort will result in the removal from IPython of certain modules
|
|
18
|
that are not used anymore, don't currently work, are unmaintained, etc.
|
|
18
|
that are not used anymore, don't currently work, are unmaintained, etc.
|
|
19
|
|
|
19
|
|
|
20
|
|
|
20
|
|
|
21
|
Current subpackges
|
|
21
|
Current subpackges
|
|
22
|
==================
|
|
22
|
==================
|
|
23
|
|
|
23
|
|
|
24
|
IPython currently has the following sub-packages:
|
|
24
|
IPython currently has the following sub-packages:
|
|
25
|
|
|
25
|
|
|
26
|
* :mod:`IPython.config`
|
|
26
|
* :mod:`IPython.config`
|
|
27
|
|
|
27
|
|
|
28
|
* :mod:`IPython.Extensions`
|
|
28
|
* :mod:`IPython.Extensions`
|
|
29
|
|
|
29
|
|
|
30
|
* :mod:`IPython.external`
|
|
30
|
* :mod:`IPython.external`
|
|
31
|
|
|
31
|
|
|
32
|
* :mod:`IPython.frontend`
|
|
32
|
* :mod:`IPython.frontend`
|
|
33
|
|
|
33
|
|
|
34
|
* :mod:`IPython.gui`
|
|
34
|
* :mod:`IPython.gui`
|
|
35
|
|
|
35
|
|
|
36
|
* :mod:`IPython.kernel`
|
|
36
|
* :mod:`IPython.kernel`
|
|
37
|
|
|
37
|
|
|
38
|
* :mod:`IPython.testing`
|
|
38
|
* :mod:`IPython.testing`
|
|
39
|
|
|
39
|
|
|
40
|
* :mod:`IPython.tests`
|
|
40
|
* :mod:`IPython.tests`
|
|
41
|
|
|
41
|
|
|
42
|
* :mod:`IPython.tools`
|
|
42
|
* :mod:`IPython.tools`
|
|
43
|
|
|
43
|
|
|
44
|
* :mod:`IPython.UserConfig`
|
|
44
|
* :mod:`IPython.UserConfig`
|
|
45
|
|
|
45
|
|
|
46
|
New Subpackages to be created
|
|
46
|
New Subpackages to be created
|
|
47
|
=============================
|
|
47
|
=============================
|
|
48
|
|
|
48
|
|
|
49
|
We propose to create the following new sub-packages:
|
|
49
|
We propose to create the following new sub-packages:
|
|
50
|
|
|
50
|
|
|
51
|
* :mod:`IPython.core`. This sub-package will contain the core of the IPython
|
|
51
|
* :mod:`IPython.core`. This sub-package will contain the core of the IPython
|
|
52
|
interpreter, but none of its extended capabilities.
|
|
52
|
interpreter, but none of its extended capabilities.
|
|
53
|
|
|
53
|
|
|
54
|
* :mod:`IPython.lib`. IPython has many extended capabilities that are not part
|
|
54
|
* :mod:`IPython.lib`. IPython has many extended capabilities that are not part
|
|
55
|
of the IPython core. These things will go here. Any better names than
|
|
55
|
of the IPython core. These things will go here. Any better names than
|
|
56
|
:mod:`IPython.lib`?
|
|
56
|
:mod:`IPython.lib`?
|
|
57
|
|
|
57
|
|
|
58
|
* :mod:`IPython.utils`. This sub-package will contain anything that might
|
|
58
|
* :mod:`IPython.utils`. This sub-package will contain anything that might
|
|
59
|
eventually be found in the Python standard library, like things in
|
|
59
|
eventually be found in the Python standard library, like things in
|
|
60
|
:mod:`genutils`. Each sub-module in this sub-package should contain functions
|
|
60
|
:mod:`genutils`. Each sub-module in this sub-package should contain
|
|
61
|
and classes that serve a single purpose.
|
|
61
|
functions and classes that serve a single purpose.
|
|
62
|
|
|
62
|
|
|
63
|
* :mod:`IPython.deathrow`. This is for code that is untested and/or rotting
|
|
63
|
* :mod:`IPython.deathrow`. This is for code that is untested and/or rotting
|
|
64
|
and needs to be removed from IPython. Eventually all this code will either
|
|
64
|
and needs to be removed from IPython. Eventually all this code will either
|
|
65
|
i) be revived by someone willing to maintain it with tests and docs and
|
|
65
|
i) be revived by someone willing to maintain it with tests and docs and
|
|
66
|
re-included into IPython or 2) be removed from IPython proper, but put into
|
|
66
|
re-included into IPython or 2) be removed from IPython proper, but put into
|
|
67
|
a separate top-level (not IPython) package that we keep around. No new code
|
|
67
|
a separate top-level (not IPython) package that we keep around. No new code
|
|
68
|
will be allowed here.
|
|
68
|
will be allowed here.
|
|
69
|
|
|
69
|
|
|
70
|
* :mod:`IPython.quarantine`. This is for code that doesn't meet IPython's
|
|
70
|
* :mod:`IPython.quarantine`. This is for code that doesn't meet IPython's
|
|
71
|
standards, but that we plan on keeping. To be moved out of this sub-package
|
|
71
|
standards, but that we plan on keeping. To be moved out of this sub-package
|
|
72
|
a module needs to have a maintainer, tests and documentation.
|
|
72
|
a module needs to have a maintainer, tests and documentation.
|
|
73
|
|
|
73
|
|
|
74
|
Where things will be moved
|
|
74
|
Where things will be moved
|
|
75
|
==========================
|
|
75
|
==========================
|
|
76
|
|
|
76
|
|
|
77
|
* :file:`ColorANSI.py`. Move to :file:`IPython/core/coloransi.py`. Maybe move to
|
|
77
|
* :file:`ColorANSI.py`. Move to :file:`IPython/core/coloransi.py`. Maybe move to
|
|
78
|
:mod:`IPython.lib` or :mod:`IPython.python`?
|
|
78
|
:mod:`IPython.lib` or :mod:`IPython.python`?
|
|
79
|
|
|
79
|
|
|
80
|
* :file:`ConfigLoader.py`. Move to :file:`IPython/config/configloader.py`.
|
|
80
|
* :file:`ConfigLoader.py`. Move to :file:`IPython/config/configloader.py`.
|
|
81
|
|
|
81
|
|
|
82
|
* :file:`CrashHandler.py`. Move to :file:`IPython/core/crashhandler`.
|
|
82
|
* :file:`CrashHandler.py`. Move to :file:`IPython/core/crashhandler`.
|
|
83
|
|
|
83
|
|
|
84
|
* :file:`DPyGetOpt.py`. Move to :mod:`IPython.sandbox` and replace with newer options parser.
|
|
84
|
* :file:`DPyGetOpt.py`. Move to :mod:`IPython.sandbox` and replace with newer options parser.
|
|
85
|
|
|
85
|
|
|
86
|
* :file:`Debugger.py`. Move to :file:`IPython/core/debugger.py`.
|
|
86
|
* :file:`Debugger.py`. Move to :file:`IPython/core/debugger.py`.
|
|
87
|
|
|
87
|
|
|
88
|
* :file:`Extensions`. This needs to be gone through separately. Minimally,
|
|
88
|
* :file:`Extensions`. This needs to be gone through separately. Minimally,
|
|
89
|
the package should be renamed to :file:`extensions`.
|
|
89
|
the package should be renamed to :file:`extensions`.
|
|
90
|
|
|
90
|
|
|
91
|
* :file:`FakeModule.py`. Move to :file:`IPython/core/fakemodule.py`.
|
|
91
|
* :file:`FakeModule.py`. Move to :file:`IPython/core/fakemodule.py`.
|
|
92
|
|
|
92
|
|
|
93
|
* :file:`Gnuplot2.py`. Move to :file:`IPython.sandbox`.
|
|
93
|
* :file:`Gnuplot2.py`. Move to :file:`IPython.sandbox`.
|
|
94
|
|
|
94
|
|
|
95
|
* :file:`GnuplotInteractive.py`. Move to :file:`IPython.sandbox`.
|
|
95
|
* :file:`GnuplotInteractive.py`. Move to :file:`IPython.sandbox`.
|
|
96
|
|
|
96
|
|
|
97
|
* :file:`GnuplotRuntime.py`. Move to :file:`IPython.sandbox`.
|
|
97
|
* :file:`GnuplotRuntime.py`. Move to :file:`IPython.sandbox`.
|
|
98
|
|
|
98
|
|
|
99
|
* :file:`Itpl.py`. Remove. Version already in :file:`IPython.external`.
|
|
99
|
* :file:`Itpl.py`. Remove. Version already in :file:`IPython.external`.
|
|
100
|
|
|
100
|
|
|
101
|
* :file:`Logger.py`. Move to :file:`IPython/core/logger.py`.
|
|
101
|
* :file:`Logger.py`. Move to :file:`IPython/core/logger.py`.
|
|
102
|
|
|
102
|
|
|
103
|
* :file:`Magic.py`. Move to :file:`IPython/core/magic.py`.
|
|
103
|
* :file:`Magic.py`. Move to :file:`IPython/core/magic.py`.
|
|
104
|
|
|
104
|
|
|
105
|
* :file:`OInspect.py`. Move to :file:`IPython/core/oinspect.py`.
|
|
105
|
* :file:`OInspect.py`. Move to :file:`IPython/core/oinspect.py`.
|
|
106
|
|
|
106
|
|
|
107
|
* :file:`OutputTrap.py`. Move to :file:`IPython/core/outputtrap.py`.
|
|
107
|
* :file:`OutputTrap.py`. Move to :file:`IPython/core/outputtrap.py`.
|
|
108
|
|
|
108
|
|
|
109
|
* :file:`Prompts.py`. Move to :file:`IPython/core/prompts.py` or
|
|
109
|
* :file:`Prompts.py`. Move to :file:`IPython/core/prompts.py` or
|
|
110
|
:file:`IPython/frontend/prompts.py`.
|
|
110
|
:file:`IPython/frontend/prompts.py`.
|
|
111
|
|
|
111
|
|
|
112
|
* :file:`PyColorize.py`. Replace with pygments? If not, move to
|
|
112
|
* :file:`PyColorize.py`. Replace with pygments? If not, move to
|
|
113
|
:file:`IPython/core/pycolorize.py`. Maybe move to :mod:`IPython.lib` or
|
|
113
|
:file:`IPython/core/pycolorize.py`. Maybe move to :mod:`IPython.lib` or
|
|
114
|
:mod:`IPython.python`?
|
|
114
|
:mod:`IPython.python`?
|
|
115
|
|
|
115
|
|
|
116
|
* :file:`Release.py`. Move to ??? or remove?
|
|
116
|
* :file:`Release.py`. Move to ??? or remove?
|
|
117
|
|
|
117
|
|
|
118
|
* :file:`Shell.py`. Move to :file:`IPython.core.shell.py` or
|
|
118
|
* :file:`Shell.py`. Move to :file:`IPython.core.shell.py` or
|
|
119
|
:file:`IPython/frontend/shell.py`.
|
|
119
|
:file:`IPython/frontend/shell.py`.
|
|
120
|
|
|
120
|
|
|
121
|
* :file:`UserConfig`. Move to a subdirectory of :file:`IPython.config`.
|
|
121
|
* :file:`UserConfig`. Move to a subdirectory of :file:`IPython.config`.
|
|
122
|
|
|
122
|
|
|
123
|
* :file:`background_jobs.py`. Move to :file:`IPython/lib/backgroundjobs.py`.
|
|
123
|
* :file:`background_jobs.py`. Move to :file:`IPython/lib/backgroundjobs.py`.
|
|
124
|
|
|
124
|
|
|
125
|
* :file:`completer.py`. Move to :file:`IPython/core/completer.py`.
|
|
125
|
* :file:`completer.py`. Move to :file:`IPython/core/completer.py`.
|
|
126
|
|
|
126
|
|
|
127
|
* :file:`config`. Good where it is!
|
|
127
|
* :file:`config`. Good where it is!
|
|
128
|
|
|
128
|
|
|
129
|
* :file:`deep_reload.py`. Move to :file:`IPython/lib/deepreload.py`.
|
|
129
|
* :file:`deep_reload.py`. Move to :file:`IPython/lib/deepreload.py`.
|
|
130
|
|
|
130
|
|
|
131
|
* :file:`demo.py`. Move to :file:`IPython/lib/demo.py`.
|
|
131
|
* :file:`demo.py`. Move to :file:`IPython/lib/demo.py`.
|
|
132
|
|
|
132
|
|
|
133
|
* :file:`dtutils.py`. Remove or move to :file:`IPython.testing` or
|
|
133
|
* :file:`dtutils.py`. Remove or move to :file:`IPython.testing` or
|
|
134
|
:file:`IPython.lib`.
|
|
134
|
:file:`IPython.lib`.
|
|
135
|
|
|
135
|
|
|
136
|
* :file:`excolors.py`. Move to :file:`IPython.core` or :file:`IPython.config`.
|
|
136
|
* :file:`excolors.py`. Move to :file:`IPython.core` or :file:`IPython.config`.
|
|
137
|
Maybe move to :mod:`IPython.lib` or :mod:`IPython.python`?
|
|
137
|
Maybe move to :mod:`IPython.lib` or :mod:`IPython.python`?
|
|
138
|
|
|
138
|
|
|
139
|
* :file:`external`. Good where it is!
|
|
139
|
* :file:`external`. Good where it is!
|
|
140
|
|
|
140
|
|
|
141
|
* :file:`frontend`. Good where it is!
|
|
141
|
* :file:`frontend`. Good where it is!
|
|
142
|
|
|
142
|
|
|
143
|
* :file:`generics.py`. Move to :file:`IPython.python`.
|
|
143
|
* :file:`generics.py`. Move to :file:`IPython.python`.
|
|
144
|
|
|
144
|
|
|
145
|
* :file:`genutils.py`. Move to :file:`IPython.python` and break up into different
|
|
145
|
* :file:`genutils.py`. Move to :file:`IPython.python` and break up into different
|
|
146
|
modules.
|
|
146
|
modules.
|
|
147
|
|
|
147
|
|
|
148
|
* :file:`gui`. Eventually this should be moved to a subdir of
|
|
148
|
* :file:`gui`. Eventually this should be moved to a subdir of
|
|
149
|
:file:`IPython.frontend`.
|
|
149
|
:file:`IPython.frontend`.
|
|
150
|
|
|
150
|
|
|
151
|
* :file:`history.py`. Move to :file:`IPython.core`.
|
|
151
|
* :file:`history.py`. Move to :file:`IPython.core`.
|
|
152
|
|
|
152
|
|
|
153
|
* :file:`hooks.py`. Move to :file:`IPython.core`.
|
|
153
|
* :file:`hooks.py`. Move to :file:`IPython.core`.
|
|
154
|
|
|
154
|
|
|
155
|
* :file:`ipapi.py`. Move to :file:`IPython.core`.
|
|
155
|
* :file:`ipapi.py`. Move to :file:`IPython.core`.
|
|
156
|
|
|
156
|
|
|
157
|
* :file:`iplib.py`. Move to :file:`IPython.core`.
|
|
157
|
* :file:`iplib.py`. Move to :file:`IPython.core`.
|
|
158
|
|
|
158
|
|
|
159
|
* :file:`ipmaker.py`: Move to :file:`IPython.core`.
|
|
159
|
* :file:`ipmaker.py`: Move to :file:`IPython.core`.
|
|
160
|
|
|
160
|
|
|
161
|
* :file:`ipstruct.py`. Move to :file:`IPython.python`.
|
|
161
|
* :file:`ipstruct.py`. Move to :file:`IPython.python`.
|
|
162
|
|
|
162
|
|
|
163
|
* :file:`irunner.py`. Move to :file:`IPython.scripts`.
|
|
163
|
* :file:`irunner.py`. Move to :file:`IPython.scripts`.
|
|
164
|
|
|
164
|
|
|
165
|
* :file:`kernel`. Good where it is.
|
|
165
|
* :file:`kernel`. Good where it is.
|
|
166
|
|
|
166
|
|
|
167
|
* :file:`macro.py`. Move to :file:`IPython.core`.
|
|
167
|
* :file:`macro.py`. Move to :file:`IPython.core`.
|
|
168
|
|
|
168
|
|
|
169
|
* :file:`numutils.py`. Move to :file:`IPython.sandbox`.
|
|
169
|
* :file:`numutils.py`. Move to :file:`IPython.sandbox`.
|
|
170
|
|
|
170
|
|
|
171
|
* :file:`platutils.py`. Move to :file:`IPython.python`.
|
|
171
|
* :file:`platutils.py`. Move to :file:`IPython.python`.
|
|
172
|
|
|
172
|
|
|
173
|
* :file:`platutils_dummy.py`. Move to :file:`IPython.python`.
|
|
173
|
* :file:`platutils_dummy.py`. Move to :file:`IPython.python`.
|
|
174
|
|
|
174
|
|
|
175
|
* :file:`platutils_posix.py`. Move to :file:`IPython.python`.
|
|
175
|
* :file:`platutils_posix.py`. Move to :file:`IPython.python`.
|
|
176
|
|
|
176
|
|
|
177
|
* :file:`platutils_win32.py`. Move to :file:`IPython.python`.
|
|
177
|
* :file:`platutils_win32.py`. Move to :file:`IPython.python`.
|
|
178
|
|
|
178
|
|
|
179
|
* :file:`prefilter.py`: Move to :file:`IPython.core`.
|
|
179
|
* :file:`prefilter.py`: Move to :file:`IPython.core`.
|
|
180
|
|
|
180
|
|
|
181
|
* :file:`rlineimpl.py`. Move to :file:`IPython.core`.
|
|
181
|
* :file:`rlineimpl.py`. Move to :file:`IPython.core`.
|
|
182
|
|
|
182
|
|
|
183
|
* :file:`shadowns.py`. Move to :file:`IPython.core`.
|
|
183
|
* :file:`shadowns.py`. Move to :file:`IPython.core`.
|
|
184
|
|
|
184
|
|
|
185
|
* :file:`shellglobals.py`. Move to :file:`IPython.core`.
|
|
185
|
* :file:`shellglobals.py`. Move to :file:`IPython.core`.
|
|
186
|
|
|
186
|
|
|
187
|
* :file:`strdispatch.py`. Move to :file:`IPython.python`.
|
|
187
|
* :file:`strdispatch.py`. Move to :file:`IPython.python`.
|
|
188
|
|
|
188
|
|
|
189
|
* :file:`testing`. Good where it is.
|
|
189
|
* :file:`testing`. Good where it is.
|
|
190
|
|
|
190
|
|
|
191
|
* :file:`tests`. Good where it is.
|
|
191
|
* :file:`tests`. Good where it is.
|
|
192
|
|
|
192
|
|
|
193
|
* :file:`tools`. Things in here need to be looked at and moved elsewhere like
|
|
193
|
* :file:`tools`. Things in here need to be looked at and moved elsewhere like
|
|
194
|
:file:`IPython.python`.
|
|
194
|
:file:`IPython.python`.
|
|
195
|
|
|
195
|
|
|
196
|
* :file:`twshell.py`. Move to :file:`IPython.sandbox`.
|
|
196
|
* :file:`twshell.py`. Move to :file:`IPython.sandbox`.
|
|
197
|
|
|
197
|
|
|
198
|
* :file:`ultraTB.py`. Move to :file:`IPython/core/ultratb.py`.
|
|
198
|
* :file:`ultraTB.py`. Move to :file:`IPython/core/ultratb.py`.
|
|
199
|
|
|
199
|
|
|
200
|
* :file:`upgrade_dir.py`. Move to :file:`IPython/python/upgradedir.py`.
|
|
200
|
* :file:`upgrade_dir.py`. Move to :file:`IPython/python/upgradedir.py`.
|
|
201
|
|
|
201
|
|
|
202
|
* :file:`usage.py`. Move to :file:`IPython.core`.
|
|
202
|
* :file:`usage.py`. Move to :file:`IPython.core`.
|
|
203
|
|
|
203
|
|
|
204
|
* :file:`wildcard.py`. Move to :file:`IPython.python` or :file:`IPython.core`.
|
|
204
|
* :file:`wildcard.py`. Move to :file:`IPython.python` or :file:`IPython.core`.
|
|
205
|
|
|
205
|
|
|
206
|
* :file:`winconsole.py`. Move to :file:`IPython.lib`.
|
|
206
|
* :file:`winconsole.py`. Move to :file:`IPython.lib`.
|
|
207
|
|
|
207
|
|
|
208
|
Other things
|
|
208
|
Other things
|
|
209
|
============
|
|
209
|
============
|
|
210
|
|
|
210
|
|
|
211
|
When these files are moved around, a number of other things will happen at the same time:
|
|
211
|
When these files are moved around, a number of other things will happen at the same time:
|
|
212
|
|
|
212
|
|
|
213
|
1. Test files will be created for each module in IPython. Minimally, all
|
|
213
|
1. Test files will be created for each module in IPython. Minimally, all
|
|
214
|
modules will be imported as a part of the test. This will serve as a
|
|
214
|
modules will be imported as a part of the test. This will serve as a
|
|
215
|
test of the module reorganization. These tests will be put into new
|
|
215
|
test of the module reorganization. These tests will be put into new
|
|
216
|
:file:`tests` subdirectories that each package will have.
|
|
216
|
:file:`tests` subdirectories that each package will have.
|
|
217
|
|
|
217
|
|
|
218
|
2. PyFlakes and other code checkers will be run to look for problems.
|
|
218
|
2. PyFlakes and other code checkers will be run to look for problems.
|
|
219
|
|
|
219
|
|
|
220
|
3. Modules will be renamed to comply with PEP 8 naming conventions: all
|
|
220
|
3. Modules will be renamed to comply with PEP 8 naming conventions: all
|
|
221
|
lowercase and no special characters like ``-`` or ``_``.
|
|
221
|
lowercase and no special characters like ``-`` or ``_``.
|
|
222
|
|
|
222
|
|
|
223
|
4. Existing tests will be moved to the appropriate :file:`tests`
|
|
223
|
4. Existing tests will be moved to the appropriate :file:`tests`
|
|
224
|
subdirectories.
|
|
224
|
subdirectories.
|
|
225
|
|
|
225
|
|
|
226
|
|
|
226
|
|
|
227
|
|
|
227
|
|
|
228
|
|
|
228
|
|