mirror of https://github.com/pypa/pip
fix test failures
This commit is contained in:
parent
ef9bcac9b5
commit
1dd5f4fa5e
|
@ -12,6 +12,7 @@ from pathlib import Path
|
|||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
Callable,
|
||||
Dict,
|
||||
FrozenSet,
|
||||
Iterable,
|
||||
|
@ -618,6 +619,19 @@ class CandidateEvaluator:
|
|||
)
|
||||
|
||||
|
||||
_FindCandidates = Callable[["PackageFinder", str], List[InstallationCandidate]]
|
||||
|
||||
|
||||
def _canonicalize_arg(func: _FindCandidates) -> _FindCandidates:
|
||||
@functools.wraps(func)
|
||||
def wrapper(
|
||||
self: "PackageFinder", project_name: str
|
||||
) -> List[InstallationCandidate]:
|
||||
return func(self, canonicalize_name(project_name))
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
class PackageFinder:
|
||||
"""This finds packages.
|
||||
|
||||
|
@ -1110,6 +1124,7 @@ class PackageFinder:
|
|||
|
||||
return package_links
|
||||
|
||||
@_canonicalize_arg
|
||||
@functools.lru_cache(maxsize=None)
|
||||
def find_all_candidates(self, project_name: str) -> List[InstallationCandidate]:
|
||||
"""Find all available InstallationCandidate for project_name
|
||||
|
|
|
@ -2,7 +2,6 @@ import itertools
|
|||
import json
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import uuid
|
||||
from pathlib import Path
|
||||
from textwrap import dedent
|
||||
|
@ -661,55 +660,6 @@ def test_parse_links__metadata_file_data(
|
|||
assert link._hashes == hashes
|
||||
|
||||
|
||||
def test_parse_links_caches_same_page_by_url() -> None:
|
||||
raise Exception("todo!")
|
||||
html = (
|
||||
"<!DOCTYPE html>"
|
||||
'<html><head><meta charset="utf-8"><head>'
|
||||
'<body><a href="/pkg1-1.0.tar.gz"></a></body></html>'
|
||||
)
|
||||
html_bytes = html.encode("utf-8")
|
||||
|
||||
url = "https://example.com/simple/"
|
||||
|
||||
page_1 = IndexContent(
|
||||
html_bytes,
|
||||
"text/html",
|
||||
encoding=None,
|
||||
url=url,
|
||||
)
|
||||
# Make a second page with zero content, to ensure that it's not accessed,
|
||||
# because the page was cached by url.
|
||||
page_2 = IndexContent(
|
||||
b"",
|
||||
"text/html",
|
||||
encoding=None,
|
||||
url=url,
|
||||
)
|
||||
# Make a third page which represents an index url, which should not be
|
||||
# cached, even for the same url. We modify the page content slightly to
|
||||
# verify that the result is not cached.
|
||||
page_3 = IndexContent(
|
||||
re.sub(b"pkg1", b"pkg2", html_bytes),
|
||||
"text/html",
|
||||
encoding=None,
|
||||
url=url,
|
||||
# cache_link_parsing=False,
|
||||
)
|
||||
|
||||
parsed_links_1 = list(parse_links(page_1))
|
||||
assert len(parsed_links_1) == 1
|
||||
assert "pkg1" in parsed_links_1[0].url
|
||||
|
||||
parsed_links_2 = list(parse_links(page_2))
|
||||
assert parsed_links_2 == parsed_links_1
|
||||
|
||||
parsed_links_3 = list(parse_links(page_3))
|
||||
assert len(parsed_links_3) == 1
|
||||
assert parsed_links_3 != parsed_links_1
|
||||
assert "pkg2" in parsed_links_3[0].url
|
||||
|
||||
|
||||
@mock.patch("pip._internal.index.collector.raise_for_status")
|
||||
def test_request_http_error(
|
||||
mock_raise_for_status: mock.Mock, caplog: pytest.LogCaptureFixture
|
||||
|
|
|
@ -314,6 +314,7 @@ def test_finder_priority_file_over_page(data: TestData) -> None:
|
|||
find_links=[data.find_links],
|
||||
index_urls=["http://pypi.org/simple/"],
|
||||
)
|
||||
assert req.name
|
||||
all_versions = finder.find_all_candidates(req.name)
|
||||
# 1 file InstallationCandidate followed by all https ones
|
||||
assert all_versions[0].link.scheme == "file"
|
||||
|
@ -332,6 +333,7 @@ def test_finder_priority_nonegg_over_eggfragments() -> None:
|
|||
links = ["http://foo/bar.py#egg=bar-1.0", "http://foo/bar-1.0.tar.gz"]
|
||||
|
||||
finder = make_test_finder(links)
|
||||
assert req.name
|
||||
all_versions = finder.find_all_candidates(req.name)
|
||||
assert all_versions[0].link.url.endswith("tar.gz")
|
||||
assert all_versions[1].link.url.endswith("#egg=bar-1.0")
|
||||
|
@ -344,6 +346,7 @@ def test_finder_priority_nonegg_over_eggfragments() -> None:
|
|||
links.reverse()
|
||||
|
||||
finder = make_test_finder(links)
|
||||
assert req.name
|
||||
all_versions = finder.find_all_candidates(req.name)
|
||||
assert all_versions[0].link.url.endswith("tar.gz")
|
||||
assert all_versions[1].link.url.endswith("#egg=bar-1.0")
|
||||
|
@ -546,6 +549,17 @@ def test_find_all_candidates_nothing() -> None:
|
|||
assert not finder.find_all_candidates("pip")
|
||||
|
||||
|
||||
def test_find_all_candidates_cached(data: TestData) -> None:
|
||||
"""Ensure the exact same list of candidates is returned when called twice for the
|
||||
same project name."""
|
||||
finder = make_test_finder(find_links=[data.find_links])
|
||||
versions = finder.find_all_candidates("simple")
|
||||
# Check that the exact same list is reused for a second call.
|
||||
assert versions is finder.find_all_candidates("simple")
|
||||
# Check that the project name is canonicalized before caching.
|
||||
assert versions is finder.find_all_candidates("Simple")
|
||||
|
||||
|
||||
def test_find_all_candidates_find_links(data: TestData) -> None:
|
||||
finder = make_test_finder(find_links=[data.find_links])
|
||||
versions = finder.find_all_candidates("simple")
|
||||
|
|
Loading…
Reference in New Issue