##// END OF EJS Templates
Clarifying what the sandbox is in reorg.txt.
Brian Granger -
Show More
@@ -1,225 +1,226 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.python`. This sub-package will contain anything that might
58 * :mod:`IPython.python`. 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 functions
61 and classes that serve a single purpose. Similar in purpose to
61 and classes that serve a single purpose. Similar in purpose to
62 :mod:`twisted.python`. Could also call this :mod:`IPython.tools`,
62 :mod:`twisted.python`. Could also call this :mod:`IPython.tools`,
63 :mod:`IPython.utils` or something similar.
63 :mod:`IPython.utils` or something similar.
64
64
65 * :mod:`IPython.sandbox`. This is for code that is untested and/or rotting and
65 * :mod:`IPython.sandbox`. This is for code that is untested and/or rotting and
66 needs to be removed from IPython. Eventually all this code will either i) be
66 needs to be removed from IPython. Eventually all this code will either i) be
67 revived by someone willing to maintain it with tests and docs and
67 revived by someone willing to maintain it with tests and docs and
68 re-included into IPython or 2) be removed from IPython proper, but put into
68 re-included into IPython or 2) be removed from IPython proper, but put into
69 a separate top-level (not IPython) package that we keep around.
69 a separate top-level (not IPython) package that we keep around. No new code
70 will be allowed here, so maybe "sandbox" is not the best name.
70
71
71 Where things will be moved
72 Where things will be moved
72 ==========================
73 ==========================
73
74
74 * :file:`ColorANSI.py`. Move to :file:`IPython/core/coloransi.py`. Maybe move to
75 * :file:`ColorANSI.py`. Move to :file:`IPython/core/coloransi.py`. Maybe move to
75 :mod:`IPython.lib` or :mod:`IPython.python`?
76 :mod:`IPython.lib` or :mod:`IPython.python`?
76
77
77 * :file:`ConfigLoader.py`. Move to :file:`IPython/config/configloader.py`.
78 * :file:`ConfigLoader.py`. Move to :file:`IPython/config/configloader.py`.
78
79
79 * :file:`CrashHandler.py`. Move to :file:`IPython/core/crashhandler`.
80 * :file:`CrashHandler.py`. Move to :file:`IPython/core/crashhandler`.
80
81
81 * :file:`DPyGetOpt.py`. Move to :mod:`IPython.sandbox` and replace with newer options parser.
82 * :file:`DPyGetOpt.py`. Move to :mod:`IPython.sandbox` and replace with newer options parser.
82
83
83 * :file:`Debugger.py`. Move to :file:`IPython/core/debugger.py`.
84 * :file:`Debugger.py`. Move to :file:`IPython/core/debugger.py`.
84
85
85 * :file:`Extensions`. This needs to be gone through separately. Minimally,
86 * :file:`Extensions`. This needs to be gone through separately. Minimally,
86 the package should be renamed to :file:`extensions`.
87 the package should be renamed to :file:`extensions`.
87
88
88 * :file:`FakeModule.py`. Move to :file:`IPython/core/fakemodule.py`.
89 * :file:`FakeModule.py`. Move to :file:`IPython/core/fakemodule.py`.
89
90
90 * :file:`Gnuplot2.py`. Move to :file:`IPython.sandbox`.
91 * :file:`Gnuplot2.py`. Move to :file:`IPython.sandbox`.
91
92
92 * :file:`GnuplotInteractive.py`. Move to :file:`IPython.sandbox`.
93 * :file:`GnuplotInteractive.py`. Move to :file:`IPython.sandbox`.
93
94
94 * :file:`GnuplotRuntime.py`. Move to :file:`IPython.sandbox`.
95 * :file:`GnuplotRuntime.py`. Move to :file:`IPython.sandbox`.
95
96
96 * :file:`Itpl.py`. Remove. Version already in :file:`IPython.external`.
97 * :file:`Itpl.py`. Remove. Version already in :file:`IPython.external`.
97
98
98 * :file:`Logger.py`. Move to :file:`IPython/core/logger.py`.
99 * :file:`Logger.py`. Move to :file:`IPython/core/logger.py`.
99
100
100 * :file:`Magic.py`. Move to :file:`IPython/core/magic.py`.
101 * :file:`Magic.py`. Move to :file:`IPython/core/magic.py`.
101
102
102 * :file:`OInspect.py`. Move to :file:`IPython/core/oinspect.py`.
103 * :file:`OInspect.py`. Move to :file:`IPython/core/oinspect.py`.
103
104
104 * :file:`OutputTrap.py`. Move to :file:`IPython/core/outputtrap.py`.
105 * :file:`OutputTrap.py`. Move to :file:`IPython/core/outputtrap.py`.
105
106
106 * :file:`Prompts.py`. Move to :file:`IPython/core/prompts.py` or
107 * :file:`Prompts.py`. Move to :file:`IPython/core/prompts.py` or
107 :file:`IPython/frontend/prompts.py`.
108 :file:`IPython/frontend/prompts.py`.
108
109
109 * :file:`PyColorize.py`. Replace with pygments? If not, move to
110 * :file:`PyColorize.py`. Replace with pygments? If not, move to
110 :file:`IPython/core/pycolorize.py`. Maybe move to :mod:`IPython.lib` or
111 :file:`IPython/core/pycolorize.py`. Maybe move to :mod:`IPython.lib` or
111 :mod:`IPython.python`?
112 :mod:`IPython.python`?
112
113
113 * :file:`Release.py`. Move to ??? or remove?
114 * :file:`Release.py`. Move to ??? or remove?
114
115
115 * :file:`Shell.py`. Move to :file:`IPython.core.shell.py` or
116 * :file:`Shell.py`. Move to :file:`IPython.core.shell.py` or
116 :file:`IPython/frontend/shell.py`.
117 :file:`IPython/frontend/shell.py`.
117
118
118 * :file:`UserConfig`. Move to a subdirectory of :file:`IPython.config`.
119 * :file:`UserConfig`. Move to a subdirectory of :file:`IPython.config`.
119
120
120 * :file:`background_jobs.py`. Move to :file:`IPython/lib/backgroundjobs.py`.
121 * :file:`background_jobs.py`. Move to :file:`IPython/lib/backgroundjobs.py`.
121
122
122 * :file:`completer.py`. Move to :file:`IPython/core/completer.py`.
123 * :file:`completer.py`. Move to :file:`IPython/core/completer.py`.
123
124
124 * :file:`config`. Good where it is!
125 * :file:`config`. Good where it is!
125
126
126 * :file:`deep_reload.py`. Move to :file:`IPython/lib/deepreload.py`.
127 * :file:`deep_reload.py`. Move to :file:`IPython/lib/deepreload.py`.
127
128
128 * :file:`demo.py`. Move to :file:`IPython/lib/demo.py`.
129 * :file:`demo.py`. Move to :file:`IPython/lib/demo.py`.
129
130
130 * :file:`dtutils.py`. Remove or move to :file:`IPython.testing` or
131 * :file:`dtutils.py`. Remove or move to :file:`IPython.testing` or
131 :file:`IPython.lib`.
132 :file:`IPython.lib`.
132
133
133 * :file:`excolors.py`. Move to :file:`IPython.core` or :file:`IPython.config`.
134 * :file:`excolors.py`. Move to :file:`IPython.core` or :file:`IPython.config`.
134 Maybe move to :mod:`IPython.lib` or :mod:`IPython.python`?
135 Maybe move to :mod:`IPython.lib` or :mod:`IPython.python`?
135
136
136 * :file:`external`. Good where it is!
137 * :file:`external`. Good where it is!
137
138
138 * :file:`frontend`. Good where it is!
139 * :file:`frontend`. Good where it is!
139
140
140 * :file:`generics.py`. Move to :file:`IPython.python`.
141 * :file:`generics.py`. Move to :file:`IPython.python`.
141
142
142 * :file:`genutils.py`. Move to :file:`IPython.python` and break up into different
143 * :file:`genutils.py`. Move to :file:`IPython.python` and break up into different
143 modules.
144 modules.
144
145
145 * :file:`gui`. Eventually this should be moved to a subdir of
146 * :file:`gui`. Eventually this should be moved to a subdir of
146 :file:`IPython.frontend`.
147 :file:`IPython.frontend`.
147
148
148 * :file:`history.py`. Move to :file:`IPython.core`.
149 * :file:`history.py`. Move to :file:`IPython.core`.
149
150
150 * :file:`hooks.py`. Move to :file:`IPython.core`.
151 * :file:`hooks.py`. Move to :file:`IPython.core`.
151
152
152 * :file:`ipapi.py`. Move to :file:`IPython.core`.
153 * :file:`ipapi.py`. Move to :file:`IPython.core`.
153
154
154 * :file:`iplib.py`. Move to :file:`IPython.core`.
155 * :file:`iplib.py`. Move to :file:`IPython.core`.
155
156
156 * :file:`ipmaker.py`: Move to :file:`IPython.core`.
157 * :file:`ipmaker.py`: Move to :file:`IPython.core`.
157
158
158 * :file:`ipstruct.py`. Move to :file:`IPython.python`.
159 * :file:`ipstruct.py`. Move to :file:`IPython.python`.
159
160
160 * :file:`irunner.py`. Move to :file:`IPython.scripts`.
161 * :file:`irunner.py`. Move to :file:`IPython.scripts`.
161
162
162 * :file:`kernel`. Good where it is.
163 * :file:`kernel`. Good where it is.
163
164
164 * :file:`macro.py`. Move to :file:`IPython.core`.
165 * :file:`macro.py`. Move to :file:`IPython.core`.
165
166
166 * :file:`numutils.py`. Move to :file:`IPython.sandbox`.
167 * :file:`numutils.py`. Move to :file:`IPython.sandbox`.
167
168
168 * :file:`platutils.py`. Move to :file:`IPython.python`.
169 * :file:`platutils.py`. Move to :file:`IPython.python`.
169
170
170 * :file:`platutils_dummy.py`. Move to :file:`IPython.python`.
171 * :file:`platutils_dummy.py`. Move to :file:`IPython.python`.
171
172
172 * :file:`platutils_posix.py`. Move to :file:`IPython.python`.
173 * :file:`platutils_posix.py`. Move to :file:`IPython.python`.
173
174
174 * :file:`platutils_win32.py`. Move to :file:`IPython.python`.
175 * :file:`platutils_win32.py`. Move to :file:`IPython.python`.
175
176
176 * :file:`prefilter.py`: Move to :file:`IPython.core`.
177 * :file:`prefilter.py`: Move to :file:`IPython.core`.
177
178
178 * :file:`rlineimpl.py`. Move to :file:`IPython.core`.
179 * :file:`rlineimpl.py`. Move to :file:`IPython.core`.
179
180
180 * :file:`shadowns.py`. Move to :file:`IPython.core`.
181 * :file:`shadowns.py`. Move to :file:`IPython.core`.
181
182
182 * :file:`shellglobals.py`. Move to :file:`IPython.core`.
183 * :file:`shellglobals.py`. Move to :file:`IPython.core`.
183
184
184 * :file:`strdispatch.py`. Move to :file:`IPython.python`.
185 * :file:`strdispatch.py`. Move to :file:`IPython.python`.
185
186
186 * :file:`testing`. Good where it is.
187 * :file:`testing`. Good where it is.
187
188
188 * :file:`tests`. Good where it is.
189 * :file:`tests`. Good where it is.
189
190
190 * :file:`tools`. Things in here need to be looked at and moved elsewhere like
191 * :file:`tools`. Things in here need to be looked at and moved elsewhere like
191 :file:`IPython.python`.
192 :file:`IPython.python`.
192
193
193 * :file:`twshell.py`. Move to :file:`IPython.sandbox`.
194 * :file:`twshell.py`. Move to :file:`IPython.sandbox`.
194
195
195 * :file:`ultraTB.py`. Move to :file:`IPython/core/ultratb.py`.
196 * :file:`ultraTB.py`. Move to :file:`IPython/core/ultratb.py`.
196
197
197 * :file:`upgrade_dir.py`. Move to :file:`IPython/python/upgradedir.py`.
198 * :file:`upgrade_dir.py`. Move to :file:`IPython/python/upgradedir.py`.
198
199
199 * :file:`usage.py`. Move to :file:`IPython.core`.
200 * :file:`usage.py`. Move to :file:`IPython.core`.
200
201
201 * :file:`wildcard.py`. Move to :file:`IPython.python` or :file:`IPython.core`.
202 * :file:`wildcard.py`. Move to :file:`IPython.python` or :file:`IPython.core`.
202
203
203 * :file:`winconsole.py`. Move to :file:`IPython.lib`.
204 * :file:`winconsole.py`. Move to :file:`IPython.lib`.
204
205
205 Other things
206 Other things
206 ============
207 ============
207
208
208 When these files are moved around, a number of other things will happen at the same time:
209 When these files are moved around, a number of other things will happen at the same time:
209
210
210 1. Test files will be created for each module in IPython. Minimally, all
211 1. Test files will be created for each module in IPython. Minimally, all
211 modules will be imported as a part of the test. This will serve as a
212 modules will be imported as a part of the test. This will serve as a
212 test of the module reorganization. These tests will be put into new
213 test of the module reorganization. These tests will be put into new
213 :file:`tests` subdirectories that each package will have.
214 :file:`tests` subdirectories that each package will have.
214
215
215 2. PyFlakes and other code checkers will be run to look for problems.
216 2. PyFlakes and other code checkers will be run to look for problems.
216
217
217 3. Modules will be renamed to comply with PEP 8 naming conventions: all
218 3. Modules will be renamed to comply with PEP 8 naming conventions: all
218 lowercase and no special characters like ``-`` or ``_``.
219 lowercase and no special characters like ``-`` or ``_``.
219
220
220 4. Existing tests will be moved to the appropriate :file:`tests`
221 4. Existing tests will be moved to the appropriate :file:`tests`
221 subdirectories.
222 subdirectories.
222
223
223
224
224
225
225
226
General Comments 0
You need to be logged in to leave comments. Login now