U
    KQh  ã                   @   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 e¡ZG dd	„ d	eƒZd
d„ Zddd„ZdS )é    )Úabsolute_import)Ú
FeedParserN)ÚCommand)ÚSUCCESSÚERROR)Úpkg_resources©Úcanonicalize_namec                       s4   e Zd ZdZdZdZdZ‡ fdd„Zdd„ Z‡  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 | j d| j¡ d S )	Nz-fz--filesÚfilesÚ
store_trueFz7Show the full list of installed files for each package.)ÚdestÚactionÚdefaultÚhelpr   )Úsuperr
   Ú__init__Úcmd_optsÚ
add_optionÚparserÚinsert_option_group)ÚselfÚargsÚkw©Ú	__class__© ú0/tmp/pip-build-tlro1kwj/pip/pip/commands/show.pyr      s     ûzShowCommand.__init__c                 C   s8   |st  d¡ tS |}t|ƒ}t||j|jds4tS t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(   Ú__classcell__r   r   r   r   r
      s   r
   c                 #   s  i ‰t jD ]}|ˆt|jƒ< q
dd„ | D ƒ}‡fdd„|D ƒD ]Æ‰ ˆ jˆ jˆ jdd„ ˆ  ¡ D ƒdœ}d}d}tˆ t jƒrÖˆ  	d¡rÀˆ  
d¡}dd„ |D ƒ}‡ fd	d„|D ƒ}‡ fd
d„|D ƒ}ˆ  	d¡rÔˆ  d¡}nPˆ  	d¡rˆ  
d¡}‡ fdd„|D ƒ}‡ fdd„|D ƒ}ˆ  	d¡r&ˆ  d¡}ˆ  	d¡rDˆ  
d¡}||d< ˆ  	d¡r~ˆ  
d¡D ]"}	|	 ¡ rZ|	 ¡ |d<  q~qZtƒ }
|
 |¡ |
 ¡ }dD ]}| |¡||< qšg }| ¡ D ](}	|	 d¡r¼| |	tdƒd… ¡ q¼||d< |r t|ƒ|d< |V  q>d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S r   r   )Ú.0r-   r   r   r   Ú
<listcomp>:   s     z(search_packages_info.<locals>.<listcomp>c                    s   g | ]}|ˆ krˆ | ‘qS r   r   )r1   Úpkg)Ú	installedr   r   r2   <   s      c                 S   s   g | ]
}|j ‘qS r   )Úproject_name)r1   Údepr   r   r   r2   A   s     )r-   ÚversionÚlocationÚrequiresNÚRECORDc                 S   s   g | ]}|  d ¡d ‘qS )ú,r   )Úsplit)r1   Úlr   r   r   r2   I   s     c                    s   g | ]}t j ˆ j|¡‘qS r   )ÚosÚpathÚjoinr8   ©r1   Úp©Údistr   r   r2   J   s     c                    s   g | ]}t j |ˆ j¡‘qS r   ©r>   r?   Úrelpathr8   rA   rC   r   r   r2   K   s     ÚMETADATAzinstalled-files.txtc                    s   g | ]}t j ˆ j|¡‘qS r   )r>   r?   r@   Úegg_inforA   rC   r   r   r2   S   s     c                    s   g | ]}t j |ˆ j¡‘qS r   rE   rA   rC   r   r   r2   T   s     zPKG-INFOzentry_points.txtÚentry_pointsÚ	INSTALLERÚ	installer)úmetadata-versionr/   ú	home-pageÚauthorúauthor-emailÚlicensezClassifier: Úclassifiersr   )r   Úworking_setr	   r5   r7   r8   r9   Ú
isinstanceÚDistInfoDistributionÚhas_metadataÚget_metadata_linesÚget_metadataÚstripr   ÚfeedÚcloseÚgetÚ
splitlinesÚ
startswithÚappendÚlenÚsorted)r&   rB   Úquery_namesÚpackageÚ	file_listÚmetadataÚlinesÚpathsrI   ÚlineÚfeed_parserÚpkg_info_dictÚkeyrQ   r   )rD   r4   r   r#   /   s^    
ü








r#   Fc           	   
   C   s¶  d}t | ƒD ]¢\}}d}|dkr,t d¡ t d| dd¡¡ t d| d	d¡¡ t d
| dd¡¡ t d| dd¡¡ t d| dd¡¡ t d| dd¡¡ t d| dd¡¡ t d| dd¡¡ t dd | dg ¡¡¡ |rlt d| dd¡¡ t d| dd¡¡ t d¡ | dg ¡D ]}t d|¡ q*t d ¡ | d!g ¡D ]}t d| ¡ ¡ qT|rt d"¡ | d#g ¡D ]}t d| ¡ ¡ q†d#|krt d$¡ q|S )%zD
    Print the informations from installed distributions found.
    FTr   z---zName: %sr-   Ú zVersion: %sr7   zSummary: %sr/   zHome-page: %srM   z
Author: %srN   zAuthor-email: %srO   zLicense: %srP   zLocation: %sr8   zRequires: %sz, r9   zMetadata-Version: %srL   zInstaller: %srK   zClassifiers:rQ   z  %szEntry-points:rI   zFiles:r   z!Cannot locate installed-files.txt)Ú	enumerater!   Úinfor[   r@   rX   )	Údistributionsr   r    Úresults_printedÚirD   Ú
classifierÚentryrg   r   r   r   r$   x   s@    

ÿ


r$   )FF)Ú
__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