Add PackageFinder.process_project_url(), and test.

This commit is contained in:
Chris Jerdonek 2019-09-23 07:29:15 -07:00 committed by Chris Hunt
parent bab1e4f8a1
commit f4cad3d403
2 changed files with 39 additions and 16 deletions

View File

@ -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,

View File

@ -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()