U
    „~$h±  ã                   @   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-g27rp152/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è�qšt|j|j|j�püd|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r¤td|jƒ ntd|jƒ td|jƒ |jdk	rÒt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�rštdƒ q|jD ]}
td|
 ¡ ƒ �q q|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ü