Skip to content

Commit 3cb4bdd

Browse files
authored
Move generate metadata into operations.build.metadata (#7283)
2 parents de736c6 + bebd691 commit 3cb4bdd

File tree

4 files changed

+65
-49
lines changed

4 files changed

+65
-49
lines changed

src/pip/_internal/operations/build/__init__.py

Whitespace-only changes.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
"""Metadata generation logic for source distributions.
2+
"""
3+
4+
import atexit
5+
import logging
6+
import os
7+
8+
from pip._internal.operations.build.metadata_legacy import \
9+
generate_metadata as _generate_metadata_legacy
10+
from pip._internal.utils.subprocess import runner_with_spinner_message
11+
from pip._internal.utils.temp_dir import TempDirectory
12+
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
13+
14+
if MYPY_CHECK_RUNNING:
15+
from typing import Callable
16+
17+
from pip._internal.req.req_install import InstallRequirement
18+
19+
logger = logging.getLogger(__name__)
20+
21+
22+
def get_metadata_generator(install_req):
23+
# type: (InstallRequirement) -> Callable[[InstallRequirement], str]
24+
"""Return a callable metadata generator for this InstallRequirement.
25+
26+
A metadata generator takes an InstallRequirement (install_req) as an input,
27+
generates metadata via the appropriate process for that install_req and
28+
returns the generated metadata directory.
29+
"""
30+
if not install_req.use_pep517:
31+
return _generate_metadata_legacy
32+
33+
return _generate_metadata
34+
35+
36+
def _generate_metadata(install_req):
37+
# type: (InstallRequirement) -> str
38+
assert install_req.pep517_backend is not None
39+
build_env = install_req.build_env
40+
backend = install_req.pep517_backend
41+
42+
# NOTE: This needs to be refactored to stop using atexit
43+
metadata_tmpdir = TempDirectory(kind="modern-metadata")
44+
atexit.register(metadata_tmpdir.cleanup)
45+
46+
metadata_dir = metadata_tmpdir.path
47+
48+
with build_env:
49+
# Note that Pep517HookCaller implements a fallback for
50+
# prepare_metadata_for_build_wheel, so we don't have to
51+
# consider the possibility that this hook doesn't exist.
52+
runner = runner_with_spinner_message("Preparing wheel metadata")
53+
with backend.subprocess_runner(runner):
54+
distinfo_dir = backend.prepare_metadata_for_build_wheel(
55+
metadata_dir
56+
)
57+
58+
return os.path.join(metadata_dir, distinfo_dir)

src/pip/_internal/operations/generate_metadata.py renamed to src/pip/_internal/operations/build/metadata_legacy.py

Lines changed: 6 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,24 @@
1-
"""Metadata generation logic for source distributions.
1+
"""Metadata generation logic for legacy source distributions.
22
"""
33

4-
import atexit
54
import logging
65
import os
76

87
from pip._internal.exceptions import InstallationError
98
from pip._internal.utils.misc import ensure_dir
109
from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args
11-
from pip._internal.utils.subprocess import (
12-
call_subprocess,
13-
runner_with_spinner_message,
14-
)
15-
from pip._internal.utils.temp_dir import TempDirectory
10+
from pip._internal.utils.subprocess import call_subprocess
1611
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
1712
from pip._internal.vcs import vcs
1813

1914
if MYPY_CHECK_RUNNING:
20-
from typing import Callable, List, Optional
15+
from typing import List, Optional
2116

2217
from pip._internal.req.req_install import InstallRequirement
2318

2419
logger = logging.getLogger(__name__)
2520

2621

27-
def get_metadata_generator(install_req):
28-
# type: (InstallRequirement) -> Callable[[InstallRequirement], str]
29-
"""Return a callable metadata generator for this InstallRequirement.
30-
31-
A metadata generator takes an InstallRequirement (install_req) as an input,
32-
generates metadata via the appropriate process for that install_req and
33-
returns the generated metadata directory.
34-
"""
35-
if not install_req.use_pep517:
36-
return _generate_metadata_legacy
37-
38-
return _generate_metadata
39-
40-
4122
def _find_egg_info(source_directory, is_editable):
4223
# type: (str, bool) -> str
4324
"""Find an .egg-info in `source_directory`, based on `is_editable`.
@@ -97,8 +78,10 @@ def depth_of_directory(dir_):
9778
return os.path.join(base, filenames[0])
9879

9980

100-
def _generate_metadata_legacy(install_req):
81+
def generate_metadata(install_req):
10182
# type: (InstallRequirement) -> str
83+
assert install_req.unpacked_source_directory
84+
10285
req_details_str = install_req.name or "from {}".format(install_req.link)
10386
logger.debug(
10487
'Running setup.py (path:%s) egg_info for package %s',
@@ -135,28 +118,3 @@ def _generate_metadata_legacy(install_req):
135118
install_req.unpacked_source_directory,
136119
install_req.editable,
137120
)
138-
139-
140-
def _generate_metadata(install_req):
141-
# type: (InstallRequirement) -> str
142-
assert install_req.pep517_backend is not None
143-
build_env = install_req.build_env
144-
backend = install_req.pep517_backend
145-
146-
# NOTE: This needs to be refactored to stop using atexit
147-
metadata_tmpdir = TempDirectory(kind="modern-metadata")
148-
atexit.register(metadata_tmpdir.cleanup)
149-
150-
metadata_dir = metadata_tmpdir.path
151-
152-
with build_env:
153-
# Note that Pep517HookCaller implements a fallback for
154-
# prepare_metadata_for_build_wheel, so we don't have to
155-
# consider the possibility that this hook doesn't exist.
156-
runner = runner_with_spinner_message("Preparing wheel metadata")
157-
with backend.subprocess_runner(runner):
158-
distinfo_dir = backend.prepare_metadata_for_build_wheel(
159-
metadata_dir
160-
)
161-
162-
return os.path.join(metadata_dir, distinfo_dir)

src/pip/_internal/req/req_install.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from pip._internal.exceptions import InstallationError
2525
from pip._internal.locations import distutils_scheme
2626
from pip._internal.models.link import Link
27-
from pip._internal.operations.generate_metadata import get_metadata_generator
27+
from pip._internal.operations.build.metadata import get_metadata_generator
2828
from pip._internal.pyproject import load_pyproject_toml, make_pyproject_path
2929
from pip._internal.req.req_uninstall import UninstallPathSet
3030
from pip._internal.utils.compat import native_str

0 commit comments

Comments
 (0)