|
|
"""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
|
|
|
from IPython.core.error import UsageError
|
|
|
from IPython.core.magic import Magics, magics_class, line_magic
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Magic implementation classes
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
@magics_class
|
|
|
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."""
|
|
|
if not module_str:
|
|
|
raise UsageError('Missing module name.')
|
|
|
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."""
|
|
|
if not module_str:
|
|
|
raise UsageError('Missing module name.')
|
|
|
self.shell.extension_manager.unload_extension(module_str)
|
|
|
|
|
|
@line_magic
|
|
|
def reload_ext(self, module_str):
|
|
|
"""Reload an IPython extension by its module name."""
|
|
|
if not module_str:
|
|
|
raise UsageError('Missing module name.')
|
|
|
self.shell.extension_manager.reload_extension(module_str)
|
|
|
|