Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pip/_internal/operations/build/metadata_legacy.py: 41%
27 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:48 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:48 +0000
1"""Metadata generation logic for legacy source distributions.
2"""
4import logging
5import os
7from pip._internal.build_env import BuildEnvironment
8from pip._internal.cli.spinners import open_spinner
9from pip._internal.exceptions import (
10 InstallationError,
11 InstallationSubprocessError,
12 MetadataGenerationFailed,
13)
14from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args
15from pip._internal.utils.subprocess import call_subprocess
16from pip._internal.utils.temp_dir import TempDirectory
18logger = logging.getLogger(__name__)
21def _find_egg_info(directory: str) -> str:
22 """Find an .egg-info subdirectory in `directory`."""
23 filenames = [f for f in os.listdir(directory) if f.endswith(".egg-info")]
25 if not filenames:
26 raise InstallationError(f"No .egg-info directory found in {directory}")
28 if len(filenames) > 1:
29 raise InstallationError(
30 "More than one .egg-info directory found in {}".format(directory)
31 )
33 return os.path.join(directory, filenames[0])
36def generate_metadata(
37 build_env: BuildEnvironment,
38 setup_py_path: str,
39 source_dir: str,
40 isolated: bool,
41 details: str,
42) -> str:
43 """Generate metadata using setup.py-based defacto mechanisms.
45 Returns the generated metadata directory.
46 """
47 logger.debug(
48 "Running setup.py (path:%s) egg_info for package %s",
49 setup_py_path,
50 details,
51 )
53 egg_info_dir = TempDirectory(kind="pip-egg-info", globally_managed=True).path
55 args = make_setuptools_egg_info_args(
56 setup_py_path,
57 egg_info_dir=egg_info_dir,
58 no_user_config=isolated,
59 )
61 with build_env:
62 with open_spinner("Preparing metadata (setup.py)") as spinner:
63 try:
64 call_subprocess(
65 args,
66 cwd=source_dir,
67 command_desc="python setup.py egg_info",
68 spinner=spinner,
69 )
70 except InstallationSubprocessError as error:
71 raise MetadataGenerationFailed(package_details=details) from error
73 # Return the .egg-info directory.
74 return _find_egg_info(egg_info_dir)