3

g                 @   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 d dlmZ ej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SUCCESS)write_outputc                   s0   e 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.
    z$
      %prog [options] <package> ...Tc                s>   t t| j|| | jjddddddd | j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-unpacked-wheel-v59g9nu1/pip/_internal/commands/show.pyr      s    zShowCommand.__init__c             C   s8   |st j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__usageignore_require_venvr   r&   __classcell__r   r   )r   r   r
      s
   r
   c             #   sf  i xt jD ]}|t|j< qW dd | D }tfddt| |D }|rbtjddj| dd }xfdd|D D ]܉  j j	 j
d	d  j D | jd
}d}d}t t jr& jdr jd}dd |D }	 fdd|	D }	 fdd|	D } jdrv jd}nP jdr` jd}	 fdd|	D }	 fdd|	D } jdrv jd} jdr jd}
|
|d<  jdrx, jdD ]}|j r|j |d< P qW t }|j| |j }xd"D ]}|j|||< qW g }x4|j D ](}|jdr|j|tdd  qW ||d < |rXt||d!< |V  qW 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   ).0namer   r   r   
<listcomp>B   s    z(search_packages_info.<locals>.<listcomp>c                s   g | ]\}}| kr|qS r   r   )r.   r/   pkg)	installedr   r   r0   D   s    zPackage(s) not found: %sz, c                s   t |   fddtjD S )Nc                s(   g | ] } d d |j  D kr|jqS )c             S   s   g | ]}t |jqS r   )r   r/   )r.   requiredr   r   r   r0   N   s    zSsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>.<listcomp>)requiresproject_name)r.   r1   )canonical_namer   r   r0   L   s    zHsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>)r   r   working_set)package_namer   )r6   r   get_requiring_packagesI   s    z4search_packages_info.<locals>.get_requiring_packagesc                s   g | ]}| kr | qS r   r   )r.   r1   )r2   r   r   r0   R   s    c             S   s   g | ]
}|j qS r   )r5   )r.   depr   r   r   r0   W   s    )r/   versionlocationr4   required_byNRECORDc             S   s   g | ]}|j d d qS ),r   )split)r.   lr   r   r   r0   `   s    c                s   g | ]}t jj j|qS r   )ospathjoinr<   )r.   p)distr   r   r0   a   s    c                s   g | ]}t jj| jqS r   )rB   rC   relpathr<   )r.   rE   )rF   r   r   r0   b   s    METADATAzinstalled-files.txtc                s   g | ]}t jj j|qS r   )rB   rC   rD   egg_info)r.   rE   )rF   r   r   r0   j   s    c                s   g | ]}t jj| jqS r   )rB   rC   rG   r<   )r.   rE   )rF   r   r   r0   k   s    zPKG-INFOzentry_points.txtentry_points	INSTALLER	installermetadata-versionsummary	home-pageauthorauthor-emaillicensezClassifier: classifiersr   )rM   rN   rO   rP   rQ   rR   )r   r7   r   r5   sortedzipr   r    rD   r;   r<   r4   
isinstanceDistInfoDistributionhas_metadataget_metadata_linesget_metadatastripr   feedcloseget
splitlines
startswithappendlen)r$   rE   Zquery_namesmissingr9   package	file_listmetadatalinespathsrJ   linefeed_parserpkg_info_dictkeyrS   r   )rF   r2   r   r!   7   sj    	





r!   Fc       	      C   s  d}xt | D ]\}}d}|dkr.td td|jdd td|jd	d td
|jdd td|jdd td|jdd td|jdd td|jdd td|jdd tddj|jdg  tddj|jdg  |rptd|jdd td|jdd td x |jd g D ]}td!| q.W td" x$|jd#g D ]}td!|j  qXW |rtd$ x$|jd%g D ]}td!|j  qW d%|krtd& qW |S )'zD
    Print the informations from installed distributions found.
    FTr   z---zName: %sr/    zVersion: %sr;   zSummary: %srN   zHome-page: %sz	home-pagez
Author: %srP   zAuthor-email: %szauthor-emailzLicense: %srR   zLocation: %sr<   zRequires: %sz, r4   zRequired-by: %sr=   zMetadata-Version: %szmetadata-versionzInstaller: %srL   zClassifiers:rS   z  %szEntry-points:rJ   zFiles:r   z!Cannot locate installed-files.txt)	enumerater	   r^   rD   r[   )	distributionsr   r   Zresults_printedirF   
classifierentryri   r   r   r   r"      s@    r"   )FF)
__future__r   loggingrB   email.parserr   pip._vendorr   pip._vendor.packaging.utilsr   pip._internal.cli.base_commandr   pip._internal.cli.status_codesr   r   pip._internal.utils.miscr	   	getLoggerr'   r   r
   r!   r"   r   r   r   r   <module>   s   
#X