Ejemplo n.º 1
0
    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]
Ejemplo n.º 2
0
 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)
     ]
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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
     ]
Ejemplo n.º 5
0
 def install(self, candidate: Candidate) -> None:
     candidate.get_metadata()
     if candidate.req.editable:
         self.install_editable(candidate.ireq)
     else:
         self.install_wheel(candidate.wheel)
Ejemplo n.º 6
0
 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)