o
    i                     @  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ZG dd deZG dd deZd"ddZ d#dd Z!dS )$    )annotationsN)	GeneratorIterableIterator)Values)
NamedTuple)InvalidRequirementcanonicalize_name)Command)ERRORSUCCESS)BaseDistributionget_default_environment)write_outputlabelstrreturnc                 C  s(   t jt j }tdd|}| | S )N )stringZpunctuationZ
whitespacer   	maketrans	translatelower)r   Zchars_to_removeZremoval_map r   ;lib/python3.10/site-packages/pip/_internal/commands/show.pynormalize_project_url_label   s   r   c                   @  s,   e Zd ZdZdZdZdddZ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> ...Tr   Nonec                 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   )Zcmd_optsZ
add_optionparserZinsert_option_group)selfr   r   r   add_options&   s   	zShowCommand.add_optionsoptionsr   args	list[str]intc                 C  s8   |s	t d tS |}t|}t||j|jdst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   run2   s   

zShowCommand.runN)r   r   )r'   r   r(   r)   r   r*   )__name__
__module____qualname____doc__usageZignore_require_venvr&   r3   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)r4   r5   r6   __annotations__r   r   r   r   r9   @   s&   
 r9   r1   r)   #Generator[_PackageInfo, None, None]c              	   #  st   t  }dd | D  dd | D }t fddt| |D }|r-tdd| d4 fdd}|D ] }z | }W n	 tyH   Y q6w ztdd | D t	j
d}W n tyk   t| t	j
d}Y nw zt||t	j
d}W n ty   dg}Y nw z|d}	|	jdd}
W n ty   g }
Y nw | }|du rd}nt|}|j}|dg }|dd}|s|D ]}|jddd\}}t|}|dkr| } nqtd5i d|jd|jd|jpdd |jd!|d"|d#|jd$|jpdd%|d&g d'|d(dd|d)|d*|d+dd,|d-dd.|d/dd0|d1dd2|
d3|V  q6dS )6z
    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	   )rO   r:   r   r   r   
<listcomp>_   rR   z(search_packages_info.<locals>.<listcomp>c                   s   g | ]
\}}| vr|qS r   r   )rO   r:   ZpkgZ	installedr   r   rS   a   s    zPackage(s) not found: %s, current_distr   r   Iterator[str]c                   s    fdd  D S )Nc                 3  s6    | ]} 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:   )rO   dr   r   r   	<setcomp>k   s    zRsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>.<setcomp>NameZUNKNOWNN)rM   iter_dependenciesmetadatarN   rV   r   r   	<genexpr>g   s    zHsearch_packages_info.<locals>._get_requiring_packages.<locals>.<genexpr>)valuesr]   rT   r]   r   _get_requiring_packagesf   s   
z5search_packages_info.<locals>._get_requiring_packagesc                 S  s   h | ]}|j qS r   )r:   )rO   Zreqr   r   r   rY   w   s    z'search_packages_info.<locals>.<setcomp>)keyz#N/Azentry_points.txtF)keependsNzProject-URLz	Home-pager   ,   )maxsplitrD   r:   r;   r<   r=   r>   r?   r@   rA   rB   Z
ClassifierrC   ZSummaryrE   rF   ZAuthorrG   zAuthor-emailrH   ZLicenserI   zLicense-ExpressionrJ   r   )rV   r   r   rW   r   )r   Ziter_all_distributionssortedzipr-   r.   joinKeyErrorr[   r   r   r   Ziter_raw_dependencies	read_text
splitlinesFileNotFoundErrorZiter_declared_entriesr\   Zget_allgetsplitr   stripr9   Zraw_nameZraw_versionr<   r=   r@   rA   )r1   envZquery_namesmissingr`   Z
query_namerP   r>   r?   Zentry_points_textrJ   Z
files_iterr   r\   rE   rD   urlZ	url_labelZnormalized_labelr   rT   r   r/   U   s   



	
r/   distributionsIterable[_PackageInfo]r+   boolr,   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rQ|jrQtd|j ntd|j td|j |jdurhtd|j tdd|j tdd|j |rtd|j td|j td |jD ]}td| qtd |jD ]	}td|  qtd |jD ]}	td|	 q|rtd |jdu 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: %srU   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*   rA   rn   r:   r;   rC   rD   rF   rG   rI   rH   r<   r=   rh   r>   r?   r@   rB   rJ   ro   rE   r   )rs   r+   r,   Zresults_printedirP   Zmetadata_version_tupleZ
classifierentryZproject_urlliner   r   r   r0      sT   






r0   )r   r   r   r   )r1   r)   r   rL   )rs   rt   r+   ru   r,   ru   r   ru   )"Z
__future__r   Zloggingr   Zcollections.abcr   r   r   Zoptparser   typingr   Z"pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.utilsr
   Zpip._internal.cli.base_commandr   Zpip._internal.cli.status_codesr   r   Zpip._internal.metadatar   r   Zpip._internal.utils.miscr   Z	getLoggerr4   r-   r   r   r9   r/   r0   r   r   r   r   <module>   s$    

%
]