1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00

Upgrade resolvelib to 0.7.1

This commit is contained in:
Tzu-ping Chung 2021-06-20 06:06:37 +08:00
parent 7c3abccd22
commit 8316051299
4 changed files with 29 additions and 18 deletions

View file

@ -11,7 +11,7 @@ __all__ = [
"ResolutionTooDeep",
]
__version__ = "0.7.0"
__version__ = "0.7.1"
from .providers import AbstractProvider, AbstractResolver

View file

@ -134,11 +134,11 @@ class Resolution(object):
)
self._states.append(state)
def _merge_into_criterion(self, requirement, parent):
def _add_to_criteria(self, criteria, requirement, parent):
self._r.adding_requirement(requirement=requirement, parent=parent)
identifier = self._p.identify(requirement_or_candidate=requirement)
criterion = self.state.criteria.get(identifier)
criterion = criteria.get(identifier)
if criterion:
incompatibilities = list(criterion.incompatibilities)
else:
@ -147,12 +147,12 @@ class Resolution(object):
matches = self._p.find_matches(
identifier=identifier,
requirements=IteratorMapping(
self.state.criteria,
criteria,
operator.methodcaller("iter_requirement"),
{identifier: [requirement]},
),
incompatibilities=IteratorMapping(
self.state.criteria,
criteria,
operator.attrgetter("incompatibilities"),
{identifier: incompatibilities},
),
@ -171,7 +171,7 @@ class Resolution(object):
)
if not criterion.candidates:
raise RequirementsConflicted(criterion)
return identifier, criterion
criteria[identifier] = criterion
def _get_preference(self, name):
return self._p.get_preference(
@ -197,11 +197,10 @@ class Resolution(object):
for r in criterion.iter_requirement()
)
def _get_criteria_to_update(self, candidate):
criteria = {}
for r in self._p.get_dependencies(candidate=candidate):
name, crit = self._merge_into_criterion(r, parent=candidate)
criteria[name] = crit
def _get_updated_criteria(self, candidate):
criteria = self.state.criteria.copy()
for requirement in self._p.get_dependencies(candidate=candidate):
self._add_to_criteria(criteria, requirement, parent=candidate)
return criteria
def _attempt_to_pin_criterion(self, name):
@ -210,7 +209,7 @@ class Resolution(object):
causes = []
for candidate in criterion.candidates:
try:
criteria = self._get_criteria_to_update(candidate)
criteria = self._get_updated_criteria(candidate)
except RequirementsConflicted as e:
causes.append(e.criterion)
continue
@ -226,12 +225,13 @@ class Resolution(object):
if not satisfied:
raise InconsistentCandidate(candidate, criterion)
self._r.pinning(candidate=candidate)
self.state.criteria.update(criteria)
# Put newly-pinned candidate at the end. This is essential because
# backtracking looks at this mapping to get the last pin.
self._r.pinning(candidate=candidate)
self.state.mapping.pop(name, None)
self.state.mapping[name] = candidate
self.state.criteria.update(criteria)
return []
@ -338,10 +338,9 @@ class Resolution(object):
self._states = [State(mapping=collections.OrderedDict(), criteria={})]
for r in requirements:
try:
name, crit = self._merge_into_criterion(r, parent=None)
self._add_to_criteria(self.state.criteria, r, parent=None)
except RequirementsConflicted as e:
raise ResolutionImpossible(e.criterion.information)
self.state.criteria[name] = crit
# The root state is saved as a sentinel so the first ever pin can have
# something to backtrack to if it fails. The root state is basically

View file

@ -75,6 +75,18 @@ class IteratorMapping(collections_abc.Mapping):
self._accessor = accessor
self._appends = appends or {}
def __repr__(self):
return "IteratorMapping({!r}, {!r}, {!r})".format(
self._mapping,
self._accessor,
self._appends,
)
def __bool__(self):
return bool(self._mapping or self._appends)
__nonzero__ = __bool__ # XXX: Python 2.
def __contains__(self, key):
return key in self._mapping or key in self._appends
@ -90,7 +102,7 @@ class IteratorMapping(collections_abc.Mapping):
return itertools.chain(self._mapping, more)
def __len__(self):
more = len(k for k in self._appends if k not in self._mapping)
more = sum(1 for k in self._appends if k not in self._mapping)
return len(self._mapping) + more

View file

@ -14,7 +14,7 @@ requests==2.25.1
chardet==4.0.0
idna==3.1
urllib3==1.26.5
resolvelib==0.7.0
resolvelib==0.7.1
setuptools==44.0.0
six==1.16.0
tenacity==7.0.0