B
    od                 @   s   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ e eZG d	d
 d
eZG dd deZee eeddf dddZee eeedddZdS )    N)Values)	GeneratorIterableIteratorList
NamedTupleOptional)canonicalize_name)Command)ERRORSUCCESS)BaseDistributionget_default_environment)write_outputc               @   s<   e Zd ZdZdZdZddddZeee	 e
d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> ...TN)returnc             C   s,   | 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   )cmd_opts
add_optionparserinsert_option_group)self r   M/var/www/html/venv/lib/python3.7/site-packages/pip/_internal/commands/show.pyadd_options   s    zShowCommand.add_options)optionsargsr   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   r    r!   queryresultsr   r   r   run&   s    
zShowCommand.run)__name__
__module____qualname____doc__usageignore_require_venvr   r   r   strintr*   r   r   r   r   r      s
   r   c               @   s   e Zd ZU eed< eed< eed< ee ed< ee ed< ee ed< eed< eed< ee ed	< eed
< eed< ee ed< eed< eed< eed< ee ed< eee  ed< dS )_PackageInfonameversionlocationeditable_project_locationrequiresrequired_by	installermetadata_versionclassifierssummaryhomepageproject_urlsauthorauthor_emaillicenseentry_pointsr   N)r+   r,   r-   r1   __annotations__r   r   r   r   r   r   r3   4   s"   
r3   )r(   r   c             #   s  t  }dd | D  dd | D }t fddt| |D }|rXtdd| ttt	 d fd	d
}x<|D ]2}y | }W n t
k
r   wxY nX tdd | D t	jd}t||t	jd}y|d}	|	jdd}
W n tk
r   g }
Y nX | }|dkrd}nt|}|j}t|jt	|j|jpDd|j|||j|jpZd|dg |dd|dd|dg |dd|dd|dd|
|dV  qxW 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   i | ]}||j qS r   )canonical_name).0distr   r   r   
<dictcomp>Q   s    z(search_packages_info.<locals>.<dictcomp>c             S   s   g | ]}t |qS r   )r	   )rF   r4   r   r   r   
<listcomp>R   s    z(search_packages_info.<locals>.<listcomp>c                s   g | ]\}}| kr|qS r   r   )rF   r4   pkg)	installedr   r   rI   T   s    zPackage(s) not found: %sz, )current_distr   c                s    fdd  D S )Nc             3   s4   | ],} j d d | D kr|jd p*dV  qdS )c             S   s   h | ]}t |jqS r   )r	   r4   )rF   dr   r   r   	<setcomp>^   s    zRsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>.<setcomp>NameUNKNOWNN)rE   iter_dependenciesmetadata)rF   rG   )rL   r   r   	<genexpr>[   s   zHsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>)values)rL   )rK   )rL   r   _get_requiring_packagesY   s    
z5search_packages_info.<locals>._get_requiring_packagesc             s   s   | ]}|j V  qd S )N)r4   )rF   reqr   r   r   rS   g   s    z'search_packages_info.<locals>.<genexpr>)keyzentry_points.txtF)keependsN 
ClassifierSummaryz	Home-pagezProject-URLAuthorzAuthor-emailLicense)r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   r   )r   iter_all_distributionssortedzipr$   r%   joinr   r   r1   KeyErrorrQ   lower	read_text
splitlinesFileNotFoundErroriter_declared_entriesrR   r3   raw_namer5   r6   r7   r:   r;   get_allget)r(   envZquery_namesmissingrU   Z
query_namerG   r8   r9   Zentry_points_textrC   Z
files_iterr   rR   r   )rK   r   r&   H   sV    











r&   )distributionsr"   r#   r   c       
      C   s  d}xt | D ]\}}d}|dkr.td td|j td|j td|j td|j td	|j td
|j td|j td|j	 |j
dk	rtd|j
 tdd|j tdd|j |rTtd|j td|j td x|jD ]}td| qW td x|jD ]}td|  qW td x|jD ]}td| q@W |rtd |jdkrvtd qx|jD ]}	td|	  q~W qW |S )zC
    Print the information from installed distributions found.
    FTr   z---zName: %szVersion: %szSummary: %szHome-page: %sz
Author: %szAuthor-email: %szLicense: %szLocation: %sNzEditable project location: %szRequires: %sz, zRequired-by: %szMetadata-Version: %szInstaller: %szClassifiers:z  %szEntry-points:zProject-URLs:zFiles:z+Cannot locate RECORD or installed-files.txt)	enumerater   r4   r5   r=   r>   r@   rA   rB   r6   r7   ra   r8   r9   r;   r:   r<   rC   stripr?   r   )
rm   r"   r#   Zresults_printedirG   
classifierentryproject_urlliner   r   r   r'      sJ    


r'   )loggingoptparser   typingr   r   r   r   r   r   Zpip._vendor.packaging.utilsr	   pip._internal.cli.base_commandr
   pip._internal.cli.status_codesr   r   pip._internal.metadatar   r   pip._internal.utils.miscr   	getLoggerr+   r$   r   r3   r1   r&   boolr'   r   r   r   r   <module>   s    
%F