From f4cad3d403e0b449be229d023f1655ea1a038136 Mon Sep 17 00:00:00 2001 From: Chris Jerdonek Date: Mon, 23 Sep 2019 07:29:15 -0700 Subject: [PATCH] Add PackageFinder.process_project_url(), and test. --- src/pip/_internal/index/package_finder.py | 39 +++++++++++++---------- tests/unit/test_finder.py | 16 ++++++++++ 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/pip/_internal/index/package_finder.py b/src/pip/_internal/index/package_finder.py index 36cf91893..5be1c1488 100644 --- a/src/pip/_internal/index/package_finder.py +++ b/src/pip/_internal/index/package_finder.py @@ -779,6 +779,25 @@ class PackageFinder(object): return candidates + def process_project_url(self, project_url, link_evaluator): + # type: (Link, LinkEvaluator) -> List[InstallationCandidate] + logger.debug( + 'Fetching project page and analyzing links: %s', project_url, + ) + html_page = self._link_collector.fetch_page(project_url) + if html_page is None: + return [] + + page_links = list(parse_links(html_page)) + + with indent_log(): + package_links = self.evaluate_links( + link_evaluator, + links=page_links, + ) + + return package_links + def find_all_candidates(self, project_name): # type: (str) -> List[InstallationCandidate] """Find all available InstallationCandidate for project_name @@ -789,8 +808,7 @@ class PackageFinder(object): See LinkEvaluator.evaluate_link() for details on which files are accepted. """ - link_collector = self._link_collector - collected_links = link_collector.collect_links(project_name) + collected_links = self._link_collector.collect_links(project_name) link_evaluator = self.make_link_evaluator(project_name) @@ -801,21 +819,10 @@ class PackageFinder(object): page_versions = [] for project_url in collected_links.project_urls: - logger.debug( - 'Fetching project page and analyzing links: %s', project_url, + package_links = self.process_project_url( + project_url, link_evaluator=link_evaluator, ) - html_page = link_collector.fetch_page(project_url) - if html_page is None: - continue - - page_links = list(parse_links(html_page)) - - with indent_log(): - new_versions = self.evaluate_links( - link_evaluator, - links=page_links, - ) - page_versions.extend(new_versions) + page_versions.extend(package_links) file_versions = self.evaluate_links( link_evaluator, diff --git a/tests/unit/test_finder.py b/tests/unit/test_finder.py index e7bf13e02..a3b0da39a 100644 --- a/tests/unit/test_finder.py +++ b/tests/unit/test_finder.py @@ -473,6 +473,22 @@ class TestLinkEvaluator(object): assert actual == (False, expected_msg) +def test_process_project_url(data): + project_name = 'simple' + index_url = data.index_url('simple') + project_url = Link('{}/{}'.format(index_url, project_name)) + finder = make_test_finder(index_urls=[index_url]) + link_evaluator = finder.make_link_evaluator(project_name) + actual = finder.process_project_url( + project_url, link_evaluator=link_evaluator, + ) + + assert len(actual) == 1 + package_link = actual[0] + assert package_link.project == 'simple' + assert str(package_link.version) == '1.0' + + def test_find_all_candidates_nothing(): """Find nothing without anything""" finder = make_test_finder()