Esempio n. 1
0
    def _get_dependencies_from_json(self,
                                    candidate: Candidate) -> CandidateInfo:
        if not candidate.name or not candidate.version:
            # Only look for json api for named requirements.
            raise CandidateInfoNotFound(candidate)
        sources = self.get_filtered_sources(candidate.req)
        url_prefixes = [
            proc_url[:-7]  # Strip "/simple".
            for proc_url in (raw_url.rstrip("/")
                             for raw_url in (source.get("url", "")
                                             for source in sources))
            if proc_url.endswith("/simple")
        ]
        with self.environment.get_finder(sources) as finder:
            session = finder.session
            for prefix in url_prefixes:
                json_url = f"{prefix}/pypi/{candidate.name}/{candidate.version}/json"
                resp = session.get(json_url)
                if not resp.ok:
                    continue

                info = resp.json()["info"]

                requires_python = info["requires_python"] or ""
                summary = info["summary"] or ""
                try:
                    requirement_lines = info["requires_dist"] or []
                except KeyError:
                    requirement_lines = info["requires"] or []
                requirements = filter_requirements_with_extras(
                    requirement_lines, candidate.req.extras or ())
                return requirements, requires_python, summary
        raise CandidateInfoNotFound(candidate)
Esempio n. 2
0
 def _get_dependencies_from_cache(self, candidate: Candidate) -> CandidateInfo:
     try:
         result = self._candidate_info_cache.get(candidate)
     except CorruptedCacheError:
         self._candidate_info_cache.clear()
         raise CandidateInfoNotFound(candidate)
     except KeyError:
         raise CandidateInfoNotFound(candidate)
     return result
Esempio n. 3
0
 def _get_dependencies_from_lockfile(self, candidate: Candidate) -> CandidateInfo:
     if candidate.dependencies is None:
         raise CandidateInfoNotFound(candidate)
     return (
         [dep.as_line() for dep in candidate.dependencies],
         candidate.requires_python,
         candidate.summary,
     )
Esempio n. 4
0
 def _get_dependencies_from_fixture(
         self, candidate: Candidate) -> Tuple[List[str], str, str]:
     try:
         pypi_data = self._pypi_data[candidate.req.key][candidate.version]
     except KeyError:
         raise CandidateInfoNotFound(candidate)
     deps = pypi_data.get("dependencies", [])
     for extra in candidate.req.extras or ():
         deps.extend(pypi_data.get("extras_require", {}).get(extra, []))
     return deps, pypi_data.get("requires_python", ""), ""
Esempio n. 5
0
 def _get_dependencies_from_fixture(
     self, candidate: Candidate
 ) -> Tuple[List[str], str, str]:
     try:
         pypi_data = self._pypi_data[candidate.req.key][candidate.version]
     except KeyError:
         raise CandidateInfoNotFound(candidate)
     deps = pypi_data.get("dependencies", [])
     deps = filter_requirements_with_extras(deps, candidate.req.extras or ())
     return deps, pypi_data.get("requires_python", ""), ""