a [fA@s|ddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlmZddlmZddlmZmZdd lmZdd lmZdd lmZdd lm Z dd l!m"Z"ddl#m$Z$e rddl m%Z%Gddde%Z&e'e(Z)GdddeeZ*e e e+e+fe ddddZ,e+e+ddddZ-d e dee.ee.ddddZ/e e+e+dddZ0dS)!N) OrderedDict)Values) TYPE_CHECKINGDictListOptional)parse)Command)SessionCommandMixin)NO_MATCHES_FOUNDSUCCESS) CommandError)get_default_environment)PyPI)PipXmlrpcTransport) indent_log) write_output) TypedDictc@s*eZdZUeed<eed<eeed<dS)TransformedHitnamesummaryversionsN)__name__ __module__ __qualname__str__annotations__rrrA/usr/lib/python3.9/site-packages/pip/_internal/commands/search.pyrs rc@s^eZdZdZdZdZddddZeee e dd d Z ee eee e e fd d d Z dS) SearchCommandz@Search for PyPI packages whose name or summary contains .z %prog [options] TN)returncCs.|jjddddtjdd|jd|jdS)Nz-iz--indexindexZURLz3Base URL of Python Package Index (default %default))destmetavardefaulthelpr)Zcmd_optsZ add_optionrZpypi_urlparserZinsert_option_group)selfrrr add_options)s zSearchCommand.add_options)optionsargsr cCsV|s td|}|||}t|}d}tjr>td}t||d|rRt St S)Nz)Missing required argument (search query).r)terminal_width) r searchtransform_hitssysstdoutisattyshutilget_terminal_size print_resultsr r )r'r)r*queryZ pypi_hitshitsr+rrrrun5s    zSearchCommand.run)r4r)r c Cs|j}||}t||}tj||}z|||dd}WnBtjjy}z&dj|j |j d} t | WYd}~n d}~00t |t sJ|S)N)rrorz-XMLRPC request failed [code: {code}] {string})codestring)r!Zget_default_sessionrxmlrpcZclientZ ServerProxyr,ZFaultformatZ faultCodeZ faultStringr isinstancelist) r'r4r)Z index_urlZsessionZ transportZpypir5Zfaultmessagerrrr,Es  zSearchCommand.search)rrr__doc__usageZignore_require_venvr(rrrintr6rr,rrrrr"s  r)r5r cCst}|D]n}|d}|d}|d}||vrF|||gd||<q ||d||t||dkr |||d<q t|S)z The list from pypi is really a list of versions. We want a list of packages with the list of versions stored inline. This converts the list from pypi into one we can use. rrversion)rrrr)rkeysappendhighest_versionr=values)r5ZpackageshitrrrBrrrr-Xs  r-)rlatestr cCst}||}|durtT|j|kr8td|jn,td|jt|jrZtd|n td|Wdn1sx0YdS)NzINSTALLED: %s (latest)z INSTALLED: %sz=LATEST: %s (pre-release; install with `pip install --pre`)z LATEST: %s)rZget_distributionrrBr parse_versionZpre)rrHenvZdistrrrprint_dist_installation_infots    rK)r5name_column_widthr+r c Cs|sdS|dur&tdd|Dd}|D]}|d}|dp@d}t|ddg}|dur||d }|d krt||}d d |d |}|d|d} | |d|} zt| t||Wq*tyYq*0q*dS)Nc Ss.g|]&}t|dtt|ddgqS)rr-)lenrEget).0rGrrr sz!print_results..rrrrM   z ()z - ) maxrErOtextwrapwrapjoinrrKUnicodeEncodeError) r5rLr+rGrrrHZ target_widthZ summary_linesZ name_latestlinerrrr3s6     r3)rr cCs t|tdS)N)key)rZrI)rrrrrEsrE)NN)1Zloggingr1r.r[Z xmlrpc.clientr: collectionsrZoptparsertypingrrrrZpip._vendor.packaging.versionrrIZpip._internal.cli.base_commandr Zpip._internal.cli.req_commandr Zpip._internal.cli.status_codesr r Zpip._internal.exceptionsr Zpip._internal.metadatarZpip._internal.models.indexrZpip._internal.network.xmlrpcrZpip._internal.utils.loggingrZpip._internal.utils.miscrrrZ getLoggerrloggerrrr-rKrAr3rErrrrsB             6  &