a
    hbòfð$  ã                   @   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$   úa/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_internal/metadata/pkg_resources.pyr      s   
r   c                   @   s”   e Zd ZdZeeef eddœdd„Zeedœdd„Z	eedœd	d
„Z
eee dœdd„Zeedœdd„Zeee dœdd„Zeeddœ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.
    N)ÚmetadataÚ
wheel_nameÚreturnc                 C   s   || _ || _d S ©N)Ú	_metadataÚ_wheel_name)Úselfr'   r(   r$   r$   r%   Ú__init__*   s    zWheelMetadata.__init__©r   r)   c                 C   s
   || j v S r*   )r+   ©r-   r   r$   r$   r%   Úhas_metadata.   s    zWheelMetadata.has_metadatac                 C   sX   z| j |  ¡ W S  tyR } z*td| j› d|› d|› d�ƒ‚W Y d }~n
d }~0 0 d S )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   r0   r$   r$   r%   Úget_metadata_lines:   s    z WheelMetadata.get_metadata_linesc                 C   s   dS ©NFr$   r0   r$   r$   r%   Úmetadata_isdir=   s    zWheelMetadata.metadata_isdirc                 C   s   g S r*   r$   r0   r$   r$   r%   Úmetadata_listdir@   s    zWheelMetadata.metadata_listdir)Úscript_nameÚ	namespacer)   c                 C   s   d S r*   r$   )r-   r;   r<   r$   r$   r%   Ú
run_scriptC   s    zWheelMetadata.run_script)r   r    r!   Ú__doc__r   r"   Úbytesr.   Úboolr1   r5   r   r7   r9   r   r:   r=   r$   r$   r$   r%   r&   $   s   	r&   c                   @   s4  e Zd Zejddœdd„Zeed dœdd„ƒZee	ed dœd	d
„ƒZ
eee dœdd„ƒZeee dœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„Zeeej dœdd„Zeedœdd„Zee dœdd„Zeej j!dœdd „ƒZ"d'e#e ee$ d"œd#d$„Z%ee dœd%d&„Z&dS )(ÚDistributionN)Údistr)   c                 C   s
   || _ d S r*   )Ú_dist©r-   rB   r$   r$   r%   r.   H   s    zDistribution.__init__)Ú	directoryr)   c           	      C   sŽ   |  tj¡}tj |¡\}}t ||¡}| d¡rJtj}tj 	|¡d }n.| d¡sXJ ‚tj
}tj 	|¡d  d¡d }||||d�}| |ƒS )Nz	.egg-infor   z
.dist-infoú-)Úproject_namer'   )ÚrstripÚosÚsepÚpathÚsplitr	   ÚPathMetadataÚendswithrA   ÚsplitextÚDistInfoDistribution)	ÚclsrE   Údist_dirÚbase_dirÚdist_dir_namer'   Údist_clsÚ	dist_namerB   r$   r$   r%   Úfrom_directoryK   s    
zDistribution.from_directory)Úwheelr   r)   c              
      sÞ   zR|  ¡ �6‰tˆ|ƒ\‰ }‡ ‡fdd„ˆ ¡ D ƒ}W d  ƒ n1 sF0    Y  W nh tjy† } zt|j|ƒ|‚W Y d}~n>d}~0  tyº } zt|› d|› �ƒ‚W Y d}~n
