##// 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 def init_ipython(ip):
987 def init_ipython(ip):
988 ip.magics_manager.register(HistoryMagics)
988 ip.register_magics(HistoryMagics)
989 #ip.define_magic('hist', HistoryMagics.history)
990 #ip.define_magic('recall', HistoryMagics.rep)
991
992 # XXX - ipy_completers are in quarantine, need to be updated to new apis
989 # XXX - ipy_completers are in quarantine, need to be updated to new apis
993 #import ipy_completers
990 #import ipy_completers
994 #ipy_completers.quick_completer('%hist' ,'-g -t -r -n')
991 #ipy_completers.quick_completer('%hist' ,'-g -t -r -n')
@@ -1999,7 +1999,11 b' class InteractiveShell(SingletonConfigurable):'
1999 user_magics=mf.UserMagics(self))
1999 user_magics=mf.UserMagics(self))
2000 self.configurables.append(self.magics_manager)
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 mf.ConfigMagics, mf.NamespaceMagics, mf.ExecutionMagics,
2007 mf.ConfigMagics, mf.NamespaceMagics, mf.ExecutionMagics,
2004 mf.AutoMagics, mf.OSMagics, mf.LoggingMagics, mf.ExtensionsMagics,
2008 mf.AutoMagics, mf.OSMagics, mf.LoggingMagics, mf.ExtensionsMagics,
2005 mf.PylabMagics, mf.DeprecatedMagics)
2009 mf.PylabMagics, mf.DeprecatedMagics)
@@ -2053,22 +2057,13 b' class InteractiveShell(SingletonConfigurable):'
2053
2057
2054 def define_magic(self, magic_name, func):
2058 def define_magic(self, magic_name, func):
2055 """Expose own function as magic function for ipython
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
2064 warn('Deprecated API, use get_ipython().new_magic: %s\n' %
2068 im = types.MethodType(func, self._magic)
2065 magic_name)
2069 old = self.find_magic(magic_name)
2066 return self.new_magic(func, magic_name)
2070 setattr(self._magic, 'magic_' + magic_name, im)
2071 return old
2072
2067
2073 def find_line_magic(self, magic_name):
2068 def find_line_magic(self, magic_name):
2074 """Find and return a line magic by name."""
2069 """Find and return a line magic by name."""
@@ -89,6 +89,11 b' def register_magics(cls):'
89 magics['cell'] = {}
89 magics['cell'] = {}
90 return cls
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 def validate_type(magic_type):
98 def validate_type(magic_type):
94 if magic_type not in magic_types:
99 if magic_type not in magic_types:
@@ -185,7 +190,7 b' class MagicsManager(Configurable):'
185 for mtype in magic_types:
190 for mtype in magic_types:
186 self.magics[mtype].update(m.magics[mtype])
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 """Expose own function as magic function for ipython
194 """Expose own function as magic function for ipython
190
195
191 Example::
196 Example::
@@ -198,11 +203,11 b' class MagicsManager(Configurable):'
198
203
199 ip.define_magic('foo', foo_impl)
204 ip.define_magic('foo', foo_impl)
200 """
205 """
206
201 # Create the new method in the user_magics and register it in the
207 # Create the new method in the user_magics and register it in the
202 # global table
208 # global table
203 self.user_magics.new_magic(magic_name, func, magic_type)
209 newm, name = self.user_magics.new_magic(func, magic_type, magic_name)
204 self.magics[magic_type][magic_name] = \
210 _record_magic(self.magics, magic_type, name, newm)
205 self.user_magics.magics[magic_type][magic_name]
206
211
207 # Key base class that provides the central functionality for magics.
212 # Key base class that provides the central functionality for magics.
208
213
@@ -362,10 +367,12 b' class Magics(object):'
362 error("%s is not a magic function" % fn)
367 error("%s is not a magic function" % fn)
363 self.options_table[fn] = optstr
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 """TODO
371 """TODO
367 """
372 """
373 magic_name = func.func_name if magic_name is None else magic_name
368 validate_type(magic_type)
374 validate_type(magic_type)
369 meth = types.MethodType(func, self)
375 meth = types.MethodType(func, self)
370 setattr(self, magic_name, meth)
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