diff --git a/IPython/core/magic.py b/IPython/core/magic.py index 3ddc048..a66daf5 100644 --- a/IPython/core/magic.py +++ b/IPython/core/magic.py @@ -195,14 +195,14 @@ def _method_magic_marker(magic_kind): if callable(arg): # "Naked" decorator call (just @foo, no args) func = arg - name = func.func_name + name = func.__name__ retval = decorator(call, func) record_magic(magics, magic_kind, name, name) elif isinstance(arg, string_types): # Decorator called with arguments (@foo('bar')) name = arg def mark(func, *a, **kw): - record_magic(magics, magic_kind, name, func.func_name) + record_magic(magics, magic_kind, name, func.__name__) return decorator(call, func) retval = mark else: @@ -240,7 +240,7 @@ def _function_magic_marker(magic_kind): if callable(arg): # "Naked" decorator call (just @foo, no args) func = arg - name = func.func_name + name = func.__name__ ip.register_magic_function(func, magic_kind, name) retval = decorator(call, func) elif isinstance(arg, string_types): @@ -426,7 +426,7 @@ class MagicsManager(Configurable): # Create the new method in the user_magics and register it in the # global table validate_type(magic_kind) - magic_name = func.func_name if magic_name is None else magic_name + magic_name = func.__name__ if magic_name is None else magic_name setattr(self.user_magics, magic_name, func) record_magic(self.magics, magic_kind, magic_name, func) diff --git a/IPython/core/oinspect.py b/IPython/core/oinspect.py index 496cab5..0802bdc 100644 --- a/IPython/core/oinspect.py +++ b/IPython/core/oinspect.py @@ -193,8 +193,8 @@ def getargspec(obj): func_obj = obj.__call__ else: raise TypeError('arg is not a Python function') - args, varargs, varkw = inspect.getargs(func_obj.func_code) - return args, varargs, varkw, func_obj.func_defaults + args, varargs, varkw = inspect.getargs(func_obj.__code__) + return args, varargs, varkw, func_obj.__defaults__ def format_argspec(argspec): diff --git a/IPython/core/ultratb.py b/IPython/core/ultratb.py index 980c88e..0fcb028 100644 --- a/IPython/core/ultratb.py +++ b/IPython/core/ultratb.py @@ -198,7 +198,7 @@ def findsource(object): if ismethod(object): object = object.im_func if isfunction(object): - object = object.func_code + object = object.__code__ if istraceback(object): object = object.tb_frame if isframe(object): diff --git a/IPython/external/decorator/_decorator.py b/IPython/external/decorator/_decorator.py index b1f0233..ed37b96 100644 --- a/IPython/external/decorator/_decorator.py +++ b/IPython/external/decorator/_decorator.py @@ -136,7 +136,7 @@ class FunctionMaker(object): func.__name__ = self.name func.__doc__ = getattr(self, 'doc', None) func.__dict__ = getattr(self, 'dict', {}) - func.func_defaults = getattr(self, 'defaults', ()) + func.__defaults__ = getattr(self, 'defaults', ()) func.__kwdefaults__ = getattr(self, 'kwonlydefaults', None) func.__annotations__ = getattr(self, 'annotations', None) callermodule = sys._getframe(3).f_globals.get('__name__', '?') @@ -200,7 +200,7 @@ def decorator(caller, func=None): decorator(caller, func) decorates a function using a caller. """ if func is not None: # returns a decorated function - evaldict = func.func_globals.copy() + evaldict = func.__globals__.copy() evaldict['_call_'] = caller evaldict['_func_'] = func return FunctionMaker.create( @@ -211,7 +211,7 @@ def decorator(caller, func=None): return partial(decorator, caller) # otherwise assume caller is a function first = inspect.getargspec(caller)[0][0] # first arg - evaldict = caller.func_globals.copy() + evaldict = caller.__globals__.copy() evaldict['_call_'] = caller evaldict['decorator'] = decorator return FunctionMaker.create( diff --git a/IPython/parallel/controller/dependency.py b/IPython/parallel/controller/dependency.py index dfc08df..72d1660 100644 --- a/IPython/parallel/controller/dependency.py +++ b/IPython/parallel/controller/dependency.py @@ -56,7 +56,7 @@ class dependent(object): def __init__(self, f, df, *dargs, **dkwargs): self.f = f - self.func_name = getattr(f, '__name__', 'f') + self.__name__ = getattr(f, '__name__', 'f') self.df = df self.dargs = dargs self.dkwargs = dkwargs @@ -71,7 +71,7 @@ class dependent(object): if not py3compat.PY3: @property def __name__(self): - return self.func_name + return self.__name__ @interactive def _require(*modules, **mapping): diff --git a/IPython/parallel/controller/scheduler.py b/IPython/parallel/controller/scheduler.py index 68ee8db..1f528aa 100644 --- a/IPython/parallel/controller/scheduler.py +++ b/IPython/parallel/controller/scheduler.py @@ -52,7 +52,7 @@ from .dependency import Dependency @decorator def logged(f,self,*args,**kwargs): # print ("#--------------------") - self.log.debug("scheduler::%s(*%s,**%s)", f.func_name, args, kwargs) + self.log.debug("scheduler::%s(*%s,**%s)", f.__name__, args, kwargs) # print ("#--") return f(self,*args, **kwargs) diff --git a/IPython/testing/plugin/ipdoctest.py b/IPython/testing/plugin/ipdoctest.py index 8bcba9b..ffff4d1 100644 --- a/IPython/testing/plugin/ipdoctest.py +++ b/IPython/testing/plugin/ipdoctest.py @@ -95,7 +95,7 @@ class DocTestFinder(doctest.DocTestFinder): if module is None: return True elif inspect.isfunction(object): - return module.__dict__ is object.func_globals + return module.__dict__ is object.__globals__ elif inspect.isbuiltin(object): return module.__name__ == object.__module__ elif inspect.isclass(object): diff --git a/IPython/testing/tests/test_decorators.py b/IPython/testing/tests/test_decorators.py index 77d7203..295bd5e 100644 --- a/IPython/testing/tests/test_decorators.py +++ b/IPython/testing/tests/test_decorators.py @@ -36,8 +36,8 @@ def getargspec(obj): func_obj = obj.im_func else: raise TypeError('arg is not a Python function') - args, varargs, varkw = inspect.getargs(func_obj.func_code) - return args, varargs, varkw, func_obj.func_defaults + args, varargs, varkw = inspect.getargs(func_obj.__code__) + return args, varargs, varkw, func_obj.__defaults__ #----------------------------------------------------------------------------- # Testing functions diff --git a/IPython/utils/pickleutil.py b/IPython/utils/pickleutil.py index b57b4c4..35e0c82 100644 --- a/IPython/utils/pickleutil.py +++ b/IPython/utils/pickleutil.py @@ -105,9 +105,9 @@ class CannedFunction(CannedObject): def __init__(self, f): self._check_type(f) - self.code = f.func_code - if f.func_defaults: - self.defaults = [ can(fd) for fd in f.func_defaults ] + self.code = f.__code__ + if f.__defaults__: + self.defaults = [ can(fd) for fd in f.__defaults__ ] else: self.defaults = None self.module = f.__module__ or '__main__'