python (3.11.7)

(root)/
lib/
python3.11/
site-packages/
pip/
_internal/
operations/
build/
metadata.py
       1  """Metadata generation logic for source distributions.
       2  """
       3  
       4  import os
       5  
       6  from pip._vendor.pyproject_hooks import BuildBackendHookCaller
       7  
       8  from pip._internal.build_env import BuildEnvironment
       9  from pip._internal.exceptions import (
      10      InstallationSubprocessError,
      11      MetadataGenerationFailed,
      12  )
      13  from pip._internal.utils.subprocess import runner_with_spinner_message
      14  from pip._internal.utils.temp_dir import TempDirectory
      15  
      16  
      17  def generate_metadata(
      18      build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str
      19  ) -> str:
      20      """Generate metadata using mechanisms described in PEP 517.
      21  
      22      Returns the generated metadata directory.
      23      """
      24      metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True)
      25  
      26      metadata_dir = metadata_tmpdir.path
      27  
      28      with build_env:
      29          # Note that BuildBackendHookCaller implements a fallback for
      30          # prepare_metadata_for_build_wheel, so we don't have to
      31          # consider the possibility that this hook doesn't exist.
      32          runner = runner_with_spinner_message("Preparing metadata (pyproject.toml)")
      33          with backend.subprocess_runner(runner):
      34              try:
      35                  distinfo_dir = backend.prepare_metadata_for_build_wheel(metadata_dir)
      36              except InstallationSubprocessError as error:
      37                  raise MetadataGenerationFailed(package_details=details) from error
      38  
      39      return os.path.join(metadata_dir, distinfo_dir)