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)
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
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, )
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", ""), ""
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", ""), ""