extension.py
76 lines
| 2.7 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r6967 | """Implementation of magic functions for the extension machinery. | ||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (c) 2012 The IPython Development Team. | ||||
# | ||||
# Distributed under the terms of the Modified BSD License. | ||||
# | ||||
# The full license is in the file COPYING.txt, distributed with this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
# Stdlib | ||||
import os | ||||
# Our own packages | ||||
Bradley M. Froehle
|
r8278 | from IPython.core.error import UsageError | ||
Fernando Perez
|
r6973 | from IPython.core.magic import Magics, magics_class, line_magic | ||
Fernando Perez
|
r6967 | |||
#----------------------------------------------------------------------------- | ||||
# Magic implementation classes | ||||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r6973 | @magics_class | ||
Fernando Perez
|
r6967 | class ExtensionMagics(Magics): | ||
"""Magics to manage the IPython extensions system.""" | ||||
@line_magic | ||||
def install_ext(self, parameter_s=''): | ||||
"""Download and install an extension from a URL, e.g.:: | ||||
%install_ext https://bitbucket.org/birkenfeld/ipython-physics/raw/d1310a2ab15d/physics.py | ||||
The URL should point to an importable Python module - either a .py file | ||||
or a .zip file. | ||||
Parameters: | ||||
-n filename : Specify a name for the file, rather than taking it from | ||||
the URL. | ||||
""" | ||||
opts, args = self.parse_options(parameter_s, 'n:') | ||||
try: | ||||
filename = self.shell.extension_manager.install_extension(args, | ||||
opts.get('n')) | ||||
except ValueError as e: | ||||
print e | ||||
return | ||||
filename = os.path.basename(filename) | ||||
print "Installed %s. To use it, type:" % filename | ||||
print " %%load_ext %s" % os.path.splitext(filename)[0] | ||||
@line_magic | ||||
def load_ext(self, module_str): | ||||
"""Load an IPython extension by its module name.""" | ||||
Bradley M. Froehle
|
r8278 | if not module_str: | ||
raise UsageError('Missing module name.') | ||||
Fernando Perez
|
r6967 | return self.shell.extension_manager.load_extension(module_str) | ||
@line_magic | ||||
def unload_ext(self, module_str): | ||||
"""Unload an IPython extension by its module name.""" | ||||
Bradley M. Froehle
|
r8278 | if not module_str: | ||
raise UsageError('Missing module name.') | ||||
Fernando Perez
|
r6967 | self.shell.extension_manager.unload_extension(module_str) | ||
@line_magic | ||||
def reload_ext(self, module_str): | ||||
"""Reload an IPython extension by its module name.""" | ||||
Bradley M. Froehle
|
r8278 | if not module_str: | ||
raise UsageError('Missing module name.') | ||||
Fernando Perez
|
r6967 | self.shell.extension_manager.reload_extension(module_str) | ||