def find_matches( self, requirement: Requirement, requires_python: PySpecSet = PySpecSet(), allow_prereleases: Optional[bool] = None, allow_all: bool = False, ) -> List[Candidate]: """Find matching candidates of a requirement. :param requirement: the given requirement. :param requires_python: the Python version constraint. :param allow_prereleases: whether allow prerelease versions, or let us determine if not given. If no non-prerelease is available, prereleases will be used. :param allow_all: whether allow all wheels. :returns: a list of candidates. """ if requirement.is_named: return self._find_named_matches( requirement, requires_python, allow_prereleases, allow_all ) else: # Fetch metadata so that resolver can know the candidate's name. can = Candidate(requirement, self.environment) can.get_metadata() return [can]
def find_matches(self, requirements: List[Requirement]) -> Iterable[Candidate]: file_req = next((req for req in requirements if not req.is_named), None) if file_req: can = Candidate(file_req, self.repository.environment) can.get_metadata() candidates = [can] else: candidates = self.repository.find_candidates( requirements[0], self.requires_python, self.allow_prereleases ) return [ can for can in candidates if all(self.is_satisfied_by(r, can) for r in requirements) ]
def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool: if not requirement.is_named: return not candidate.req.is_named and candidate.req.url == requirement.url if not candidate.version: candidate.get_metadata() if getattr(candidate, "_preferred", False) and not candidate._requires_python: candidate.requires_python = str( self.repository.get_dependencies(candidate)[1] ) allow_prereleases = requirement.allow_prereleases if allow_prereleases is None: allow_prereleases = self.allow_prereleases if allow_prereleases is None: # if not specified, should allow what `find_candidates()` returns allow_prereleases = True return requirement.specifier.contains( candidate.version, allow_prereleases ) and self.requires_python.is_subset(candidate.requires_python)
def find_matches( self, identifier: str, requirements: Mapping[str, Iterator[Requirement]], incompatibilities: Mapping[str, Iterator[Candidate]], ) -> Iterable[Candidate]: reqs = list(requirements[identifier]) file_req = next((req for req in reqs if not req.is_named), None) incompat = list(incompatibilities[identifier]) if file_req: can = Candidate(file_req, self.repository.environment) can.get_metadata() candidates = [can] else: candidates = self.repository.find_candidates( reqs[0], self.requires_python, self.allow_prereleases, ) return [ can for can in candidates if all(self.is_satisfied_by(r, can) for r in reqs) and can not in incompat ]
def install(self, candidate: Candidate) -> None: candidate.get_metadata() if candidate.req.editable: self.install_editable(candidate.ireq) else: self.install_wheel(candidate.wheel)
def install(self, candidate: Candidate) -> None: candidate.get_metadata(allow_all_wheels=False, raising=True) if candidate.req.editable: self.install_editable(candidate.ireq) else: self.install_wheel(candidate.wheel)