aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/monkey.py
diff options
context:
space:
mode:
authorNick Douma <n.douma@nekoconeko.nl>2017-04-27 11:44:56 +0200
committerNick Douma <n.douma@nekoconeko.nl>2017-04-27 13:03:31 +0200
commitb1cb67c743de2581f9393315b23777011c22ecf7 (patch)
treebf5606e56a5247fd2596a39d5dec85671bc24c14 /setuptools/monkey.py
parentd8e1ed570126dfc99ed7f9126df3bfc890e7005d (diff)
downloadexternal_python_setuptools-b1cb67c743de2581f9393315b23777011c22ecf7.tar.gz
external_python_setuptools-b1cb67c743de2581f9393315b23777011c22ecf7.tar.bz2
external_python_setuptools-b1cb67c743de2581f9393315b23777011c22ecf7.zip
Use a different method to lookup base classes on Jython
Jython seems to implement inspect.getmro differently, which causes any classes with the same name as a class lower in the MRO not to be returned. This patch offloads the MRO lookup to a separate function, which implements different logic for Jython only. Ref #1024
Diffstat (limited to 'setuptools/monkey.py')
-rw-r--r--setuptools/monkey.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/setuptools/monkey.py b/setuptools/monkey.py
index 68fad9dd..97ba159d 100644
--- a/setuptools/monkey.py
+++ b/setuptools/monkey.py
@@ -21,6 +21,19 @@ if you think you need this functionality.
"""
+def get_mro(cls):
+ """Returns the bases classes for cls sorted by the MRO.
+
+ Works around an issue on Jython where inspect.getmro will not return all
+ base classes if multiple classes share the same name. Instead, this
+ function will return a tuple containing the class itself, and the contents
+ of cls.__bases__ .
+ """
+ if platform.python_implementation() != "Jython":
+ return inspect.getmro(cls)
+ return (cls,) + cls.__bases__
+
+
def get_unpatched(item):
lookup = (
get_unpatched_class if isinstance(item, six.class_types) else
@@ -38,7 +51,7 @@ def get_unpatched_class(cls):
"""
external_bases = (
cls
- for cls in inspect.getmro(cls)
+ for cls in get_mro(cls)
if not cls.__module__.startswith('setuptools')
)
base = next(external_bases)