Mark top level requirements as REQUESTED

This commit is contained in:
Stéphane Bidoul 2020-04-12 12:40:38 +02:00
parent 21df86f197
commit c9a445762c
No known key found for this signature in database
GPG Key ID: BCAB2555446B5B92
4 changed files with 98 additions and 1 deletions

2
news/7811.feature Normal file
View File

@ -0,0 +1,2 @@
Generate PEP 376 REQUESTED metadata for top level requirements installed
by pip.

View File

@ -809,6 +809,7 @@ class InstallRequirement(object):
pycompile=pycompile,
warn_script_location=warn_script_location,
direct_url=direct_url,
requested=self.is_direct,
)
self.install_succeeded = True
return

View File

@ -0,0 +1,94 @@
def _assert_requested_present(script, result, name, version):
dist_info = script.site_packages / name + "-" + version + ".dist-info"
requested = dist_info / "REQUESTED"
assert dist_info in result.files_created
assert requested in result.files_created
def _assert_requested_absent(script, result, name, version):
dist_info = script.site_packages / name + "-" + version + ".dist-info"
requested = dist_info / "REQUESTED"
assert dist_info in result.files_created
assert requested not in result.files_created
def test_install_requested_basic(script, data, with_wheel):
result = script.pip(
"install", "--no-index", "-f", data.find_links, "require_simple"
)
_assert_requested_present(script, result, "require_simple", "1.0")
# dependency is not REQUESTED
_assert_requested_absent(script, result, "simple", "3.0")
def test_install_requested_requirements(script, data, with_wheel):
script.scratch_path.joinpath("requirements.txt").write_text(
"require_simple\n"
)
result = script.pip(
"install",
"--no-index",
"-f",
data.find_links,
"-r",
script.scratch_path / "requirements.txt",
)
_assert_requested_present(script, result, "require_simple", "1.0")
_assert_requested_absent(script, result, "simple", "3.0")
def test_install_requested_dep_in_requirements(script, data, with_wheel):
script.scratch_path.joinpath("requirements.txt").write_text(
"require_simple\nsimple<3\n"
)
result = script.pip(
"install",
"--no-index",
"-f",
data.find_links,
"-r",
script.scratch_path / "requirements.txt",
)
_assert_requested_present(script, result, "require_simple", "1.0")
# simple must have REQUESTED because it is in requirements.txt
_assert_requested_present(script, result, "simple", "2.0")
def test_install_requested_reqs_and_constraints(script, data, with_wheel):
script.scratch_path.joinpath("requirements.txt").write_text(
"require_simple\n"
)
script.scratch_path.joinpath("constraints.txt").write_text("simple<3\n")
result = script.pip(
"install",
"--no-index",
"-f",
data.find_links,
"-r",
script.scratch_path / "requirements.txt",
"-c",
script.scratch_path / "constraints.txt",
)
_assert_requested_present(script, result, "require_simple", "1.0")
# simple must not have REQUESTED because it is merely a constraint
_assert_requested_absent(script, result, "simple", "2.0")
def test_install_requested_in_reqs_and_constraints(script, data, with_wheel):
script.scratch_path.joinpath("requirements.txt").write_text(
"require_simple\nsimple\n"
)
script.scratch_path.joinpath("constraints.txt").write_text("simple<3\n")
result = script.pip(
"install",
"--no-index",
"-f",
data.find_links,
"-r",
script.scratch_path / "requirements.txt",
"-c",
script.scratch_path / "constraints.txt",
)
_assert_requested_present(script, result, "require_simple", "1.0")
# simple must have REQUESTED because it is in requirements.txt
_assert_requested_present(script, result, "simple", "2.0")

View File

@ -310,7 +310,7 @@ class TestInstallUnpackedWheel(object):
req_description=str(self.req),
requested=True,
)
self.assert_installed()
self.assert_installed(0o644)
requested_path = os.path.join(self.dest_dist_info, 'REQUESTED')
assert os.path.isfile(requested_path)