##// END OF EJS Templates
Settle on cleaner API for magic registration....
Fernando Perez -
Show More
@@ -1999,9 +1999,10 b' class InteractiveShell(SingletonConfigurable):'
1999 1999 user_magics=mf.UserMagics(self))
2000 2000 self.configurables.append(self.magics_manager)
2001 2001
2002 # Expose as public API new_magic and registere_magics
2003 self.new_magic = self.magics_manager.new_magic
2002 # Expose as public API from the magics manager
2004 2003 self.register_magics = self.magics_manager.register
2004 self.function_as_magic = self.magics_manager.function_as_magic
2005 self.define_magic = self.magics_manager._define_magic
2005 2006
2006 2007 self.register_magics(mf.BasicMagics, mf.CodeMagics,
2007 2008 mf.ConfigMagics, mf.NamespaceMagics, mf.ExecutionMagics,
@@ -2055,16 +2056,6 b' class InteractiveShell(SingletonConfigurable):'
2055 2056 result = fn(*args)
2056 2057 return result
2057 2058
2058 def define_magic(self, magic_name, func):
2059 """Expose own function as magic function for ipython
2060
2061 Note: this API is now deprecated. Instead, you should use
2062 `get_ipython().new_magic`.
2063 """
2064 warn('Deprecated API, use get_ipython().new_magic: %s\n' %
2065 magic_name)
2066 return self.new_magic(func, magic_name)
2067
2068 2059 def find_line_magic(self, magic_name):
2069 2060 """Find and return a line magic by name."""
2070 2061 return self.magics_manager.magics['line'].get(magic_name)
@@ -30,7 +30,7 b' from IPython.external.decorator import decorator'
30 30 from IPython.utils.ipstruct import Struct
31 31 from IPython.utils.process import arg_split
32 32 from IPython.utils.traitlets import Bool, Dict, Instance
33 from IPython.utils.warn import error
33 from IPython.utils.warn import error, warn
34 34
35 35 #-----------------------------------------------------------------------------
36 36 # Globals
@@ -190,16 +190,31 b' class MagicsManager(Configurable):'
190 190 for mtype in magic_types:
191 191 self.magics[mtype].update(m.magics[mtype])
192 192
193 def new_magic(self, func, magic_name=None, magic_type='line'):
193 def function_as_magic(self, func, magic_type='line', magic_name=None):
194 194 """Expose a standalone function as magic function for ipython.
195
196 195 """
197 196
198 197 # Create the new method in the user_magics and register it in the
199 198 # global table
199 validate_type(magic_type)
200 magic_name = func.func_name if magic_name is None else magic_name
201 setattr(self.user_magics, magic_name, func)
200 202 newm, name = self.user_magics.new_magic(func, magic_type, magic_name)
201 203 _record_magic(self.magics, magic_type, name, newm)
202 204
205
206 def _define_magic(self, name, func):
207 """Support for deprecated API.
208
209 This method exists only to support the old-style definition of magics.
210 It will eventually be removed. Deliberately not documented further.
211 """
212 warn('Deprecated API, use function_as_magic or register_magics: %s\n' %
213 name)
214 meth = types.MethodType(func, self.user_magics)
215 setattr(self.user_magics, name, meth)
216 _record_magic(self.magics, 'line', name, meth)
217
203 218 # Key base class that provides the central functionality for magics.
204 219
205 220 class Magics(object):
@@ -357,13 +372,3 b' class Magics(object):'
357 372 if fn not in self.lsmagic():
358 373 error("%s is not a magic function" % fn)
359 374 self.options_table[fn] = optstr
360
361 def new_magic(self, func, magic_type='line', magic_name=None):
362 """TODO
363 """
364 magic_name = func.func_name if magic_name is None else magic_name
365 validate_type(magic_type)
366 meth = types.MethodType(func, self)
367 setattr(self, magic_name, meth)
368 _record_magic(self.magics, magic_type, magic_name, meth)
369 return meth, magic_name
General Comments 0
You need to be logged in to leave comments. Login now