U
    EZh                     @   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 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)InvalidRequirement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   ?/tmp/pip-unpacked-wheel-36xvkur8/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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license_expressionentry_pointsr   N)r-   r.   r/   r3   __annotations__r   r   r   r   r   r    r5   5   s$   
r5   )r*   r   c                 #   sd  t  }dd | D  dd | D }t fddt| |D }|rXtdd| ttt	 d fd	d
}|D ]}z | }W n t
k
r   Y qtY nX z tdd | D t	jd}W n& tk
r   t| t	jd}Y nX zt||t	jd}W n tk
r   dg}Y nX z|d}	|	jdd}
W n tk
rP   g }
Y nX | }|dkrjd}nt|}|j}|dg }|dd}|s|D ]L}|jddd\}}| dddd }|dkr| } qqt|j|j|jpd|j|||j|j pd|dg |dd|||dd|dd|d d|d!d|
|d"V  qtd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>S   s      z(search_packages_info.<locals>.<dictcomp>c                 S   s   g | ]}t |qS r   r
   )rJ   r6   r   r   r    
<listcomp>T   s     z(search_packages_info.<locals>.<listcomp>c                    s   g | ]\}}| kr|qS r   r   )rJ   r6   pkg	installedr   r    rM   V   s      zPackage(s) not found: %s, )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   r6   )rJ   dr   r   r    	<setcomp>`   s     zRsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>.<setcomp>NameUNKNOWNN)rH   iter_dependenciesmetadatarI   rR   r   r    	<genexpr>\   s
   zHsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>)valuesrY   rO   rY   r    _get_requiring_packages[   s    
z5search_packages_info.<locals>._get_requiring_packagesc                 S   s   h | ]
}|j qS r   )r6   )rJ   reqr   r   r    rT   l   s     z'search_packages_info.<locals>.<setcomp>)keyz#N/Azentry_points.txtF)keependsNzProject-URLz	Home-page ,   )maxsplit-_r@   
ClassifierZSummaryZAuthorzAuthor-emailZLicensezLicense-Expression)r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   r   )!r   Ziter_all_distributionssortedzipr&   r'   joinr   r   r3   KeyErrorrW   lowerr	   Ziter_raw_dependencies	read_text
splitlinesFileNotFoundErrorZiter_declared_entriesrX   get_allgetsplitcasefoldreplacestripr5   Zraw_nameZraw_versionr8   r9   r<   r=   )r*   envZquery_namesmissingr\   Z
query_namerK   r:   r;   Zentry_points_textrF   Z
files_iterr   rX   rA   r@   urlZ	url_labelZnormalized_labelr   rO   r    r(   J   s    















r(   )distributionsr$   r%   r   c                 C   s  d}t | D ]\}}d}|dkr*td ttt|jd}td|j td|j td|j	 td	|j
 td
|j td|j |dkr|jrtd|j ntd|j td|j |jdk	rtd|j tdd|j tdd|j |rxtd|j td|j td |jD ]}td| q"td |jD ]}td|  qBtd |jD ]}	td|	 qf|rtd |jdkrtd q|jD ]}
td|
  qq|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: %s)      zLicense-Expression: %szLicense: %szLocation: %sNzEditable project location: %szRequires: %srQ   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   tuplemapr4   r=   rq   r6   r7   r?   r@   rB   rC   rE   rD   r8   r9   ri   r:   r;   r<   r>   rF   rt   rA   r   )rx   r$   r%   Zresults_printedirK   Zmetadata_version_tuple
classifierentryproject_urlliner   r   r    r)      sT    
 




r)   )!loggingoptparser   typingr   r   r   r   r   r   "pip._vendor.packaging.requirementsr	   pip._vendor.packaging.utilsr   pip._internal.cli.base_commandr   pip._internal.cli.status_codesr   r   Zpip._internal.metadatar   r   pip._internal.utils.miscr   	getLoggerr-   r&   r   r5   r3   r(   boolr)   r   r   r   r    <module>   s"    
%b