diff options
| author | Jason R. Coombs <jaraco@jaraco.com> | 2017-10-12 09:35:41 +0200 |
|---|---|---|
| committer | Jason R. Coombs <jaraco@jaraco.com> | 2017-10-12 09:35:41 +0200 |
| commit | 4e5c1640ac88e227aa967b8bfe04ce26325f284f (patch) | |
| tree | b426e5520269586c04a96248b670b68d22d4fc4f | |
| parent | 84a97be0633f526de2f24b096d5fd1bf1cd75ac6 (diff) | |
| download | external_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.py | 10 | ||||
| -rw-r--r-- | setuptools/pep517.py | 36 |
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 |
