6from collections
import OrderedDict
7from optparse
import Values
8from typing
import TYPE_CHECKING, Dict, List, Optional
23 from typing
import TypedDict
35 """Search for PyPI packages whose name or summary contains <query>."""
38 %prog [options] <query>"""
39 ignore_require_venv =
True
48 help=
"Base URL of Python Package Index (default %default)",
53 def run(self, options: Values, args: List[str]) -> int:
55 raise CommandError(
"Missing required argument (search query).")
57 pypi_hits = self.
search(query, options)
67 return NO_MATCHES_FOUND
69 def search(self, query: List[str], options: Values) -> List[Dict[str, str]]:
77 hits =
pypi.search({
"name": query,
"summary": query},
"or")
79 message =
"XMLRPC request failed [code: {code}]\n{string}".format(
90 The list from pypi is really a list of versions. We want a list of
91 packages with the list of versions stored inline. This converts the
92 list from pypi into one we can use.
94 packages: Dict[str,
"TransformedHit"] = OrderedDict()
97 summary = hit[
"summary"]
98 version = hit[
"version"]
104 "versions": [version],
107 packages[name][
"versions"].append(version)
111 packages[name][
"summary"] = summary
116def print_dist_installation_info(name: str, latest: str) ->
None:
117 env = get_default_environment()
125 if parse_version(latest).pre:
127 "LATEST: %s (pre-release; install"
128 " with `pip install --pre`)",
132 write_output(
"LATEST: %s", latest)
136 hits: List[
"TransformedHit"],
137 name_column_width: Optional[int] =
None,
138 terminal_width: Optional[int] =
None,
142 if name_column_width
is None:
143 name_column_width = (
155 summary = hit[
"summary"]
or ""
157 if terminal_width
is not None:
158 target_width = terminal_width - name_column_width - 5
159 if target_width > 10:
162 summary = (
"\n" +
" " * (name_column_width + 3)).join(summary_lines)
164 name_latest = f
"{name} ({latest})"
165 line = f
"{name_latest:{name_column_width}} - {summary}"
168 print_dist_installation_info(name, latest)
169 except UnicodeEncodeError:
174 return max(versions, key=parse_version)
PipSession get_default_session(self, Values options)
List[Dict[str, str]] search(self, List[str] query, Values options)
int run(self, Values options, List[str] args)
str highest_version(List[str] versions)
None print_results(List["TransformedHit"] hits, Optional[int] name_column_width=None, Optional[int] terminal_width=None)
List["TransformedHit"] transform_hits(List[Dict[str, str]] hits)