
§|j  ã               @   sÅ   d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l m Z d  d l m	 Z	 m
 Z
 d  d l m Z d  d l m Z e j e ƒ Z Gd d	 „  d	 e ƒ Z d
 d „  Z d d d d „ Z d S)é    )Úabsolute_import)Ú
FeedParserN)ÚCommand)ÚSUCCESSÚERROR)Úpkg_resources)Úcanonicalize_namec                   sF   e  Z d  Z d Z d Z d Z d Z ‡  f d d †  Z d d „  Z ‡  S)	ÚShowCommandz6Show information about one or more installed packages.Úshowz$
      %prog [options] <package> ...z*Show information about installed packages.c                s^   t  t |  ƒ j | | Ž  |  j j d d d d d d d d d	 d
 ƒ|  j j d |  j ƒ d  S)Nz-fz--filesÚdestÚfilesÚactionÚ
store_trueÚdefaultFÚhelpz7Show the full list of installed files for each package.r   )Úsuperr	   Ú__init__Úcmd_optsÚ
add_optionÚparserÚinsert_option_group)ÚselfÚargsÚkw)Ú	__class__© ú0/tmp/pip-build-5c7ija6t/pip/pip/commands/show.pyr      s    		zShowCommand.__init__c             C   sO   | s t  j d ƒ t S| } t | ƒ } t | d | j d | j ƒsK t St S)Nz.ERROR: Please provide a package name or names.Ú
list_filesÚverbose)ÚloggerÚwarningr   Úsearch_packages_infoÚprint_resultsr   r   r   )r   Úoptionsr   ÚqueryÚresultsr   r   r   Úrun"   s    zShowCommand.run)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚusageÚsummaryr   r&   r   r   )r   r   r	      s   r	   c          
   #   sÔ  i  ‰ x$ t  j D] } | ˆ t | j ƒ <q Wd d „  |  Dƒ } x�‡ f d d †  | Dƒ D]r‰  d ˆ  j d ˆ  j d ˆ  j d d d „  ˆ  j ƒ  Dƒ i } d	 } d	 } t ˆ  t  j ƒ r<ˆ  j	 d
 ƒ rˆ  j
 d
 ƒ } d d „  | Dƒ } ‡  f d d †  | Dƒ } ‡  f d d †  | Dƒ } ˆ  j	 d ƒ rªˆ  j d ƒ } nn ˆ  j	 d ƒ rŒˆ  j
 d ƒ } ‡  f d d †  | Dƒ } ‡  f d d †  | Dƒ } ˆ  j	 d ƒ rªˆ  j d ƒ } ˆ  j	 d ƒ rÒˆ  j
 d ƒ } | | d <ˆ  j	 d ƒ rx4 ˆ  j
 d ƒ D]# }	 |	 j ƒ  rñ|	 j ƒ  | d <PqñWt ƒ  }
 |
 j | ƒ |
 j ƒ  } x! d  D] } | j | ƒ | | <qAWg  } x@ | j ƒ  D]2 }	 |	 j d ƒ rq| j |	 t d ƒ d	 … ƒ qqW| | d <| rÇt | ƒ | d <| VqZ Wd	 S)!zî
    Gather details from installed distributions. Print distribution name,
    version, location, and installed files. Installed files requires a
    pip generated 'installed-files.txt' in the distributions '.egg-info'
    directory.
    c             S   s   g  |  ] } t  | ƒ ‘ q Sr   )r   )Ú.0r+   r   r   r   ú
<listcomp>:   s   	 z(search_packages_info.<locals>.<listcomp>c                s&   g  |  ] } | ˆ  k r ˆ  | ‘ q Sr   r   )r.   Úpkg)Ú	installedr   r   r/   <   s   	 r+   ÚversionÚlocationÚrequiresc             S   s   g  |  ] } | j  ‘ q Sr   )Úproject_name)r.   Údepr   r   r   r/   A   s   	 NÚRECORDc             S   s#   g  |  ] } | j  d  ƒ d ‘ q S)ú,r   )Úsplit)r.   Úlr   r   r   r/   I   s   	 c                s(   g  |  ] } t  j j ˆ  j | ƒ ‘ q Sr   )ÚosÚpathÚjoinr3   )r.   Úp)Údistr   r   r/   J   s   	 c                s(   g  |  ] } t  j j | ˆ  j ƒ ‘ q Sr   )r;   r<   Úrelpathr3   )r.   r>   )r?   r   r   r/   K   s   	 ÚMETADATAzinstalled-files.txtc                s(   g  |  ] } t  j j ˆ  j | ƒ ‘ q Sr   )r;   r<   r=   Úegg_info)r.   r>   )r?   r   r   r/   S   s   	 c                s(   g  |  ] } t  j j | ˆ  j ƒ ‘ q Sr   )r;   r<   r@   r3   )r.   r>   )r?   r   r   r/   T   s   	 zPKG-INFOzentry_points.txtÚentry_pointsÚ	INSTALLERÚ	installerúmetadata-versionr-   ú	home-pageÚauthorúauthor-emailÚlicensezClassifier: Úclassifiersr   )rF   r-   rG   rH   rI   rJ   )r   Úworking_setr   r5   r2   r3   r4   Ú
isinstanceÚDistInfoDistributionÚhas_metadataÚget_metadata_linesÚget_metadataÚstripr   ÚfeedÚcloseÚgetÚ
splitlinesÚ
startswithÚappendÚlenÚsorted)r$   r>   Úquery_namesÚpackageÚ	file_listÚmetadataÚlinesÚpathsrC   ÚlineÚfeed_parserÚpkg_info_dictÚkeyrK   r   )r?   r1   r   r!   /   s^     			
	
!
r!   Fc       	      C   sb  d } xUt  |  ƒ D]G\ } } d } | d k r> t j d ƒ t j d | j d d ƒ ƒ t j d | j d	 d ƒ ƒ t j d
 | j d d ƒ ƒ t j d | j d d ƒ ƒ t j d | j d d ƒ ƒ t j d | j d d ƒ ƒ t j d | j d d ƒ ƒ t j d | j d d ƒ ƒ t j d d j | j d g  ƒ ƒ ƒ | rût j d | j d d ƒ ƒ t j d | j d d ƒ ƒ t j d ƒ x* | j d g  ƒ D] } t j d | ƒ q¡Wt j d  ƒ x0 | j d! g  ƒ D] } t j d | j ƒ  ƒ qÛW| r t j d" ƒ x0 | j d# g  ƒ D] } t j d | j ƒ  ƒ q!Wd# | k r t j d$ ƒ q W| S)%zD
    Print the informations from installed distributions found.
    FTr   z---zName: %sr+   Ú zVersion: %sr2   zSummary: %sr-   zHome-page: %sz	home-pagez
Author: %srH   zAuthor-email: %szauthor-emailzLicense: %srJ   zLocation: %sr3   zRequires: %sz, r4   zMetadata-Version: %szmetadata-versionzInstaller: %srE   zClassifiers:rK   z  %szEntry-points:rC   zFiles:r   z!Cannot locate installed-files.txt)Ú	enumerater   ÚinforU   r=   rR   )	Údistributionsr   r   Úresults_printedÚir?   Ú
classifierÚentryra   r   r   r   r"   x   s>    %	r"   )Ú
__future__r   Úemail.parserr   Úloggingr;   Úpip.basecommandr   Úpip.status_codesr   r   Úpip._vendorr   Úpip._vendor.packaging.utilsr   Ú	getLoggerr'   r   r	   r!   r"   r   r   r   r   Ú<module>   s   I