ipy_extutil.py
44 lines
| 1.2 KiB
| text/x-python
|
PythonLexer
vivainio
|
r680 | """ 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 | ||||
Brian Granger
|
r2027 | from IPython.core import ipapi | ||
ip = ipapi.get() | ||||
Brian Granger
|
r2205 | from IPython.core.iplib import InteractiveShell | ||
vivainio
|
r680 | |||
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 """ | ||||
Bernardo B. Marques
|
r4872 | |||
vivainio
|
r680 | def describe(self): | ||
for n,mod in self._active(): | ||||
doc = inspect.getdoc(mod) | ||||
if doc: | ||||
print '== %s ==' % n | ||||
print indent(doc) | ||||
Bernardo B. Marques
|
r4872 | |||
vivainio
|
r680 | 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) | ||||
Brian Granger
|
r2205 | if isinstance(o, InteractiveShell): | ||
vivainio
|
r680 | act.append((mname,m)) | ||
Bernardo B. Marques
|
r4872 | act.sort() | ||
vivainio
|
r680 | return act | ||
Bernardo B. Marques
|
r4872 | extutil = ExtUtil() | ||
Brian Granger
|
r2205 | ip.push('extutil') | ||