reorg.txt
94 lines
| 3.1 KiB
| text/plain
|
TextLexer
Brian Granger
|
r1798 | ============================= | ||
IPython module reorganization | ||||
Brian Granger
|
r2061 | =============================' | ||
Brian Granger
|
r1798 | |||
Brian Granger
|
r2061 | Currently, IPython has many top-level modules that serve many different | ||
purposes. The lack of organization make it very difficult for developers to | ||||
work on IPython and understand its design. This document contains notes about | ||||
how we will reorganize the modules into sub-packages. | ||||
Brian Granger
|
r1798 | |||
.. warning:: | ||||
This effort will possibly break third party packages that use IPython as | ||||
a library or hack on the IPython internals. | ||||
.. warning:: | ||||
This effort will result in the removal from IPython of certain modules | ||||
that are not used anymore, don't currently work, are unmaintained, etc. | ||||
Brian Granger
|
r1907 | |||
Brian Granger
|
r1798 | Current subpackges | ||
================== | ||||
IPython currently has the following sub-packages: | ||||
* :mod:`IPython.config` | ||||
Brian Granger
|
r2065 | * :mod:`IPython.Extensions` | ||
Brian Granger
|
r1798 | |||
* :mod:`IPython.external` | ||||
* :mod:`IPython.frontend` | ||||
* :mod:`IPython.gui` | ||||
* :mod:`IPython.kernel` | ||||
* :mod:`IPython.testing` | ||||
* :mod:`IPython.tests` | ||||
* :mod:`IPython.tools` | ||||
* :mod:`IPython.UserConfig` | ||||
New Subpackages to be created | ||||
============================= | ||||
We propose to create the following new sub-packages: | ||||
* :mod:`IPython.core`. This sub-package will contain the core of the IPython | ||||
interpreter, but none of its extended capabilities. | ||||
* :mod:`IPython.lib`. IPython has many extended capabilities that are not part | ||||
Brian Granger
|
r2065 | of the IPython core. These things will go here. | ||
Brian Granger
|
r1798 | |||
Brian Granger
|
r2008 | * :mod:`IPython.utils`. This sub-package will contain anything that might | ||
Brian Granger
|
r1907 | eventually be found in the Python standard library, like things in | ||
Brian Granger
|
r2009 | :mod:`genutils`. Each sub-module in this sub-package should contain | ||
functions and classes that serve a single purpose. | ||||
Brian Granger
|
r1798 | |||
Brian Granger
|
r2008 | * :mod:`IPython.deathrow`. This is for code that is untested and/or rotting | ||
and needs to be removed from IPython. Eventually all this code will either | ||||
i) be revived by someone willing to maintain it with tests and docs and | ||||
Brian Granger
|
r2006 | re-included into IPython or 2) be removed from IPython proper, but put into | ||
Brian Granger
|
r2008 | a separate top-level (not IPython) package that we keep around. No new code | ||
will be allowed here. | ||||
* :mod:`IPython.quarantine`. This is for code that doesn't meet IPython's | ||||
standards, but that we plan on keeping. To be moved out of this sub-package | ||||
a module needs to have a maintainer, tests and documentation. | ||||
Brian Granger
|
r1798 | |||
Brian Granger
|
r2065 | Procedure | ||
Brian Granger
|
r2010 | ========= | ||
1. Move the file to its new location with its new name. | ||||
2. Rename all import statements to reflect the change. | ||||
3. Run PyFlakes on each changes module. | ||||
3. Add tests/test_imports.py to test it. | ||||
Brian Granger
|
r2061 | Status | ||
====== | ||||
The new subpackages have been created and the top-level modules have been | ||||
moved and renamed. Import tests have been created for all of the moved and | ||||
renamed modules. The build infrastructure (setup.py and friends) have been | ||||
updated and tested on Mac and Windows. Finally, a compatibility layer has been | ||||
added for iplib, ipapi and Shell. The follow things still need to be done:: | ||||
* I need to modify iptests to properly skip modules that are no longer top | ||||
level modules. | ||||
Brian Granger
|
r2010 | |||
Brian Granger
|
r2061 | * When running python setup.py sdist, the Sphinx API docs fail to build | ||
because of something going on with IPython.core.fakemodule | ||||