|
|
""" IPython extension management tools.
|
|
|
|
|
|
After installation, you'll have the 'extutil' object in your namespace.
|
|
|
to.
|
|
|
"""
|
|
|
|
|
|
# for the purposes of this module, every module that has the name 'ip' globally
|
|
|
# installed as below is an IPython extension
|
|
|
|
|
|
from IPython.core import ipapi
|
|
|
ip = ipapi.get()
|
|
|
from IPython.core.iplib import InteractiveShell
|
|
|
|
|
|
import sys,textwrap,inspect
|
|
|
|
|
|
def indent(s, ind= ' '):
|
|
|
return '\n'.join([ind +l for l in s.splitlines()])
|
|
|
|
|
|
class ExtUtil:
|
|
|
""" IPython extensios (ipy_* etc.) management utilities """
|
|
|
|
|
|
def describe(self):
|
|
|
for n,mod in self._active():
|
|
|
doc = inspect.getdoc(mod)
|
|
|
if doc:
|
|
|
print '== %s ==' % n
|
|
|
print indent(doc)
|
|
|
|
|
|
|
|
|
def ls(self):
|
|
|
""" Show list of installed extensions. """
|
|
|
for n,m in self._active():
|
|
|
print '%-20s %s' % (n,m.__file__.replace('\\','/'))
|
|
|
def _active(self):
|
|
|
act = []
|
|
|
for mname,m in sys.modules.items():
|
|
|
o = getattr(m, 'ip', None)
|
|
|
if isinstance(o, InteractiveShell):
|
|
|
act.append((mname,m))
|
|
|
act.sort()
|
|
|
return act
|
|
|
|
|
|
extutil = ExtUtil()
|
|
|
ip.push('extutil')
|
|
|
|