a
    hbòfã  ã                   @   sÎ   d dl Z d dlmZ d dl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d„Zee eeedœdd„ZdS )é    N)ÚValues)Ú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   úX/home/httpd/docs/test/DocsMgr/lib/python3.9/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d< eed< ee ed< 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ÚrequiresÚrequired_byÚ	installerÚmetadata_versionÚclassifiersÚsummaryÚhomepageÚauthorÚauthor_emailÚlicenseÚentry_pointsr   N)r*   r+   r,   r0   Ú__annotations__r   r   r   r   r   r   r2   4   s   
r2   )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
„}|D �] }zˆ | }W n t
yœ   Y qtY n0 tdd„ | ¡ D ƒt	jd�}t||ƒt	jd�}z| d¡}	|	jdd�}
W n tyü   g }
Y n0 | ¡ }|du �rd}nt|ƒ}|j}t|jt	|jƒ|j�p<d|||j|j�pNd| 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>O   ó    z(search_packages_info.<locals>.<dictcomp>c                 S   s   g | ]}t |ƒ‘qS r   r   )rD   r3   r   r   r   Ú
<listcomp>P   rG   z(search_packages_info.<locals>.<listcomp>c                    s   g | ]\}}|ˆ vr|‘qS r   r   )rD   r3   Úpkg©Ú	installedr   r   rH   R   rG   zPackage(s) not found: %sú, )Úcurrent_distr   c                    s   ‡ fdd„ˆ  ¡ D ƒS )Nc                 3   s4   | ],}ˆ j d d„ | ¡ D ƒv r|jd p*dV  qdS )c                 S   s   h | ]}t |jƒ’qS r   )r   r3   )rD   Údr   r   r   Ú	<setcomp>\   rG   zRsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>.<setcomp>ÚNameÚUNKNOWNN)rB   Úiter_dependenciesÚmetadatarC   ©rM   r   r   Ú	<genexpr>X   s
   ÿþzHsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>)ÚvaluesrT   rJ   rT   r   Ú_get_requiring_packagesW   s    
þz5search_packages_info.<locals>._get_requiring_packagesc                 s   s   | ]}|j V  qd S )N)r3   )rD   Úreqr   r   r   rU   e   rG   z'search_packages_info.<locals>.<genexpr>)Úkeyzentry_points.txtF)ÚkeependsNÚ Ú
ClassifierZSummaryz	Home-pageZAuthorzAuthor-emailZLicense)r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r   )r   Úiter_distributionsÚsortedÚzipr#   r$   Újoinr   r   r0   ÚKeyErrorrR   ÚlowerÚ	read_textÚ
splitlinesÚFileNotFoundErrorÚiter_declared_entriesrS   r2   Úraw_namer4   r5   r8   r9   Úget_allÚget)r'   ÚenvZquery_namesÚmissingrW   Z
query_namerE   r6   r7   Zentry_points_textr@   Z
files_iterr   rS   r   rJ   r   r%   F   sV    ÿ












ñr%   )Údistributionsr!   r"   r   c           	      C   sP  d}t | ƒ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	ƒ tdd 
|j¡ƒ tdd 
|j¡ƒ |�rtd|jƒ td|jƒ tdƒ |jD ]}td|ƒ qÚtdƒ |jD ]}td| ¡ ƒ qø|rtdƒ |jdu �r.tdƒ q|jD ]}td| ¡ ƒ �q4q|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: %szRequires: %srL   zRequired-by: %szMetadata-Version: %szInstaller: %szClassifiers:z  %szEntry-points:zFiles:Nz+Cannot locate RECORD or installed-files.txt)Ú	enumerater   r3   r4   r;   r<   r=   r>   r?   r5   r`   r6   r7   r9   r8   r:   r@   Ústripr   )	rl   r!   r"   Zresults_printedÚirE   Ú
classifierÚentryÚliner   r   r   r&   ‰   s>    



r&   )ÚloggingÚoptparser   Útypingr   r   r   r   Ú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   r2   r0   r%   Úboolr&   r   r   r   r   Ú<module>   s    
%Dü