o
    Ëý°jð$  ã                   @   s$  d dl Zd dlZd dlZd dlZd dlZd dlZd dlmZ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mZ d dlmZ d dlmZmZmZ d dlmZ d d	lm Z m!Z! d
dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( e )e*¡Z+G dd„ deƒZ,G dd„ dƒZ-G dd„ de#ƒZ.G dd„ de%ƒZ/dS )é    N)Ú
CollectionÚIterableÚIteratorÚListÚMappingÚ
NamedTupleÚOptional)Úpkg_resources)ÚRequirement)ÚNormalizedNameÚcanonicalize_name)Úparse)ÚInvalidWheelÚNoneMetadataErrorÚUnsupportedWheel)Údisplay_path)Úparse_wheelÚread_wheel_metadata_fileé   )ÚBaseDistributionÚBaseEntryPointÚBaseEnvironmentÚDistributionVersionÚInfoPathÚWheelc                   @   s&   e Zd ZU eed< eed< eed< dS )Ú
EntryPointÚnameÚvalueÚgroupN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© r$   r$   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_internal/metadata/pkg_resources.pyr      s   
 r   c                   @   s¦   e Zd ZdZdeeef deddfdd„Zdedefd	d
„Z	dedefdd„Z
dedee fdd„Zdedefdd„Zdedee fdd„Zdededdfdd„ZdS )ÚWheelMetadataz”IMetadataProvider that reads metadata files from a dictionary.

    This also maps metadata decoding exceptions to our internal exception type.
    ÚmetadataÚ
wheel_nameÚreturnNc                 C   s   || _ || _d S ©N)Ú	_metadataÚ_wheel_name)Úselfr'   r(   r$   r$   r%   Ú__init__*   s   
zWheelMetadata.__init__r   c                 C   s
   || j v S r*   )r+   ©r-   r   r$   r$   r%   Úhas_metadata.   ó   
zWheelMetadata.has_metadatac                 C   sH   z| j |  ¡ W S  ty# } ztd| j› d|› d|› d�ƒ‚d }~ww )NzError decoding metadata for z: z in z file)r+   ÚdecodeÚUnicodeDecodeErrorr   r,   )r-   r   Úer$   r$   r%   Úget_metadata1   s   ÿ€þzWheelMetadata.get_metadatac                 C   s   t  |  |¡¡S r*   )r	   Úyield_linesr5   r/   r$   r$   r%   Úget_metadata_lines:   ó   z WheelMetadata.get_metadata_linesc                 C   s   dS ©NFr$   r/   r$   r$   r%   Úmetadata_isdir=   ó   zWheelMetadata.metadata_isdirc                 C   s   g S r*   r$   r/   r$   r$   r%   Úmetadata_listdir@   r;   zWheelMetadata.metadata_listdirÚscript_nameÚ	namespacec                 C   s   d S r*   r$   )r-   r=   r>   r$   r$   r%   Ú
run_scriptC   r;   zWheelMetadata.run_script)r   r    r!   Ú__doc__r   r"   Úbytesr.   Úboolr0   r5   r   r7   r:   r   r<   r?   r$   r$   r$   r%   r&   $   s    	r&   c                   @   sD  e Zd Zdejddfdd„Zededd fdd„ƒZed	e	d
edd fdd„ƒZ
edee fdd„ƒZedee fdd„ƒZedefdd„ƒZedefdd„ƒZedefdd„ƒZdedefdd„Zdedeej fdd„Zdedefdd„Zdee fdd„Zedej j!fd d!„ƒZ"d(d#e#e dee$ fd$d%„Z%dee fd&d'„Z&dS ))ÚDistributionÚdistr)   Nc                 C   ó
   || _ d S r*   )Ú_dist©r-   rD   r$   r$   r%   r.   H   r1   zDistribution.__init__Ú	directoryc           	      C   sŽ   |  tj¡}tj |¡\}}t ||¡}| d¡r%tj}tj 	|¡d }n| d¡s,J ‚tj
}tj 	|¡d  d¡d }||||d�}| |ƒS )Nz	.egg-infor   z
.dist-infoú-)Úproject_namer'   )ÚrstripÚosÚsepÚpathÚsplitr	   ÚPathMetadataÚendswithrC   ÚsplitextÚDistInfoDistribution)	ÚclsrH   Údist_dirÚbase_dirÚdist_dir_namer'   Údist_clsÚ	dist_namerD   r$   r$   r%   Úfrom_directoryK   s   
zDistribution.from_directoryÚwheelr   c              
      sÆ   z)|  ¡ �‰tˆ|ƒ\‰ }‡ ‡fdd„ˆ ¡ D ƒ}W d  ƒ n1 s#w   Y  W n( tjy= } zt|j|ƒ|‚d}~w tyQ } z	t|› d|› �ƒ‚d}~ww tj	|jt
