|
|
"""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
|
|
|
from warnings import warn
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Magic implementation classes
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
@magics_class
|
|
|
class ExtensionMagics(Magics):
|
|
|
"""Magics to manage the IPython extensions system."""
|
|
|
|
|
|
@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.')
|
|
|
res = self.shell.extension_manager.load_extension(module_str)
|
|
|
|
|
|
if res == 'already loaded':
|
|
|
print("The %s extension is already loaded. To reload it, use:" % module_str)
|
|
|
print(" %reload_ext", module_str)
|
|
|
elif res == 'no load function':
|
|
|
print("The %s module is not an IPython extension." % module_str)
|
|
|
|
|
|
@line_magic
|
|
|
def unload_ext(self, module_str):
|
|
|
"""Unload an IPython extension by its module name.
|
|
|
|
|
|
Not all extensions can be unloaded, only those which define an
|
|
|
``unload_ipython_extension`` function.
|
|
|
"""
|
|
|
if not module_str:
|
|
|
raise UsageError('Missing module name.')
|
|
|
|
|
|
res = self.shell.extension_manager.unload_extension(module_str)
|
|
|
|
|
|
if res == 'no unload function':
|
|
|
print("The %s extension doesn't define how to unload it." % module_str)
|
|
|
elif res == "not loaded":
|
|
|
print("The %s extension is not loaded." % 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)
|
|
|
|