d}~0 0 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   éÿÿÿÿ)Ú
startswithrL   r   )Ú.0rK   ©Úinfo_dirÚzfr$   r%   Ú
<dictcomp>k   s   þz+Distribution.from_wheel.<locals>.<dictcomp>Nz has an invalid wheel, )Úlocationr'   rG   )Ú
as_zipfiler   ÚnamelistÚzipfileÚ
BadZipFiler   ra   r   r	   rP   r&   )rQ   rX   r   Ú_Úmetadata_textr4   rB   r$   r]   r%   Ú
from_wheel_   s     	
þ("(
ýzDistribution.from_wheel©r)   c                 C   s   | j jS r*   )rC   ra   ©r-   r$   r$   r%   ra   {   s    zDistribution.locationc                 C   s   | j jS r*   )rC   Úegg_inforj   r$   r$   r%   Úinfo_location   s    zDistribution.info_locationc                 C   s*   zt | jjjƒW S  ty$   Y dS 0 d S r8   )r@   rC   Ú	_providerrK   ÚAttributeErrorrj   r$   r$   r%   Úinstalled_by_distutilsƒ   s    z#Distribution.installed_by_distutilsc                 C   s   t | jjƒS r*   )r   rC   rG   rj   r$   r$   r%   Úcanonical_name�   s    zDistribution.canonical_namec                 C   s   t | jjƒS r*   )Úparse_versionrC   Úversionrj   r$   r$   r%   rr   ‘   s    zDistribution.version)rK   r)   c                 C   s   | j  t|ƒ¡S r*   )rC   r1   r"   )r-   rK   r$   r$   r%   Úis_file•   s    zDistribution.is_filec                 c   sT   t |ƒ}| j |¡st|ƒ‚| j |¡s0t|ƒ‚| j |¡D ]}t ||¡V  q<d S r*   )	r"   rC   r1   ÚFileNotFoundErrorÚisdirÚNotADirectoryErrorr:   ÚpathlibÚPurePosixPath)r-   rK   r   Úchildr$   r$   r%   Úiterdir˜   s    zDistribution.iterdirc                 C   s>   t |ƒ}| j |¡st|ƒ‚| j |¡}|d u r:t| |ƒ‚|S r*   )r"   rC   r1   rt   r5   r   )r-   rK   r   Úcontentr$   r$   r%   Ú	read_text¡   s    
zDistribution.read_textc                 c   sZ   | j  ¡  ¡ D ]F\}}| ¡ D ]4\}}t|ƒ d¡\}}}t| ¡ | ¡ |d�V  qqd S )Nú=)r   r   r   )rC   Úget_entry_mapÚitemsr"   Ú	partitionr   Ústrip)r-   r   Úentriesr   Úentry_pointrf   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yd   | jrFt| jƒ}n
t| jƒ}t	 
d|¡ d}Y n0 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Ú )Ú
isinstancerC   r	   rP   r|   rt   ra   r   ÚreprÚloggerÚwarningÚemailÚparserÚ
FeedParserÚfeedÚclose)r-   Úmetadata_namer'   Údisplaying_pathÚfeed_parserr$   r$   r%   r'   °   s    



zDistribution.metadatar$   )Úextrasr)   c                 C   s"   |rt |ƒ | jj¡}| j |¡S r*   )Ú	frozensetÚintersectionrC   r“   Úrequires)r-   r“   r$   r$   r%   Úiter_dependenciesÇ   s    zDistribution.iter_dependenciesc                 C   s   | j jS r*   )rC   r“   rj   r$   r$   r%   Úiter_provided_extrasÌ   s    z!Distribution.iter_provided_extras)r$   )'r   r    r!   r	   rA   r.   Úclassmethodr"   rW   r   rh   Úpropertyr   ra   rl   r@   ro   r   rp   r   rr   r   rs   r   rw   rx   rz   r|   r   r   r„   r‹   ÚmessageÚMessager'   r   r
   r—   r˜   r$   r$   r$   r%   rA   G   s.   			rA   c                   @   s†   e Zd Zejddœdd„Zeedœdd„ƒZee	e
e  edœd	d
„ƒZee	e dœdd„Zee	e dœdd„Zee dœdd„ZdS )ÚEnvironmentN)Úwsr)   c                 C   s
   || _ d S r*   )Ú_ws)r-   rž   r$   r$   r%   r.   Ñ   s    zEnvironment.__init__ri   c                 C   s
   | t jƒS r*   )r	   Úworking_set)rQ   r$   r$   r%   ÚdefaultÔ   s    zEnvironment.default)Úpathsr)   c                 C   s   | t  |¡ƒS r*   )r	   Ú
WorkingSet)rQ   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_distributionsrp   )r-   r   rp   rB   r$   r$   r%   Ú_search_distributionÜ   s
    

z Environment._search_distributionc                 C   sD   |   |¡}|r|S z| j |¡ W n tjy8   Y d S 0 |   |¡S r*   )r¦   rŸ   Úrequirer	   ÚDistributionNotFound)r-   r   rB   r$   r$   r%   Úget_distributionè   s    

zEnvironment.get_distributionc                 c   s   | j D ]}t|ƒV  qd S r*   )rŸ   rA   rD   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ÚloggingrI   rw   rd   Útypingr   r   r   r   r   r   r   Úpip._vendorr	   Ú"pip._vendor.packaging.requirementsr
   Úpip._vendor.packaging.utilsr   r   Zpip._vendor.packaging.versionr   rq   Úpip._internal.exceptionsr   r   r   Úpip._internal.utils.miscr   Úpip._internal.utils.wheelr   r   Úbaser   r   r   r   r   r   Ú	getLoggerr   r‰   r   r&   rA   r�   r$   r$   r$   r%   Ú<module>   s(   $ 	
# 