||jƒ|d�}| |ƒS )a  Load the distribution from a given wheel.

        :raises InvalidWheel: Whenever loading of the wheel causes a
            :py:exc:`zipfile.BadZipFile` exception to be thrown.
        :raises UnsupportedWheel: If the wheel is a valid zip, but malformed
            internally.
        c                    s4   i | ]}|  ˆ › d �¡r| d d¡d tˆ|ƒ“qS )ú/r   éÿÿÿÿ)Ú
startswithrO   r   )Ú.0rN   ©Úinfo_dirÚzfr$   r%   Ú
<dictcomp>k   s    ýÿz+Distribution.from_wheel.<locals>.<dictcomp>Nz has an invalid wheel, )Úlocationr'   rJ   )Ú
as_zipfiler   ÚnamelistÚzipfileÚ
BadZipFiler   rd   r   r	   rS   r&   )rT   r[   r   Ú_Úmetadata_textr4   rD   r$   r`   r%   Ú
from_wheel_   s*   	
þþ€€€ÿ
ýzDistribution.from_wheelc                 C   ó   | j jS r*   )rF   rd   ©r-   r$   r$   r%   rd   {   ó   zDistribution.locationc                 C   rl   r*   )rF   Úegg_inform   r$   r$   r%   Úinfo_location   rn   zDistribution.info_locationc                 C   s&   zt | jjjƒW S  ty   Y dS w r9   )rB   rF   Ú	_providerrN   ÚAttributeErrorrm   r$   r$   r%   Úinstalled_by_distutilsƒ   s
   ÿz#Distribution.installed_by_distutilsc                 C   ó   t | jjƒS r*   )r   rF   rJ   rm   r$   r$   r%   Úcanonical_name�   ó   zDistribution.canonical_namec                 C   rt   r*   )Úparse_versionrF   Úversionrm   r$   r$   r%   rx   ‘   rv   zDistribution.versionrN   c                 C   s   | j  t|ƒ¡S r*   )rF   r0   r"   )r-   rN   r$   r$   r%   Úis_file•   r8   zDistribution.is_filec                 c   sV   � t |ƒ}| j |¡st|ƒ‚| j |¡st|ƒ‚| j |¡D ]	}t ||¡V  qd S r*   )	r"   rF   r0   ÚFileNotFoundErrorÚisdirÚNotADirectoryErrorr<   ÚpathlibÚPurePosixPath)r-   rN   r   Úchildr$   r$   r%   Úiterdir˜   s   €ÿzDistribution.iterdirc                 C   s>   t |ƒ}| j |¡st|ƒ‚| j |¡}|d u rt| |ƒ‚|S r*   )r"   rF   r0   rz   r5   r   )r-   rN   r   Úcontentr$   r$   r%   Ú	read_text¡   s   
zDistribution.read_textc                 c   s\   � | j  ¡  ¡ D ]#\}}| ¡ D ]\}}t|ƒ d¡\}}}t| ¡ | ¡ |d�V  qqd S )Nú=)r   r   r   )rF   Úget_entry_mapÚitemsr"   Ú	partitionr   Ústrip)r-   r   Úentriesr   Úentry_pointri   r   r$   r$   r%   Úiter_entry_pointsª   s   €þÿzDistribution.iter_entry_pointsc                 C   s‚   t | jtjƒr
d}nd}z|  |¡}W n ty2   | jr#t| jƒ}nt| jƒ}t	 
d|¡ d}Y nw tj ¡ }| |¡ | ¡ S )z�
        :raises NoneMetadataError: if the distribution reports `has_metadata()`
            True but `get_metadata()` returns None.
        ÚMETADATAzPKG-INFOzNo metadata found in %sÚ )Ú
isinstancerF   r	   rS   r‚   rz   rd   r   ÚreprÚloggerÚwarningÚemailÚparserÚ
FeedParserÚfeedÚclose)r-   Úmetadata_namer'   Údisplaying_pathÚfeed_parserr$   r$   r%   r'   °   s   
ú

zDistribution.metadatar$   Úextrasc                 C   s"   |rt |ƒ | jj¡}| j |¡S r*   )Ú	frozensetÚintersectionrF   r™   Úrequires)r-   r™   r$   r$   r%   Úiter_dependenciesÇ   s   zDistribution.iter_dependenciesc                 C   rl   r*   )rF   r™   rm   r$   r$   r%   Úiter_provided_extrasÌ   s   z!Distribution.iter_provided_extras)r$   )'r   r    r!   r	   rC   r.   Úclassmethodr"   rZ   r   rk   Úpropertyr   rd   rp   rB   rs   r   ru   r   rx   r   ry   r   r}   r~   r€   r‚   r   r   rŠ   r‘   ÚmessageÚMessager'   r   r
   r�   rž   r$   r$   r$   r%   rC   G   s0    			rC   c                   @   sŽ   e Zd Zdejddfdd„Zedefdd„ƒZede	e
e  defd	d
„ƒZdede	e fdd„Zdede	e fdd„Zdee fdd„ZdS )ÚEnvironmentÚwsr)   Nc                 C   rE   r*   )Ú_ws)r-   r¤   r$   r$   r%   r.   Ñ   r1   zEnvironment.__init__c                 C   s
   | t jƒS r*   )r	   Úworking_set)rT   r$   r$   r%   ÚdefaultÔ   s   
zEnvironment.defaultÚpathsc                 C   s   | t  |¡ƒS r*   )r	   Ú
WorkingSet)rT   r¨   r$   r$   r%   Ú
from_pathsØ   s   zEnvironment.from_pathsr   c                 C   s,   t |ƒ}|  ¡ D ]}|j|kr|  S qdS )zÛFind a distribution matching the ``name`` in the environment.

        This searches from *all* distributions available in the environment, to
        match the behavior of ``pkg_resources.get_distribution()``.
        N)r   Úiter_distributionsru   )r-   r   ru   rD   r$   r$   r%   Ú_search_distributionÜ   s   
ÿz Environment._search_distributionc                 C   sD   |   |¡}|r	|S z| j |¡ W n tjy   Y d S w |   |¡S r*   )r¬   r¥   Úrequirer	   ÚDistributionNotFound)r-   r   rD   r$   r$   r%   Úget_distributionè   s   

ÿ
zEnvironment.get_distributionc                 c   s   � | j D ]}t|ƒV  qd S r*   )r¥   rC   rG   r$   r$   r%   Ú_iter_distributionsþ   s   €
ÿzEnvironment._iter_distributions)r   r    r!   r	   r©   r.   rŸ   r   r§   r   r   r"   rª   r   r¬   r¯   r   r°   r$   r$   r$   r%   r£   Ð   s    r£   )0Úemail.messager‘   Úemail.parserÚloggingrL   r}   rg   Útypingr   r   r   r   r   r   r   Úpip._vendorr	   Ú"pip._vendor.packaging.requirementsr
   Úpip._vendor.packaging.utilsr   r   Úpip._vendor.packaging.versionr   rw   Úpip._internal.exceptionsr   r   r   Úpip._internal.utils.miscr   Úpip._internal.utils.wheelr   r   Úbaser   r   r   r   r   r   Ú	getLoggerr   r�   r   r&   rC   r£   r$   r$   r$   r%   Ú<module>   s*    $ 
	# 
