diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index 61061a9af..863e731ff 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -16,7 +16,7 @@ import sys inspect = __import__('inspect') from sphinx.util import force_decode -from sphinx.util.pycompat import bytes +from sphinx.util.pycompat import bytes, builtins if sys.version_info >= (3, 0): @@ -151,6 +151,6 @@ def is_builtin_class_method(obj, attr_name): classes = [c for c in inspect.getmro(obj) if attr_name in c.__dict__] cls = classes[0] if classes else object - if not hasattr(__builtins__, cls.__name__): + if not hasattr(builtins, safe_getattr(cls, '__name__', '')): return False - return getattr(__builtins__, cls.__name__) is cls + return getattr(builtins, safe_getattr(cls, '__name__', '')) is cls diff --git a/sphinx/util/pycompat.py b/sphinx/util/pycompat.py index 1e5ea3145..5f6e59eeb 100644 --- a/sphinx/util/pycompat.py +++ b/sphinx/util/pycompat.py @@ -48,6 +48,8 @@ if sys.version_info >= (3, 0): # try to match ParseError details with SyntaxError details raise SyntaxError(err.msg, (filepath, lineno, offset, err.value)) return unicode(tree) + from itertools import zip_longest # Python 3 name + import builtins else: # Python 2 @@ -69,6 +71,9 @@ else: # error handler import locale sys_encoding = locale.getpreferredencoding() + # use Python 3 name + from itertools import izip_longest as zip_longest + import __builtin__ as builtins def execfile_(filepath, _globals):