diff options
| author | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2022-08-15 19:35:10 +0100 |
|---|---|---|
| committer | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2022-08-15 19:35:10 +0100 |
| commit | 39b7f64c91a28587959bfddb5a53298799e00d39 (patch) | |
| tree | 90b9d2a9735b0323f9685762d6d539f77aad2082 /setuptools | |
| parent | 40fb3369d90b3ebad620e6f23cc682272783f908 (diff) | |
| download | python-setuptools-git-39b7f64c91a28587959bfddb5a53298799e00d39.tar.gz | |
Refactor code to bubble up info directories in build_meta
Diffstat (limited to 'setuptools')
| -rw-r--r-- | setuptools/build_meta.py | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py index 3a256259..ad5b904b 100644 --- a/setuptools/build_meta.py +++ b/setuptools/build_meta.py @@ -36,10 +36,11 @@ import contextlib import tempfile import warnings from pathlib import Path -from typing import Dict, Iterator, List, Optional, Union +from typing import Dict, Iterator, List, Optional, Union, Tuple import setuptools import distutils +from . import errors from ._path import same_path from ._reqs import parse_strings from ._deprecation_warning import SetuptoolsDeprecationWarning @@ -346,30 +347,22 @@ class _BuildMetaBackend(_ConfigSettingsTranslator): Returns the basename of the info directory, e.g. `proj-0.0.0.dist-info`. """ - 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 - - 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) - - return dist_infos[0] + info_dir = self._find_info_directory(metadata_directory, suffix) + if not same_path(info_dir.parent, metadata_directory): + shutil.move(str(info_dir), metadata_directory) + # PEP 517 allow other files and dirs to exist in metadata_directory + return info_dir.name + + def _find_info_directory(self, metadata_directory: str, suffix: str) -> Path: + for parent, dirs, _ in os.walk(metadata_directory): + candidates = [f for f in dirs if f.endswith(suffix)] + + if len(candidates) != 0 or len(dirs) != 1: + assert len(candidates) == 1, f"Multiple {suffix} directories found" + return Path(parent, candidates[0]) + + msg = f"No {suffix} directory found in {metadata_directory}" + raise errors.InternalError(msg) def prepare_metadata_for_build_wheel(self, metadata_directory, config_settings=None): |
