3 igA@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&ej'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@seZdZUeeeedS)TransformedHitN)__name__ __module__ __qualname__strnamesummaryrversionsrr.z %prog [options] TN)returncCs.|jjddddtjdd|jjd|jdS)Nz-iz--indexindexURLz3Base URL of Python Package Index (default %default))destmetavardefaulthelpr)cmd_opts add_optionrpypi_urlparserinsert_option_group)selfrrr add_options)szSearchCommand.add_options)optionsargsrcCsV|s td|}|j||}t|}d}tjjr>tjd}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.query pypi_hitshitsr/rrrrun5s    zSearchCommand.run)r8r-rc Cs|j}|j|}t||}tjj||}y|j||dd}Wn@tjjk r~}z dj|j |j d} t | WYdd}~XnXt |t st|S)N)rrorz-XMLRPC request failed [code: {code}] {string})codestring)r Zget_default_sessionrxmlrpcclient ServerProxyr0Faultformat faultCode faultStringr isinstancelistAssertionError) r+r8r- index_urlsession transportpypir:faultmessagerrrr0Es   zSearchCommand.search)rrr__doc__usageZignore_require_venvr,rrrintr;rr0rrrrr"s  r)r:rcCst}xv|D]n}|d}|d}|d}||jkrH|||gd||<q ||dj||t||dkr |||d<q Wt|jS)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_versionrGvalues)r:packageshitrrrRrrrr1Xs  r1)rlatestrc Csrt}|j|}|dk rntJ|j|kr8td|jn,td|jt|jrZtd|n td|WdQRXdS)NzINSTALLED: %s (latest)z INSTALLED: %sz=LATEST: %s (pre-release; install with `pip install --pre`)z LATEST: %s)rget_distributionrrRr parse_versionpre)rrYenvdistrrrprint_dist_installation_infots    r_)r:name_column_widthr/rc Cs|sdS|dkr&tdd|Dd}x|D]}|d}|dpBd}t|jddg}|dk r||d }|d krtj||}d d |d j|}|d|d} | |d|} yt| t||Wq,tk rYq,Xq,WdS)NcSs.g|]&}t|dtt|jddgqS)rr-)lenrUget).0rXrrr sz!print_results..rrrra   z ()z - ) maxrUrctextwrapwrapjoinrr_UnicodeEncodeError) r:r`r/rXrrrY target_widthZ summary_linesZ name_latestlinerrrr7s.    r7)rrcCs t|tdS)N)key)rnr[)rrrrrUsrU)NN)1loggingr5r2roZ xmlrpc.clientr? collectionsroptparserZtypingrrrrZpip._vendor.packaging.versionrr[Zpip._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.miscrrr getLoggerrloggerrrr1r_rQr7rUrrrrs8             6 "