1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
import operator
from pip._internal.models.link import Link
from pip._internal.req.req_install import InstallRequirement
from pip._internal.resolution.resolvelib.factory import Factory
from pip._internal.models.candidate import InstallationCandidate
from pip._internal.resolution.resolvelib.provider import PipProvider
from pip._internal.resolution.resolvelib.requirements import SpecifierRequirement
from pip._vendor.packaging.requirements import Requirement
from pip._vendor.resolvelib.structs import build_iter_view, IteratorMapping
from pip._vendor.resolvelib.resolvers import Criterion, RequirementInformation
def test_provider_known_depths(factory: Factory):
provider = PipProvider(
factory=factory,
constraints={},
ignore_dependencies=False,
upgrade_strategy="to-satisfy-only",
user_requested={"my-package": 0},
)
# Setup all "my-package" objects required to call get_preference
my_package_install_requirement = InstallRequirement(
Requirement('my-package'),
'-r .\\reqs.txt (line 1)'
)
my_package_matches = provider.find_matches(
'my-package',
IteratorMapping({}, operator.methodcaller('iter_requirement'), {'my-package': [SpecifierRequirement(my_package_install_requirement)]}),
IteratorMapping({}, operator.attrgetter('incompatibilities'), {'my-package': []})
)
my_package_matches_iterview = build_iter_view(my_package_matches)
my_package_requirement_information = RequirementInformation(requirement=SpecifierRequirement(my_package_install_requirement), parent=None)
my_package_criterion = Criterion(my_package_matches_iterview, [my_package_requirement_information], [])
provider.get_preference(
identifier="my-package",
resolutions={},
candidates={},
information=IteratorMapping({'my-package': my_package_criterion}, operator.attrgetter('information')),
)
assert provider._known_depths == {"my-package": 1.0}
my_package_candidate = InstallationCandidate(
"my-package",
"1.0",
Link("https://my-package.com"),
)
# Setup all "my-transitive-package", a package dependent on "my-package", objects required to call get_preference
my_transative_package_install_requirement = InstallRequirement(
Requirement('my-package'),
'-r .\\reqs.txt (line 1)'
)
my_transative_package_matches = provider.find_matches(
'my-transitive-package',
IteratorMapping({}, operator.methodcaller('iter_requirement'), {'my-transitive-package': [SpecifierRequirement(my_transative_package_install_requirement)]}),
IteratorMapping({}, operator.attrgetter('incompatibilities'), {'my-transitive-package': []})
)
my_transative_package_matches_iterview = build_iter_view(my_transative_package_matches)
my_transative_package_requirement_information = RequirementInformation(requirement=SpecifierRequirement(my_transative_package_install_requirement), parent=my_package_candidate)
my_transative_package_criterion = Criterion(my_transative_package_matches_iterview, [my_transative_package_requirement_information], [])
provider.get_preference(
identifier="my-transitive-package",
resolutions={},
candidates={},
information=IteratorMapping(
{'my-package': my_package_criterion, "my-transitive-package": my_transative_package_criterion},
operator.attrgetter('information')
)
)
assert provider._known_depths == {"my-transitive-package": 2.0, "my-package": 1.0}
|