summaryrefslogtreecommitdiff
path: root/setuptools/build_meta.py
diff options
context:
space:
mode:
authorxoviat <xoviat@users.noreply.github.com>2017-10-19 14:35:48 -0500
committerGitHub <noreply@github.com>2017-10-19 14:35:48 -0500
commitca5a81864d5fc3b6bcb1e9186a38e3fbc0d0beff (patch)
tree0e7a8fae2c656ac10451c1f40beaedf375c5ba7a /setuptools/build_meta.py
parent1cceb2cb31e10826bd6bfb1cfacfe4996a99ae63 (diff)
downloadpython-setuptools-git-ca5a81864d5fc3b6bcb1e9186a38e3fbc0d0beff.tar.gz
BUG: look for dist-infos in subdirectories
This code is a bit ugly, but it's also been tested with the pip test suite It's not the best solution long term (the best solution is to get the egg_info directory directly from egg_info), but it works for now and avoids technical risk.
Diffstat (limited to 'setuptools/build_meta.py')
-rw-r--r--setuptools/build_meta.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py
index f89f82d6..609ea1e5 100644
--- a/setuptools/build_meta.py
+++ b/setuptools/build_meta.py
@@ -93,6 +93,11 @@ def _get_build_requires(config_settings):
return requirements
+def _get_immediate_subdirectories(a_dir):
+ return [name for name in os.listdir(a_dir)
+ if os.path.isdir(os.path.join(a_dir, name))]
+
+
def get_requires_for_build_wheel(config_settings=None):
config_settings = _fix_config(config_settings)
return _get_build_requires(config_settings)
@@ -106,11 +111,29 @@ def get_requires_for_build_sdist(config_settings=None):
def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', metadata_directory]
_run_setup()
+
+ dist_info_directory = metadata_directory
+ while True:
+ dist_infos = [f for f in os.listdir(dist_info_directory)
+ if f.endswith('.dist-info')]
+
+ if len(dist_infos) == 0 and \
+ len(_get_immediate_subdirectories(dist_info_directory)) == 1:
+ dist_info_directory = os.path.join(
+ dist_info_directory, os.listdir(dist_info_directory)[0])
+ continue
+
+ assert len(dist_infos) == 1
+ break
+
+ # PEP 517 requires that the .dist-info directory be placed in the
+ # metadata_directory. To comply, we MUST copy the directory to the root
+ if dist_info_directory != metadata_directory:
+ shutil.move(
+ os.path.join(dist_info_directory, dist_infos[0]),
+ metadata_directory)
+ shutil.rmtree(dist_info_directory, ignore_errors=True)
- dist_infos = [f for f in os.listdir(metadata_directory)
- if f.endswith('.dist-info')]
-
- assert len(dist_infos) == 1
return dist_infos[0]