a
    ñ»j‚  ã                   @  sú   d dl mZ d dlZd dlZd dl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 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dddœdd„ZG dd„ deƒZG dd„ deƒZdddœdd„Z dddddœdd„Z!dS )é    )ÚannotationsN)Ú	GeneratorÚIterableÚIterator)ÚValues)Ú
NamedTuple)ÚInvalidRequirement©Úcanonicalize_name)ÚCommand)ÚERRORÚSUCCESS)ÚBaseDistributionÚget_default_environment)Úwrite_outputÚstr)ÚlabelÚreturnc                 C  s(   t jt j }t dd|¡}|  |¡ ¡ S )NÚ )ÚstringÚpunctuationÚ
whitespacer   Ú	maketransÚ	translateÚlower)r   Zchars_to_removeZremoval_map© r   úAE:\soccer\ml_env\Lib\site-packages\pip/_internal/commands/show.pyÚnormalize_project_url_label   s    r   c                   @  s8   e Zd ZdZdZdZddœdd„Zdd	d
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> ...TÚNone)r   c                 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)Úselfr   r   r   Úadd_options&   s    ú	zShowCommand.add_optionsr   ú	list[str]Úint)Ú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    r1   r   )r*   r.   r/   ÚqueryÚresultsr   r   r   Úrun2   s    

ÿzShowCommand.runN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚusageÚignore_require_venvr+   r8   r   r   r   r   r      s
   r   c                   @  sž   e Zd ZU ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< dS )Ú_PackageInfor   ÚnameÚversionÚlocationz
str | NoneÚeditable_project_locationr,   ÚrequiresÚrequired_byÚ	installerÚmetadata_versionÚclassifiersÚsummaryÚhomepageÚproject_urlsÚauthorÚauthor_emailÚlicenseÚlicense_expressionÚentry_pointszlist[str] | Noner    N)r9   r:   r;   Ú__annotations__r   r   r   r   r?   @   s$   
r?   r,   z#Generator[_PackageInfo, None, None])r6   r   c                 #  sD  t ƒ }dd„ | ¡ D ƒ‰ dd„ | D ƒ}t‡ fdd„t| |ƒD ƒƒ}|rXt dd |¡¡ dd	d
œ‡ fdd„}|D �]Ì}zˆ | }W n ty˜   Y qpY n0 z tdd„ | ¡ D ƒt	j
d�}W n$ tyÞ   t| ¡ t	j
d�}Y n0 zt||ƒt	j
d�}W n t�y   dg}Y n0 z| d¡}	|	jdd�}
W n t�yD   g }
Y n0 | ¡ }|du �r^d}nt|ƒ}|j}| dg ¡}| dd¡}|�sÈ|D ]8}|jddd�\}}t|ƒ}|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  qpd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>^   ó    z(search_packages_info.<locals>.<dictcomp>c                 S  s   g | ]}t |ƒ‘qS r   r	   )rT   r@   r   r   r   Ú
<listcomp>_   rW   z(search_packages_info.<locals>.<listcomp>c                   s   g | ]\}}|ˆ vr|‘qS r   r   )rT   r@   Úpkg©Ú	installedr   r   rX   a   rW   zPackage(s) not found: %sú, r   zIterator[str])Ú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
   r@   )rT   Údr   r   r   Ú	<setcomp>k   rW   zRsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>.<setcomp>ÚNameÚUNKNOWNN)rR   Úiter_dependenciesÚmetadatarS   ©r]   r   r   Ú	<genexpr>g   s
   ÿþzHsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>)Úvaluesrd   rZ   rd   r   Ú_get_requiring_packagesf   s    
þz5search_packages_info.<locals>._get_requiring_packagesc                 S  s   h | ]
}|j ’qS r   )r@   )rT   Úreqr   r   r   r_   w   rW   z'search_packages_info.<locals>.<setcomp>)Úkeyz#N/Azentry_points.txtF)ÚkeependsNzProject-URLz	Home-pager   ú,é   )ÚmaxsplitrJ   Ú
ClassifierZSummaryZAuthorzAuthor-emailZLicensezLicense-Expression)r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   r    )r   Ziter_all_distributionsÚsortedÚzipr2   r3   ÚjoinÚKeyErrorrb   r   r   r   Ziter_raw_dependenciesÚ	read_textÚ
splitlinesÚFileNotFoundErrorÚiter_declared_entriesrc   Úget_allÚgetÚsplitr   Ústripr?   Úraw_nameZraw_versionrB   rC   rF   rG   )r6   ÚenvZquery_namesÚmissingrg   Z
query_namerU   rD   rE   Zentry_points_textrP   Z
files_iterr    rc   rK   rJ   ÚurlZ	url_labelZnormalized_labelr   rZ   r   r4   U   s€    ÿ

ý













îr4   zIterable[_PackageInfo]Úbool)Údistributionsr0   r1   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u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u �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: %sr\   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Úmapr-   rG   ry   r@   rA   rI   rJ   rL   rM   rO   rN   rB   rC   rq   rD   rE   rF   rH   rP   rz   rK   r    )r€   r0   r1   Zresults_printedÚirU   Zmetadata_version_tupleÚ
classifierÚentryÚproject_urlÚliner   r   r   r5   ²   sR    
ÿ




r5   )"Ú
__future__r   Úloggingr   Úcollections.abcr   r   r   Úoptparser   Útypingr   Ú"pip._vendor.packaging.requirementsr   Úpip._vendor.packaging.utilsr
   Úpip._internal.cli.base_commandr   Úpip._internal.cli.status_codesr   r   Úpip._internal.metadatar   r   Úpip._internal.utils.miscr   Ú	getLoggerr9   r2   r   r   r?   r4   r5   r   r   r   r   Ú<module>   s"   
%]