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

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

19 statements  

1"""Metadata generation logic for source distributions.""" 

2 

3import os 

4 

5from pip._vendor.pyproject_hooks import BuildBackendHookCaller 

6 

7from pip._internal.build_env import BuildEnvironment 

8from pip._internal.exceptions import ( 

9 InstallationSubprocessError, 

10 MetadataGenerationFailed, 

11) 

12from pip._internal.utils.subprocess import runner_with_spinner_message 

13from pip._internal.utils.temp_dir import TempDirectory 

14 

15 

16def generate_editable_metadata( 

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

18) -> str: 

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

20 

21 Returns the generated metadata directory. 

22 """ 

23 metadata_tmpdir = TempDirectory(kind="modern-metadata", globally_managed=True) 

24 

25 metadata_dir = metadata_tmpdir.path 

26 

27 with build_env: 

28 # Note that BuildBackendHookCaller implements a fallback for 

29 # prepare_metadata_for_build_wheel/editable, so we don't have to 

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

31 runner = runner_with_spinner_message( 

32 "Preparing editable metadata (pyproject.toml)" 

33 ) 

34 with backend.subprocess_runner(runner): 

35 try: 

36 distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir) 

37 except InstallationSubprocessError as error: 

38 raise MetadataGenerationFailed(package_details=details) from error 

39 

40 assert distinfo_dir is not None 

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