mirror of https://github.com/pypa/pip
Add PackageFinder.process_project_url(), and test.
This commit is contained in:
parent
bab1e4f8a1
commit
f4cad3d403
|
@ -779,6 +779,25 @@ class PackageFinder(object):
|
||||||
|
|
||||||
return candidates
|
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):
|
def find_all_candidates(self, project_name):
|
||||||
# type: (str) -> List[InstallationCandidate]
|
# type: (str) -> List[InstallationCandidate]
|
||||||
"""Find all available InstallationCandidate for project_name
|
"""Find all available InstallationCandidate for project_name
|
||||||
|
@ -789,8 +808,7 @@ class PackageFinder(object):
|
||||||
See LinkEvaluator.evaluate_link() for details on which files
|
See LinkEvaluator.evaluate_link() for details on which files
|
||||||
are accepted.
|
are accepted.
|
||||||
"""
|
"""
|
||||||
link_collector = self._link_collector
|
collected_links = self._link_collector.collect_links(project_name)
|
||||||
collected_links = link_collector.collect_links(project_name)
|
|
||||||
|
|
||||||
link_evaluator = self.make_link_evaluator(project_name)
|
link_evaluator = self.make_link_evaluator(project_name)
|
||||||
|
|
||||||
|
@ -801,21 +819,10 @@ class PackageFinder(object):
|
||||||
|
|
||||||
page_versions = []
|
page_versions = []
|
||||||
for project_url in collected_links.project_urls:
|
for project_url in collected_links.project_urls:
|
||||||
logger.debug(
|
package_links = self.process_project_url(
|
||||||
'Fetching project page and analyzing links: %s', project_url,
|
project_url, link_evaluator=link_evaluator,
|
||||||
)
|
)
|
||||||
html_page = link_collector.fetch_page(project_url)
|
page_versions.extend(package_links)
|
||||||
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)
|
|
||||||
|
|
||||||
file_versions = self.evaluate_links(
|
file_versions = self.evaluate_links(
|
||||||
link_evaluator,
|
link_evaluator,
|
||||||
|
|
|
@ -473,6 +473,22 @@ class TestLinkEvaluator(object):
|
||||||
assert actual == (False, expected_msg)
|
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():
|
def test_find_all_candidates_nothing():
|
||||||
"""Find nothing without anything"""
|
"""Find nothing without anything"""
|
||||||
finder = make_test_finder()
|
finder = make_test_finder()
|
||||||
|
|
Loading…
Reference in New Issue