##// END OF EJS Templates
Clean up magic registration api and make it public.
Fernando Perez -
Show More
@@ -985,10 +985,7 b' class HistoryMagics(Magics):'
985 985
986 986
987 987 def init_ipython(ip):
988 ip.magics_manager.register(HistoryMagics)
989 #ip.define_magic('hist', HistoryMagics.history)
990 #ip.define_magic('recall', HistoryMagics.rep)
991
988 ip.register_magics(HistoryMagics)
992 989 # XXX - ipy_completers are in quarantine, need to be updated to new apis
993 990 #import ipy_completers
994 991 #ipy_completers.quick_completer('%hist' ,'-g -t -r -n')
@@ -1999,7 +1999,11 b' class InteractiveShell(SingletonConfigurable):'
1999 1999 user_magics=mf.UserMagics(self))
2000 2000 self.configurables.append(self.magics_manager)
2001 2001
2002 self.magics_manager.register(mf.BasicMagics, mf.CodeMagics,
2002 # Expose as public API new_magic and registere_magics
2003 self.new_magic = self.magics_manager.new_magic
2004 self.register_magics = self.magics_manager.register
2005
2006 self.register_magics(mf.BasicMagics, mf.CodeMagics,
2003 2007 mf.ConfigMagics, mf.NamespaceMagics, mf.ExecutionMagics,
2004 2008 mf.AutoMagics, mf.OSMagics, mf.LoggingMagics, mf.ExtensionsMagics,
2005 2009 mf.PylabMagics, mf.DeprecatedMagics)
@@ -2053,22 +2057,13 b' class InteractiveShell(SingletonConfigurable):'
2053 2057
2054 2058 def define_magic(self, magic_name, func):
2055 2059 """Expose own function as magic function for ipython
2056
2057 Example::
2058
2059 def foo_impl(self, parameter_s=''):
2060 'My very own magic!. (Use docstrings, IPython reads them).'
2061 print 'Magic function. Passed parameter is between < >:'
2062 print '<%s>' % parameter_s
2063 print 'The self object is:', self
2064 2060
2065 ip.define_magic('foo', foo_impl)
2061 Note: this API is now deprecated. Instead, you should use
2062 `get_ipython().new_magic`.
2066 2063 """
2067 return self.magics_manager
2068 im = types.MethodType(func, self._magic)
2069 old = self.find_magic(magic_name)
2070 setattr(self._magic, 'magic_' + magic_name, im)
2071 return old
2064 warn('Deprecated API, use get_ipython().new_magic: %s\n' %
2065 magic_name)
2066 return self.new_magic(func, magic_name)
2072 2067
2073 2068 def find_line_magic(self, magic_name):
2074 2069 """Find and return a line magic by name."""
@@ -89,6 +89,11 b' def register_magics(cls):'
89 89 magics['cell'] = {}
90 90 return cls
91 91
92 def _record_magic(dct, mtype, mname, func):
93 if mtype == 'line_cell':
94 dct['line'][mname] = dct['cell'][mname] = func
95 else:
96 dct[mtype][mname] = func
92 97
93 98 def validate_type(magic_type):
94 99 if magic_type not in magic_types:
@@ -185,7 +190,7 b' class MagicsManager(Configurable):'
185 190 for mtype in magic_types:
186 191 self.magics[mtype].update(m.magics[mtype])
187 192
188 def define_magic(self, magic_name, func, magic_type='line'):
193 def new_magic(self, func, magic_name=None, magic_type='line'):
189 194 """Expose own function as magic function for ipython
190 195
191 196 Example::
@@ -198,11 +203,11 b' class MagicsManager(Configurable):'
198 203
199 204 ip.define_magic('foo', foo_impl)
200 205 """
206
201 207 # Create the new method in the user_magics and register it in the
202 208 # global table
203 self.user_magics.new_magic(magic_name, func, magic_type)
204 self.magics[magic_type][magic_name] = \
205 self.user_magics.magics[magic_type][magic_name]
209 newm, name = self.user_magics.new_magic(func, magic_type, magic_name)
210 _record_magic(self.magics, magic_type, name, newm)
206 211
207 212 # Key base class that provides the central functionality for magics.
208 213
@@ -362,10 +367,12 b' class Magics(object):'
362 367 error("%s is not a magic function" % fn)
363 368 self.options_table[fn] = optstr
364 369
365 def new_magic(self, magic_name, func, magic_type='line'):
370 def new_magic(self, func, magic_type='line', magic_name=None):
366 371 """TODO
367 372 """
373 magic_name = func.func_name if magic_name is None else magic_name
368 374 validate_type(magic_type)
369 375 meth = types.MethodType(func, self)
370 376 setattr(self, magic_name, meth)
371 self.magics[magic_type][magic_name] = meth
377 _record_magic(self.magics, magic_type, magic_name, meth)
378 return meth, magic_name
General Comments 0
You need to be logged in to leave comments. Login now