File indexing completed on 2024-11-24 05:05:58

0001 """Metadata generation logic for source distributions.
0002 """
0003 
0004 import os
0005 
0006 from pip._vendor.pep517.wrappers import Pep517HookCaller
0007 
0008 from pip._internal.build_env import BuildEnvironment
0009 from pip._internal.exceptions import (
0010     InstallationSubprocessError,
0011     MetadataGenerationFailed,
0012 )
0013 from pip._internal.utils.subprocess import runner_with_spinner_message
0014 from pip._internal.utils.temp_dir import TempDirectory
0015 
0016 
0017 def generate_metadata(
0018     build_env: BuildEnvironment, backend: Pep517HookCaller, details: str
0019 ) -> str:
0020     """Generate metadata using mechanisms described in PEP 517.
0021 
0022     Returns the generated metadata directory.
0023     """
0024     metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True)
0025 
0026     metadata_dir = metadata_tmpdir.path
0027 
0028     with build_env:
0029         # Note that Pep517HookCaller implements a fallback for
0030         # prepare_metadata_for_build_wheel, so we don't have to
0031         # consider the possibility that this hook doesn't exist.
0032         runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)")
0033         with backend.subprocess_runner(runner):
0034             try:
0035                 distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir)
0036             except InstallationSubprocessError as error:
0037                 raise MetadataGenerationFailed(package_details=details) from error
0038 
0039     return os.path.join(metadata_dir, distinfo_dir)