
0c@_T                 @   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 d  d	 l m Z e r d  d
 l m Z d  d l m Z m Z m Z e j e  Z Gd d   d e  Z d d   Z d d d d  Z d S)    )absolute_importN)
FeedParser)pkg_resources)canonicalize_name)Command)ERRORSUCCESS)write_output)MYPY_CHECK_RUNNING)Values)ListDictIteratorc               @   s:   e  Z d  Z d Z d Z d Z d d   Z d d   Z d S)	ShowCommandzx
    Show information about one or more installed packages.

    The output is in RFC-compliant mail header format.
    z$
      %prog [options] <package> ...Tc             C   sE   |  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   )cmd_opts
add_optionparserinsert_option_group)self r   :/tmp/pip-build-jynh7p1z/pip/pip/_internal/commands/show.pyadd_options!   s    		zShowCommand.add_optionsc             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   optionsargsqueryresultsr   r   r   run,   s    zShowCommand.runN)__name__
__module____qualname____doc__usageZignore_require_venvr   r(   r   r   r   r   r      s
   r   c             #   s6  i   x$ t  j D] } |  t | j  <q Wd d   |  D } t  f d d   t |  |  D  } | r t j d d j |   d d   } x f d d   | D D]  d	   j d
   j	 d   j
 d d d     j   D d |   j  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  r4  j d  }
 |
 | d <  j d  rzx4   j d  D]# } | j   rS| j   | d <PqSWt   } | j |  | j   } x! d' D] } | j |  | | <qWg  } x@ | j   D]2 } | j d$  r| j | t d$  d   qW| | d% <| r)t |  | d& <| Vq 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   ).0namer   r   r   
<listcomp>F   s   	 z(search_packages_info.<locals>.<listcomp>c                s(   g  |  ] \ } } |   k r |  q Sr   r   )r.   r/   pkg)	installedr   r   r0   H   s   	 zPackage(s) not found: %sz, c                s&   t  |       f d d   t j D S)Nc                s8   g  |  ]. }   d  d   | j    D k r | j  q S)c             S   s   g  |  ] } t  | j   q Sr   )r   r/   )r.   requiredr   r   r   r0   S   s   	 zSsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>.<listcomp>)requiresproject_name)r.   r1   )canonical_namer   r   r0   Q   s   	 	zHsearch_packages_info.<locals>.get_requiring_packages.<locals>.<listcomp>)r   r   working_set)package_namer   )r6   r   get_requiring_packagesM   s    z4search_packages_info.<locals>.get_requiring_packagesc                s&   g  |  ] } |   k r   |  q Sr   r   )r.   r1   )r2   r   r   r0   W   s   	 r/   versionlocationr4   c             S   s   g  |  ] } | j   q Sr   )r5   )r.   depr   r   r   r0   \   s   	 required_byN RECORDc             S   s#   g  |  ] } | j  d   d  q S),r   )split)r.   liner   r   r   r0   e   s   	 c                s(   g  |  ] } t  j j   j |   q Sr   )ospathjoinr;   )r.   p)distr   r   r0   f   s   	 c                s(   g  |  ] } t  j j |   j   q Sr   )rC   rD   relpathr;   )r.   rF   )rG   r   r   r0   g   s   	 METADATAzinstalled-files.txtc                s(   g  |  ] } t  j j   j |   q Sr   )rC   rD   rE   egg_info)r.   rF   )rG   r   r   r0   o   s   	 c                s(   g  |  ] } t  j j |   j   q Sr   )rC   rD   rH   r;   )r.   rF   )rG   r   r   r0   p   s   	 zPKG-INFOzentry_points.txtentry_points	INSTALLER	installermetadata-versionsummary	home-pageauthorauthor-emaillicensezClassifier: classifiersr   )rN   zsummaryrP   zauthorrR   zlicense)r   r7   r   r5   sortedzipr    r!   rE   r:   r;   r4   
isinstanceDistInfoDistributionhas_metadataget_metadata_linesget_metadatastripr   feedcloseget
splitlines
startswithappendlen)r&   rF   query_namesmissingr9   package	file_listmetadatalinespathsrK   rB   feed_parserpkg_info_dictkeyrT   r   )rG   r2   r   r"   :   sj    %
 			
	
!
r"   Fc       	      C   sK  d } x>t  |   D]0\ } } 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     | rt d | j d d   t d | j d d   t d  x' | j d  g   D] } t d! |  qWt d"  x- | j d# g   D] } t d! | j    qW| r t d$  x- | j d% g   D] } t d! | j    qWd% | k r t d&  q W| S)'zC
    Print the information from installed distributions found.
    FTr   z---zName: %sr/   r>   zVersion: %sr:   zSummary: %srO   zHome-page: %sz	home-pagez
Author: %srQ   zAuthor-email: %szauthor-emailzLicense: %srS   zLocation: %sr;   zRequires: %sz, r4   zRequired-by: %sr=   zMetadata-Version: %szmetadata-versionzInstaller: %srM   zClassifiers:rT   z  %szEntry-points:rK   zFiles:r   z!Cannot locate installed-files.txt)	enumerater	   r_   rE   r\   )	distributionsr   r   results_printedirG   
classifierentryrB   r   r   r   r#      s@    
""


r#   )
__future__r   loggingrC   email.parserr   Zpip._vendorr   pip._vendor.packaging.utilsr   Zpip._internal.cli.base_commandr   Zpip._internal.cli.status_codesr   r   Zpip._internal.utils.miscr	   Zpip._internal.utils.typingr
   optparser   Ztypingr   r   r   	getLoggerr)   r    r   r"   r#   r   r   r   r   <module>   s    $Z