.z %prog [options] Tc|jjddddtjd|jj d|jy)Nz-iz--indexindexURLz3Base URL of Python Package Index (default %default))destmetavardefaulthelpr)cmd_opts add_optionrpypi_urlparserinsert_option_group)selfs r add_optionszSearchCommand.add_options*sI    MMF !  ''4==9rc|s td|}|j||}t|}d}tjj rt jd}t|||rtStS)Nz)Missing required argument (search query).r)terminal_width) r searchtransform_hitssysstdoutisattyshutilget_terminal_size print_resultsr r )r/optionsargsquery pypi_hitshitsr2s r runzSearchCommand.run6spJK KKKw/ i( ::   #557:Nd>: Nrc|j}|j|}t||}tjj ||} |j ||dd}t|tsJ|S#tjj$r,}d|jd|j} t| d}~wwxYw)N)rrorzXMLRPC request failed [code: z] ) r$get_default_sessionrxmlrpcclient ServerProxyr3Fault faultCode faultStringr isinstancelist) r/r=r; index_urlsession transportpypir?faultmessages r r3zSearchCommand.searchFsMM **73&y': }}((I> (;;%@$GD $%%% }}"" (//@EDUDUCVW w' '  (s A44B='B88B=N)returnNone)r;rr<rrRint)r=rr;rrRlist[dict[str, str]]) rrr__doc__usageignore_require_venvr0r@r3rrr r"r"#s!J !E : rr"ct}|D]b}|d}|d}|d}||jvr |||gd||</||dj||t||dk(s[|||d<dt |j 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_versionrKvalues)r?packageshitrrrZs r r4r4Xs +6-H46{i.i. x}} &"$IHTN TN: & - -g 6/(4.*DEE,3y)!4$ ! ""rc|~t5|j|k(rtd|jnDtd|jt|jr td|n td|dddyy#1swYyxYw)NzINSTALLED: %s (latest)z INSTALLED: %sz=LATEST: %s (pre-release; install with `pip install --pre`)z LATEST: %s)rrZr parse_versionpre)latestdists r print_dist_installation_inforfts  \ :||v%5t||D_dll; (,, 5 !&9 : : : :s A+BB c8t}|j|S)N)r get_distribution)renvs r get_installed_distributionrjs ! #C    %%rc|sy|Nt|Dcgc]6}t|dtt|jddgz8c}dz}|D]}|d}|dxsd}t|jddg}|=||z dz }|dkDr0t j ||}d d |d zzzj |}|d |d } | |dd|} t| t|} t|| ycc}w#t$rYwxYw)Nrr-r   z ()z - ) maxlenr]gettextwrapwrapjoinrrjrfUnicodeEncodeError) r?name_column_widthr2r`rrrd target_width summary_lines name_latestlineres r r:r:sZ   $F $s?377:PSu;U+V'WW     6{i.&B cU!;<  %),==ALb ( g| D #):Q)>"??EEmTb* 0112#gY?   -d3D ( 6!2"   s;C;"D D  D c$t|tS)N)key)rurb)rs r r]r]s x] ++r)r?rUrRlist[TransformedHit])rdrreBaseDistribution | NonerRrS)rrrRr)NN)r?rr| int | Noner2rrRrS)rrrRr)0 __future__rloggingr8r5rx xmlrpc.clientrD collectionsroptparsertypingrpip._vendor.packaging.versionrrbpip._internal.cli.base_commandrpip._internal.cli.req_commandr pip._internal.cli.status_codesr r pip._internal.exceptionsr pip._internal.metadatar pip._internal.metadata.baserpip._internal.models.indexrpip._internal.network.xmlrpcrpip._internal.utils.loggingrpip._internal.utils.miscrr getLoggerrloggerr"r4rfrjr:r]rrr rs" #@2=D1:8+;21Y   8 $2G02j#8:"&%)!%$ $!$$ $N,r