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

17 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-07 06:48 +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_editable_metadata( 

18 build_env: BuildEnvironment, backend: BuildBackendHookCaller, details: str 

19) -> str: 

20 """Generate metadata using mechanisms described in PEP 660. 

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/editable, so we don't have to 

31 # consider the possibility that this hook doesn't exist. 

32 runner = runner_with_spinner_message( 

33 "Preparing editable metadata (pyproject.toml)" 

34 ) 

35 with backend.subprocess_runner(runner): 

36 try: 

37 distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) 

38 except InstallationSubprocessError as error: 

39 raise MetadataGenerationFailed(package_details=details) from error 

40 

41 return os.path.join(metadata_dir, distinfo_dir)