|
22 | 22 | )
|
23 | 23 | from pip._internal.index.package_finder import PackageFinder
|
24 | 24 | from pip._internal.metadata import select_backend
|
| 25 | +from pip._internal.models.direct_url import ArchiveInfo, DirInfo, VcsInfo |
25 | 26 | from pip._internal.network.session import PipSession
|
26 | 27 | from pip._internal.operations.build.build_tracker import get_build_tracker
|
27 | 28 | from pip._internal.operations.prepare import RequirementPreparer
|
@@ -342,6 +343,115 @@ def test_hashed_deps_on_require_hashes(self) -> None:
|
342 | 343 | )
|
343 | 344 | )
|
344 | 345 |
|
| 346 | + def test_download_info_find_links(self, data: TestData) -> None: |
| 347 | + """Test that download_info is set for requirements via find_links.""" |
| 348 | + finder = make_test_finder(find_links=[data.find_links]) |
| 349 | + with self._basic_resolver(finder) as resolver: |
| 350 | + ireq = get_processed_req_from_line("simple") |
| 351 | + reqset = resolver.resolve([ireq], True) |
| 352 | + assert len(reqset.all_requirements) == 1 |
| 353 | + req = reqset.all_requirements[0] |
| 354 | + assert req.download_info |
| 355 | + assert isinstance(req.download_info.info, ArchiveInfo) |
| 356 | + assert req.download_info.info.hash |
| 357 | + |
| 358 | + @pytest.mark.network |
| 359 | + def test_download_info_index_url(self) -> None: |
| 360 | + """Test that download_info is set for requirements via index.""" |
| 361 | + finder = make_test_finder(index_urls=["https://pypi.org/simple"]) |
| 362 | + with self._basic_resolver(finder) as resolver: |
| 363 | + ireq = get_processed_req_from_line("initools") |
| 364 | + reqset = resolver.resolve([ireq], True) |
| 365 | + assert len(reqset.all_requirements) == 1 |
| 366 | + req = reqset.all_requirements[0] |
| 367 | + assert req.download_info |
| 368 | + assert isinstance(req.download_info.info, ArchiveInfo) |
| 369 | + assert req.download_info.info.hash |
| 370 | + |
| 371 | + @pytest.mark.network |
| 372 | + def test_download_info_web_archive(self) -> None: |
| 373 | + """Test that download_info is set for requirements from a web archive.""" |
| 374 | + finder = make_test_finder() |
| 375 | + with self._basic_resolver(finder) as resolver: |
| 376 | + ireq = get_processed_req_from_line( |
| 377 | + "pip-test-package @ " |
| 378 | + "https://github.com/pypa/pip-test-package/tarball/0.1.1" |
| 379 | + ) |
| 380 | + reqset = resolver.resolve([ireq], True) |
| 381 | + assert len(reqset.all_requirements) == 1 |
| 382 | + req = reqset.all_requirements[0] |
| 383 | + assert req.download_info |
| 384 | + assert ( |
| 385 | + req.download_info.url |
| 386 | + == "https://github.com/pypa/pip-test-package/tarball/0.1.1" |
| 387 | + ) |
| 388 | + assert isinstance(req.download_info.info, ArchiveInfo) |
| 389 | + assert ( |
| 390 | + req.download_info.info.hash == "sha256=" |
| 391 | + "ad977496000576e1b6c41f6449a9897087ce9da6db4f15b603fe8372af4bf3c6" |
| 392 | + ) |
| 393 | + |
| 394 | + def test_download_info_local_wheel(self, data: TestData) -> None: |
| 395 | + """Test that download_info is set for requirements from a local wheel.""" |
| 396 | + finder = make_test_finder() |
| 397 | + with self._basic_resolver(finder) as resolver: |
| 398 | + ireq = get_processed_req_from_line( |
| 399 | + f"{data.packages}/simplewheel-1.0-py2.py3-none-any.whl" |
| 400 | + ) |
| 401 | + reqset = resolver.resolve([ireq], True) |
| 402 | + assert len(reqset.all_requirements) == 1 |
| 403 | + req = reqset.all_requirements[0] |
| 404 | + assert req.download_info |
| 405 | + assert req.download_info.url.startswith("file://") |
| 406 | + assert isinstance(req.download_info.info, ArchiveInfo) |
| 407 | + assert ( |
| 408 | + req.download_info.info.hash == "sha256=" |
| 409 | + "e63aa139caee941ec7f33f057a5b987708c2128238357cf905429846a2008718" |
| 410 | + ) |
| 411 | + |
| 412 | + def test_download_info_local_dir(self, data: TestData) -> None: |
| 413 | + """Test that download_info is set for requirements from a local dir.""" |
| 414 | + finder = make_test_finder() |
| 415 | + with self._basic_resolver(finder) as resolver: |
| 416 | + ireq_url = path_to_url(data.packages / "FSPkg") |
| 417 | + ireq = get_processed_req_from_line(f"FSPkg @ {ireq_url}") |
| 418 | + reqset = resolver.resolve([ireq], True) |
| 419 | + assert len(reqset.all_requirements) == 1 |
| 420 | + req = reqset.all_requirements[0] |
| 421 | + assert req.download_info |
| 422 | + assert req.download_info.url.startswith("file://") |
| 423 | + assert isinstance(req.download_info.info, DirInfo) |
| 424 | + |
| 425 | + def test_download_info_local_editable_dir(self, data: TestData) -> None: |
| 426 | + """Test that download_info is set for requirements from a local editable dir.""" |
| 427 | + finder = make_test_finder() |
| 428 | + with self._basic_resolver(finder) as resolver: |
| 429 | + ireq_url = path_to_url(data.packages / "FSPkg") |
| 430 | + ireq = get_processed_req_from_line(f"-e {ireq_url}#egg=FSPkg") |
| 431 | + reqset = resolver.resolve([ireq], True) |
| 432 | + assert len(reqset.all_requirements) == 1 |
| 433 | + req = reqset.all_requirements[0] |
| 434 | + assert req.download_info |
| 435 | + assert req.download_info.url.startswith("file://") |
| 436 | + assert isinstance(req.download_info.info, DirInfo) |
| 437 | + assert req.download_info.info.editable |
| 438 | + |
| 439 | + @pytest.mark.network |
| 440 | + def test_download_info_vcs(self) -> None: |
| 441 | + """Test that download_info is set for requirements from git.""" |
| 442 | + finder = make_test_finder() |
| 443 | + with self._basic_resolver(finder) as resolver: |
| 444 | + ireq = get_processed_req_from_line( |
| 445 | + "pip-test-package @ git+https://github.com/pypa/pip-test-package" |
| 446 | + ) |
| 447 | + reqset = resolver.resolve([ireq], True) |
| 448 | + assert len(reqset.all_requirements) == 1 |
| 449 | + req = reqset.all_requirements[0] |
| 450 | + assert req.download_info |
| 451 | + assert isinstance(req.download_info.info, VcsInfo) |
| 452 | + assert req.download_info.url == "https://github.com/pypa/pip-test-package" |
| 453 | + assert req.download_info.info.vcs == "git" |
| 454 | + |
345 | 455 |
|
346 | 456 | class TestInstallRequirement:
|
347 | 457 | def setup(self) -> None:
|
|
0 commit comments