aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2017-10-12 09:35:41 +0200
committerJason R. Coombs <jaraco@jaraco.com>2017-10-12 09:35:41 +0200
commit4e5c1640ac88e227aa967b8bfe04ce26325f284f (patch)
treeb426e5520269586c04a96248b670b68d22d4fc4f
parent84a97be0633f526de2f24b096d5fd1bf1cd75ac6 (diff)
downloadexternal_python_setuptools-4e5c1640ac88e227aa967b8bfe04ce26325f284f.tar.gz
external_python_setuptools-4e5c1640ac88e227aa967b8bfe04ce26325f284f.tar.bz2
external_python_setuptools-4e5c1640ac88e227aa967b8bfe04ce26325f284f.zip
Move customized behavior for fetch_build_eggs into a specialized subclass of Distribution.
-rw-r--r--setuptools/dist.py10
-rw-r--r--setuptools/pep517.py36
2 files changed, 30 insertions, 16 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 1641469e..a2ca8795 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -30,14 +30,6 @@ __import__('pkg_resources.extern.packaging.specifiers')
__import__('pkg_resources.extern.packaging.version')
-_skip_install_eggs = False
-
-
-class SetupRequirementsError(BaseException):
- def __init__(self, specifiers):
- self.specifiers = specifiers
-
-
def _get_unpatched(cls):
warnings.warn("Do not call this function", DeprecationWarning)
return get_unpatched(cls)
@@ -340,8 +332,6 @@ class Distribution(Distribution_parse_config_files, _Distribution):
self.dependency_links = attrs.pop('dependency_links', [])
assert_string_list(self, 'dependency_links', self.dependency_links)
if attrs and 'setup_requires' in attrs:
- if _skip_install_eggs:
- raise SetupRequirementsError(attrs['setup_requires'])
self.fetch_build_eggs(attrs['setup_requires'])
for ep in pkg_resources.iter_entry_points('distutils.setup_keywords'):
vars(self).setdefault(ep.name, None)
diff --git a/setuptools/pep517.py b/setuptools/pep517.py
index b3e9ea86..54f2987b 100644
--- a/setuptools/pep517.py
+++ b/setuptools/pep517.py
@@ -30,9 +30,35 @@ import os
import sys
import tokenize
import shutil
+import contextlib
-from setuptools import dist
-from setuptools.dist import SetupRequirementsError
+import setuptools
+import distutils
+
+
+class SetupRequirementsError(BaseException):
+ def __init__(self, specifiers):
+ self.specifiers = specifiers
+
+
+class Distribution(setuptools.dist.Distribution):
+ def fetch_build_eggs(self, specifiers):
+ raise SetupRequirementsError(specifiers)
+
+ @classmethod
+ @contextlib.contextmanager
+ def patch(cls):
+ """
+ Replace
+ distutils.dist.Distribution with this class
+ for the duration of this context.
+ """
+ orig = distutils.core.Distribution
+ distutils.core.Distribution = cls
+ try:
+ yield
+ finally:
+ distutils.core.Distribution = orig
def _run_setup(setup_script='setup.py'):
@@ -54,17 +80,15 @@ def _fix_config(config_settings):
def _get_build_requires(config_settings):
config_settings = _fix_config(config_settings)
requirements = ['setuptools', 'wheel']
- dist._skip_install_eggs = True
sys.argv = sys.argv[:1] + ['egg_info'] + \
config_settings["--global-option"]
try:
- _run_setup()
+ with Distribution.patch():
+ _run_setup()
except SetupRequirementsError as e:
requirements += e.specifiers
- dist._skip_install_eggs = False
-
return requirements