Skip to content

Commit

Permalink
Merge pull request #7492 from pradyunsg/refactor/expand-metadata-gene…
Browse files Browse the repository at this point in the history
…ration-arguments

Expand arguments to metadata generation functions
  • Loading branch information
pradyunsg authored Dec 18, 2019
2 parents 2a48286 + 75f7f06 commit d613433
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 33 deletions.
11 changes: 4 additions & 7 deletions src/pip/_internal/operations/build/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,18 @@
from pip._internal.utils.typing import MYPY_CHECK_RUNNING

if MYPY_CHECK_RUNNING:
from pip._internal.req.req_install import InstallRequirement
from pip._internal.build_env import BuildEnvironment
from pip._vendor.pep517.wrappers import Pep517HookCaller

logger = logging.getLogger(__name__)


def generate_metadata(install_req):
# type: (InstallRequirement) -> str
def generate_metadata(build_env, backend):
# type: (BuildEnvironment, Pep517HookCaller) -> str
"""Generate metadata using mechanisms described in PEP 517.
Returns the generated metadata directory.
"""
assert install_req.pep517_backend is not None
build_env = install_req.build_env
backend = install_req.pep517_backend

metadata_tmpdir = TempDirectory(
kind="modern-metadata", globally_managed=True
)
Expand Down
40 changes: 19 additions & 21 deletions src/pip/_internal/operations/build/metadata_legacy.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
if MYPY_CHECK_RUNNING:
from typing import List, Optional

from pip._internal.req.req_install import InstallRequirement
from pip._internal.build_env import BuildEnvironment

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -78,47 +78,45 @@ def depth_of_directory(dir_):
return os.path.join(base, filenames[0])


def generate_metadata(install_req):
# type: (InstallRequirement) -> str
"""Generate metadata using setup.py-based defacto mechanisms.ArithmeticError
def generate_metadata(
build_env, # type: BuildEnvironment
setup_py_path, # type: str
source_dir, # type: str
editable, # type: bool
isolated, # type: bool
details, # type: str
):
# type: (...) -> str
"""Generate metadata using setup.py-based defacto mechanisms.
Returns the generated metadata directory.
"""
assert install_req.unpacked_source_directory

req_details_str = install_req.name or "from {}".format(install_req.link)
logger.debug(
'Running setup.py (path:%s) egg_info for package %s',
install_req.setup_py_path, req_details_str,
setup_py_path, details,
)

egg_info_dir = None # type: Optional[str]
# For non-editable installs, don't put the .egg-info files at the root,
# to avoid confusion due to the source code being considered an installed
# egg.
if not install_req.editable:
egg_info_dir = os.path.join(
install_req.unpacked_source_directory, 'pip-egg-info',
)

if not editable:
egg_info_dir = os.path.join(source_dir, 'pip-egg-info')
# setuptools complains if the target directory does not exist.
ensure_dir(egg_info_dir)

args = make_setuptools_egg_info_args(
install_req.setup_py_path,
setup_py_path,
egg_info_dir=egg_info_dir,
no_user_config=install_req.isolated,
no_user_config=isolated,
)

with install_req.build_env:
with build_env:
call_subprocess(
args,
cwd=install_req.unpacked_source_directory,
cwd=source_dir,
command_desc='python setup.py egg_info',
)

# Return the .egg-info directory.
return _find_egg_info(
install_req.unpacked_source_directory,
install_req.editable,
)
return _find_egg_info(source_dir, editable)
29 changes: 24 additions & 5 deletions src/pip/_internal/req/req_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,29 @@ def load_pyproject_toml(self):
self.unpacked_source_directory, backend, backend_path=backend_path,
)

def _generate_metadata(self):
# type: () -> str
"""Invokes metadata generator functions, with the required arguments.
"""
if not self.use_pep517:
assert self.unpacked_source_directory

return generate_metadata_legacy(
build_env=self.build_env,
setup_py_path=self.setup_py_path,
source_dir=self.unpacked_source_directory,
editable=self.editable,
isolated=self.isolated,
details=self.name or "from {}".format(self.link)
)

assert self.pep517_backend is not None

return generate_metadata(
build_env=self.build_env,
backend=self.pep517_backend,
)

def prepare_metadata(self):
# type: () -> None
"""Ensure that project metadata is available.
Expand All @@ -539,12 +562,8 @@ def prepare_metadata(self):
"""
assert self.source_dir

metadata_generator = generate_metadata
if not self.use_pep517:
metadata_generator = generate_metadata_legacy

with indent_log():
self.metadata_directory = metadata_generator(self)
self.metadata_directory = self._generate_metadata()

# Act on the newly generated metadata, based on the name and version.
if not self.name:
Expand Down

0 comments on commit d613433

Please sign in to comment.