Exemplo n.º 1
0
 def get_dependencies(
     self, candidate: Candidate
 ) -> tuple[list[Requirement], PySpecSet, str]:
     """Get (dependencies, python_specifier, summary) of the candidate."""
     requires_python, summary = "", ""
     requirements: list[str] = []
     last_ext_info = None
     for getter in self.dependency_generators():
         try:
             requirements, requires_python, summary = getter(candidate)
         except CandidateInfoNotFound:
             last_ext_info = sys.exc_info()
             continue
         break
     else:
         if last_ext_info is not None:
             raise last_ext_info[1].with_traceback(last_ext_info[2])  # type: ignore
     reqs = [parse_requirement(line) for line in requirements]
     if candidate.req.extras:
         # XXX: If the requirement has extras, add the original candidate
         # (without extras) as its dependency. This ensures the same package with
         # different extras resolve to the same version.
         self_req = dataclasses.replace(candidate.req, extras=None, marker=None)
         reqs.append(self_req)
     # Store the metadata on the candidate for caching
     candidate.requires_python = requires_python
     candidate.summary = summary
     return reqs, PySpecSet(requires_python), summary
Exemplo n.º 2
0
 def get_locked_candidates(
     self, section: Optional[str] = None
 ) -> Dict[str, Candidate]:
     if not self.lockfile_file.is_file():
         return {}
     section = section or "default"
     result = {}
     for package in [dict(p) for p in self.lockfile.get("package", [])]:
         if section != "__all__" and section not in package["sections"]:
             continue
         version = package.get("version")
         if version:
             package["version"] = f"=={version}"
         package_name = package.pop("name")
         summary = package.pop("summary", None)
         dependencies = [
             Requirement.from_req_dict(k, v)
             for k, v in package.pop("dependencies", {}).items()
         ]
         req = Requirement.from_req_dict(package_name, dict(package))
         can = Candidate(req, self.environment, name=package_name, version=version)
         can.marker = req.marker
         can.requires_python = str(req.requires_python)
         can.dependencies = dependencies
         can.summary = summary
         can.hashes = {
             item["file"]: item["hash"]
             for item in self.lockfile["metadata"].get(
                 f"{package_name} {version}", []
             )
         } or None
         result[identify(req)] = can
     if section in ("default", "__all__") and self.meta.name:
         result[safe_name(self.meta.name).lower()] = self.make_self_candidate(True)
     return result