B
    ãUvg‘  ã               @   sŒ   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ e e¡ZG dd	„ d	eƒZd
d„ Zddd„ZdS )é    )Úabsolute_importN)Ú
FeedParser)Úpkg_resources)Úcanonicalize_name)ÚCommand)ÚERRORÚSUCCESSc                   s8   e Zd ZdZdZdZdZdZ‡ fdd„Zdd	„ Z	‡  Z
S )
ÚShowCommandzx
    Show information about one or more installed packages.

    The output is in RFC-compliant mail header format.
    Úshowz$
      %prog [options] <package> ...z*Show information about installed packages.Tc                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__© ú</tmp/pip-install-r_9ig3yj/pip/pip/_internal/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ÚsummaryÚignore_require_venvr   r&   Ú__classcell__r   r   )r   r   r	      s   r	   c             #   s  i ‰xt jD ]}|ˆt|jƒ< qW dd„ | D ƒ}xæ‡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¡rLˆ  
d¡}||d< ˆ  	d¡r†x,ˆ  
d¡D ]}	|	 ¡ rd|	 ¡ |d< P qdW tƒ }
|
 |¡ |
 ¡ }xdD ]}| |¡||< q¤W g }x4| ¡ D ](}	|	 d¡rÊ| |	tdƒd… ¡ qÊW ||d< |rt|ƒ|d< |V  qFW 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   )r0   Úpkg)Ú	installedr   r   r1   A   s    c             S   s   g | ]
}|j ‘qS r   )Úproject_name)r0   Údepr   r   r   r1   F   s    )r+   ÚversionÚlocationÚrequiresNÚRECORDc             S   s   g | ]}|  d ¡d ‘qS )ú,r   )Úsplit)r0   Úlr   r   r   r1   N   s    c                s   g | ]}t j ˆ j|¡‘qS r   )ÚosÚpathÚjoinr7   )r0   Úp)Údistr   r   r1   O   s    c                s   g | ]}t j |ˆ j¡‘qS r   )r=   r>   Úrelpathr7   )r0   r@   )rA   r   r   r1   P   s    ÚMETADATAzinstalled-files.txtc                s   g | ]}t j ˆ j|¡‘qS r   )r=   r>   r?   Úegg_info)r0   r@   )rA   r   r   r1   X   s    c                s   g | ]}t j |ˆ j¡‘qS r   )r=   r>   rB   r7   )r0   r@   )rA   r   r   r1   Y   s    zPKG-INFOzentry_points.txtÚentry_pointsÚ	INSTALLERÚ	installer)zmetadata-versionr-   z	home-pageÚauthorzauthor-emailÚlicensezClassifier: Úclassifiersr   )r   Úworking_setr   r4   r6   r7   r8   Ú
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ÚpathsrE   ÚlineÚfeed_parserÚpkg_info_dictÚkeyrJ   r   )rA   r3   r   r!   4   s\    








r!   Fc       
   
      sò  d}xæt | ƒD ]Ø\}}d}|dkr0t d¡ | dd¡‰ ‡ fdd„tjD ƒ}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g ¡¡¡ t dd |¡¡ |r¢t d| dd¡¡ t d| dd¡¡ t d ¡ x"| d!g ¡D ]}t d"|¡ qZW t d#¡ x&| d$g ¡D ]}t d"| ¡ ¡ qˆW |rt d%¡ x&| d&g ¡D ]}	t d"|	 ¡ ¡ q¾W d&|krt d'¡ qW |S )(zD
    Print the informations from installed distributions found.
    FTr   z---r+   Ú c                s(   g | ] }ˆ d d„ |  ¡ D ƒkr|j‘qS )c             S   s   g | ]
}|j ‘qS r   )r+   )r0   Úrequiredr   r   r   r1   Š   s    z,print_results.<locals>.<listcomp>.<listcomp>)r8   r4   )r0   r2   )r+   r   r   r1   ‰   s    z!print_results.<locals>.<listcomp>zName: %szVersion: %sr6   zSummary: %sr-   zHome-page: %sz	home-pagez
Author: %srH   zAuthor-email: %szauthor-emailzLicense: %srI   zLocation: %sr7   zRequires: %sz, r8   zRequired-by: %szMetadata-Version: %szmetadata-versionzInstaller: %srG   zClassifiers:rJ   z  %szEntry-points:rE   zFiles:r   z!Cannot locate installed-files.txt)Ú	enumerater   ÚinforT   r   rK   r?   rQ   )
Údistributionsr   r   Úresults_printedÚirA   Úrequired_byÚ
classifierÚentryr`   r   )r+   r   r"   }   sD    



r"   )FF)Ú
__future__r   Úloggingr=   Úemail.parserr   Úpip._vendorr   Úpip._vendor.packaging.utilsr   Úpip._internal.cli.base_commandr   Úpip._internal.cli.status_codesr   r   Ú	getLoggerr'   r   r	   r!   r"   r   r   r   r   Ú<module>   s   
$I