Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pip/_internal/operations/build/metadata.py: 41%

17 statements  

« prev     ^ index     » next       coverage.py v7.4.3, created at 2024-02-26 06:33 +0000

1"""Metadata generation logic for source distributions. 

2""" 

3 

4import os 

5 

6from pip._vendor.pyproject_hooks import BuildBackendHookCaller 

7 

8from pip._internal.build_env import BuildEnvironment 

9from pip._internal.exceptions import ( 

10 InstallationSubprocessError, 

11 MetadataGenerationFailed, 

12) 

13from pip._internal.utils.subprocess import runner_with_spinner_message 

14from pip._internal.utils.temp_dir import TempDirectory 

15 

16 

17def 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)