mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
from typing import Iterator
|
|
|
|
from pip._vendor.packaging.version import Version
|
|
from pytest import fixture, mark, raises
|
|
|
|
from pip._internal.exceptions import InvalidWheel
|
|
from pip._internal.network.lazy_wheel import (
|
|
HTTPRangeRequestUnsupported,
|
|
dist_from_wheel_url,
|
|
)
|
|
from pip._internal.network.session import PipSession
|
|
from tests.lib import TestData
|
|
from tests.lib.server import MockServer, file_response
|
|
|
|
MYPY_0_782_WHL = (
|
|
"https://files.pythonhosted.org/packages/9d/65/"
|
|
"b96e844150ce18b9892b155b780248955ded13a2581d31872e7daa90a503/"
|
|
"mypy-0.782-py3-none-any.whl"
|
|
)
|
|
MYPY_0_782_REQS = {
|
|
"typed-ast<1.5.0,>=1.4.0",
|
|
"typing-extensions>=3.7.4",
|
|
"mypy-extensions<0.5.0,>=0.4.3",
|
|
'psutil>=4.0; extra == "dmypy"',
|
|
}
|
|
|
|
|
|
@fixture
|
|
def session() -> PipSession:
|
|
return PipSession()
|
|
|
|
|
|
@fixture
|
|
def mypy_whl_no_range(mock_server: MockServer, shared_data: TestData) -> Iterator[str]:
|
|
mypy_whl = shared_data.packages / "mypy-0.782-py3-none-any.whl"
|
|
mock_server.set_responses([file_response(mypy_whl)])
|
|
mock_server.start()
|
|
base_address = f"http://{mock_server.host}:{mock_server.port}"
|
|
yield "{}/{}".format(base_address, "mypy-0.782-py3-none-any.whl")
|
|
mock_server.stop()
|
|
|
|
|
|
@mark.network
|
|
def test_dist_from_wheel_url(session: PipSession) -> None:
|
|
"""Test if the acquired distribution contain correct information."""
|
|
dist = dist_from_wheel_url("mypy", MYPY_0_782_WHL, session)
|
|
assert dist.canonical_name == "mypy"
|
|
assert dist.version == Version("0.782")
|
|
extras = list(dist.iter_provided_extras())
|
|
assert extras == ["dmypy"]
|
|
assert {str(d) for d in dist.iter_dependencies(extras)} == MYPY_0_782_REQS
|
|
|
|
|
|
def test_dist_from_wheel_url_no_range(
|
|
session: PipSession, mypy_whl_no_range: str
|
|
) -> None:
|
|
"""Test handling when HTTP range requests are not supported."""
|
|
with raises(HTTPRangeRequestUnsupported):
|
|
dist_from_wheel_url("mypy", mypy_whl_no_range, session)
|
|
|
|
|
|
@mark.network
|
|
def test_dist_from_wheel_url_not_zip(session: PipSession) -> None:
|
|
"""Test handling with the given URL does not point to a ZIP."""
|
|
with raises(InvalidWheel):
|
|
dist_from_wheel_url("python", "https://www.python.org/", session)
|