From e21e28f4ebfefac5f7e5cb7c99e4301a304895a1 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 19 Oct 2019 23:07:17 +0530 Subject: [PATCH 1/3] Move prepare_pep517_metadata to generate_metadata Why: So that InstallRequirement is no longer responsible for this task. --- .../_internal/operations/generate_metadata.py | 21 ++++++++++++++++- src/pip/_internal/req/req_install.py | 23 ------------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/pip/_internal/operations/generate_metadata.py b/src/pip/_internal/operations/generate_metadata.py index d0bb7c8e940..5772dd83d69 100644 --- a/src/pip/_internal/operations/generate_metadata.py +++ b/src/pip/_internal/operations/generate_metadata.py @@ -134,4 +134,23 @@ def _generate_metadata_legacy(install_req): def _generate_metadata(install_req): # type: (InstallRequirement) -> str - return install_req.prepare_pep517_metadata() + assert install_req.pep517_backend is not None + + # NOTE: This needs to be refactored to stop using atexit + metadata_tmpdir = TempDirectory(kind="modern-metadata") + atexit.register(metadata_tmpdir.cleanup) + + metadata_dir = metadata_tmpdir.path + + with install_req.build_env: + # Note that Pep517HookCaller implements a fallback for + # prepare_metadata_for_build_wheel, so we don't have to + # consider the possibility that this hook doesn't exist. + runner = runner_with_spinner_message("Preparing wheel metadata") + backend = install_req.pep517_backend + with backend.subprocess_runner(runner): + distinfo_dir = backend.prepare_metadata_for_build_wheel( + metadata_dir + ) + + return os.path.join(metadata_dir, distinfo_dir) diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py index 763a2f54415..97d48a69ba1 100644 --- a/src/pip/_internal/req/req_install.py +++ b/src/pip/_internal/req/req_install.py @@ -615,29 +615,6 @@ def prepare_metadata(self): ) self.req = Requirement(metadata_name) - def prepare_pep517_metadata(self): - # type: () -> str - assert self.pep517_backend is not None - - # NOTE: This needs to be refactored to stop using atexit - metadata_tmpdir = TempDirectory(kind="modern-metadata") - atexit.register(metadata_tmpdir.cleanup) - - metadata_dir = metadata_tmpdir.path - - with self.build_env: - # Note that Pep517HookCaller implements a fallback for - # prepare_metadata_for_build_wheel, so we don't have to - # consider the possibility that this hook doesn't exist. - runner = runner_with_spinner_message("Preparing wheel metadata") - backend = self.pep517_backend - with backend.subprocess_runner(runner): - distinfo_dir = backend.prepare_metadata_for_build_wheel( - metadata_dir - ) - - return os.path.join(metadata_dir, distinfo_dir) - @property def metadata(self): # type: () -> Any From e6875ec7cc52a010f668e9b9fa0a00d557bb1702 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sat, 19 Oct 2019 23:10:18 +0530 Subject: [PATCH 2/3] refactor: Unpack from install_req eagerly --- src/pip/_internal/operations/generate_metadata.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pip/_internal/operations/generate_metadata.py b/src/pip/_internal/operations/generate_metadata.py index 5772dd83d69..2d2b01ae651 100644 --- a/src/pip/_internal/operations/generate_metadata.py +++ b/src/pip/_internal/operations/generate_metadata.py @@ -135,6 +135,8 @@ def _generate_metadata_legacy(install_req): def _generate_metadata(install_req): # type: (InstallRequirement) -> str assert install_req.pep517_backend is not None + build_env = install_req.build_env + backend = install_req.pep517_backend # NOTE: This needs to be refactored to stop using atexit metadata_tmpdir = TempDirectory(kind="modern-metadata") @@ -142,12 +144,11 @@ def _generate_metadata(install_req): metadata_dir = metadata_tmpdir.path - with install_req.build_env: + with build_env: # Note that Pep517HookCaller implements a fallback for # prepare_metadata_for_build_wheel, so we don't have to # consider the possibility that this hook doesn't exist. runner = runner_with_spinner_message("Preparing wheel metadata") - backend = install_req.pep517_backend with backend.subprocess_runner(runner): distinfo_dir = backend.prepare_metadata_for_build_wheel( metadata_dir From 1875573dafdaec7a7a18071c06f8f514d2f5eabf Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Sun, 20 Oct 2019 00:12:37 +0530 Subject: [PATCH 3/3] Ah the imports. --- src/pip/_internal/operations/generate_metadata.py | 7 ++++++- src/pip/_internal/req/req_install.py | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pip/_internal/operations/generate_metadata.py b/src/pip/_internal/operations/generate_metadata.py index 2d2b01ae651..04e5ace1236 100644 --- a/src/pip/_internal/operations/generate_metadata.py +++ b/src/pip/_internal/operations/generate_metadata.py @@ -1,13 +1,18 @@ """Metadata generation logic for source distributions. """ +import atexit import logging import os from pip._internal.exceptions import InstallationError from pip._internal.utils.misc import ensure_dir from pip._internal.utils.setuptools_build import make_setuptools_egg_info_args -from pip._internal.utils.subprocess import call_subprocess +from pip._internal.utils.subprocess import ( + call_subprocess, + runner_with_spinner_message, +) +from pip._internal.utils.temp_dir import TempDirectory from pip._internal.utils.typing import MYPY_CHECK_RUNNING from pip._internal.vcs import vcs diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py index 97d48a69ba1..79fe1716217 100644 --- a/src/pip/_internal/req/req_install.py +++ b/src/pip/_internal/req/req_install.py @@ -4,7 +4,6 @@ from __future__ import absolute_import -import atexit import logging import os import shutil