U
    ;»{j.)  ã                   @   sB  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 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$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z* dddgZ+e ,e-¡Z.dZ/G dd„ deƒZ0G dd„ dƒZ1G dd„ de&ƒZ2G dd„ de(ƒZ3dS )é    N)Ú
CollectionÚIterableÚIteratorÚListÚMappingÚ
NamedTupleÚOptional)Úpkg_resources)ÚRequirement)ÚNormalizedNameÚcanonicalize_name)ÚVersion)Úparse)ÚInvalidWheelÚNoneMetadataErrorÚUnsupportedWheel)Úegg_link_path_from_location)Údisplay_pathÚnormalize_path)Úparse_wheelÚread_wheel_metadata_fileé   )ÚBaseDistributionÚBaseEntryPointÚBaseEnvironmentÚInfoPathÚWheelÚNAMEÚDistributionÚEnvironmentr	   c                   @   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)   úE/tmp/pip-install-zsn1f9xv/pip/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 )ÚInMemoryMetadataz”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__6   s    zInMemoryMetadata.__init__©r!   r.   c                 C   s
   || j kS r/   )r0   ©r2   r!   r)   r)   r*   Úhas_metadata:   s    zInMemoryMetadata.has_metadatac                 C   sV   z| j |  ¡ W S  tk
rP } z"td| j› d|› d|› d�ƒ‚W 5 d }~X Y nX d S )NzError decoding metadata for z: z in z file)r0   ÚdecodeÚUnicodeDecodeErrorr   r1   )r2   r!   Úer)   r)   r*   Úget_metadata=   s    ÿzInMemoryMetadata.get_metadatac                 C   s   t  |  |¡¡S r/   )r	   Úyield_linesr:   r5   r)   r)   r*   Úget_metadata_linesF   s    z#InMemoryMetadata.get_metadata_linesc                 C   s   dS ©NFr)   r5   r)   r)   r*   Úmetadata_isdirI   s    zInMemoryMetadata.metadata_isdirc                 C   s   g S r/   r)   r5   r)   r)   r*   Úmetadata_listdirL   s    z!InMemoryMetadata.metadata_listdir)Úscript_nameÚ	namespacer.   c                 C   s   d S r/   r)   )r2   r@   rA   r)   r)   r*   Ú
run_scriptO   s    zInMemoryMetadata.run_script)r$   r%   r&   Ú__doc__r   r'   Úbytesr3   Úboolr6   r:   r   r<   r>   r   r?   rB   r)   r)   r)   r*   r+   0   s   	r+   c                   @   s†  e Zd Zejddœdd„Zeeee	f dœdd„ƒZ
ee	edœd	d
„ƒZeee	e	edœdd„ƒZeee	edœdd„ƒZ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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	dœd$d%„Z e!e" dœd&d'„Z#e$j%j&dœd(d)„Z'd0e(e	 e!e) d+œd,d-„Z*e!e dœd.d/„Z+dS )1r   N)Údistr.   c                 C   s   || _ d | _d S r/   )Ú_distÚ_Distribution__extra_mapping©r2   rF   r)   r)   r*   r3   T   s    zDistribution.__init__©r.   c                 C   s$   | j d krdd„ | jjD ƒ| _ | j S )Nc                 S   s   i | ]}t |ƒ|“qS r)   )r   ©Ú.0Úextrar)   r)   r*   Ú
<dictcomp>]   s     z/Distribution._extra_mapping.<locals>.<dictcomp>)rH   rG   Úextras©r2   r)   r)   r*   Ú_extra_mappingZ   s
    
ÿzDistribution._extra_mapping)Ú	directoryr.   c           	      C   sŽ   |  tj¡}tj |¡\}}t ||¡}| d¡rJtj}tj 	|¡d }n.| d¡sXt
‚tj}tj 	|¡d  d¡d }||||d�}| |ƒS )Nz	.egg-infor   z
.dist-infoú-)Úproject_namer,   )ÚrstripÚosÚsepÚpathÚsplitr	   ÚPathMetadataÚendswithr   ÚsplitextÚAssertionErrorÚDistInfoDistribution)	ÚclsrR   Údist_dirÚbase_dirÚdist_dir_namer,   Údist_clsÚ	dist_namerF   r)   r)   r*   Úfrom_directoryc   s    
zDistribution.from_directory)Úmetadata_contentsÚfilenamerT   r.   c                 C   s&   d|i}t j|t||ƒ|d�}| |ƒS )NÚMETADATA©Úlocationr,   rT   )r	   r^   r+   )r_   rf   rg   rT   Úmetadata_dictrF   r)   r)   r*   Úfrom_metadata_file_contentsw   s     ÿýz(Distribution.from_metadata_file_contents)Úwheelr!   r.   c              
      sÆ   z>|  ¡ �,‰tˆ|ƒ\‰ }‡ ‡fdd„ˆ ¡ D ƒ}W 5 Q R X W nd tjk
rp } zt|j|ƒ|‚W 5 d }~X Y n4 tk
r¢ } zt|› d|› �ƒ‚W 5 d }~X Y nX tj	|jt
||jƒ|d�}| |ƒS )Nc                    s4   i | ],}|  ˆ › d �¡r| d d¡d tˆ|ƒ“qS )ú/r   éÿÿÿÿ)Ú
startswithrY   r   )rL   rX   ©Úinfo_dirÚzfr)   r*   rN   �   s   þ z+Distribution.from_wheel.<locals>.<dictcomp>z has an invalid wheel, ri   )Z
as_zipfiler   ÚnamelistÚzipfileÚ
BadZipFiler   rj   r   r	   r^   r+   )r_   rm   r!   Ú_rk   r9   rF   r)   rq   r*   Ú
from_wheelˆ   s     
þ$
ýzDistribution.from_wheelc                 C   s   | j jS r/   )rG   rj   rP   r)   r)   r*   rj   �   s    zDistribution.locationc                 C   s.   t | jƒ}|r|}n| jr"| j}nd S t|ƒS r/   )r   Zraw_namerj   r   )r2   Úegg_linkrj   r)   r)   r*   Úinstalled_location¡   s    
zDistribution.installed_locationc                 C   s   | j jS r/   )rG   Úegg_inforP   r)   r)   r*   Úinfo_location¬   s    zDistribution.info_locationc                 C   s,   zt | jjjƒW S  tk
r&   Y dS X d S r=   )rE   rG   Ú	_providerrX   ÚAttributeErrorrP   r)   r)   r*   Úinstalled_by_distutils°   s    z#Distribution.installed_by_distutilsc                 C   s   t | jjƒS r/   )r   rG   rT   rP   r)   r)   r*   Úcanonical_nameº   s    zDistribution.canonical_namec                 C   s   t | jjƒS r/   )Úparse_versionrG   ÚversionrP   r)   r)   r*   r‚   ¾   s    zDistribution.versionc                 C   s   | j jS r/   )rG   r‚   rP   r)   r)   r*   Úraw_versionÂ   s    zDistribution.raw_version)rX   r.   c                 C   s   | j  t|ƒ¡S r/   )rG   r6   r'   )r2   rX   r)   r)   r*   Úis_fileÆ   s    zDistribution.is_filec                 c   s   | j  d¡E d H  d S )NÚscripts)rG   r?   rP   r)   r)   r*   Úiter_distutils_script_namesÉ   s    z(Distribution.iter_distutils_script_namesc                 C   s>   t |ƒ}| j |¡st|ƒ‚| j |¡}|d kr:t| |ƒ‚|S r/   )r'   rG   r6   ÚFileNotFoundErrorr:   r   )r2   rX   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#   )rG   Úget_entry_mapÚitemsr'   Ú	partitionr    Ústrip)r2   r#   Úentriesr!   Zentry_pointrw   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k
rf   | jrHt| jƒ}n
t| jƒ}t	 
d|¡ d}Y nX tj ¡ }| |¡ | ¡ S )z�
        :raises NoneMetadataError: if the distribution reports `has_metadata()`
            True but `get_metadata()` returns None.
        rh   zPKG-INFOzNo metadata found in %sÚ )Ú
isinstancerG   r	   r^   r‰   r‡   rj   r   ÚreprÚloggerÚwarningÚemailÚparserÚ
FeedParserÚfeedÚclose)r2   Úmetadata_namer,   Zdisplaying_pathÚfeed_parserr)   r)   r*   Ú_metadata_implÛ   s    



zDistribution._metadata_implr)   )rO   r.   c                    s:   |r.t ˆ jƒt tt|ƒƒ@ }‡ fdd„|D ƒ}ˆ j |¡S )Nc                    s   g | ]}ˆ j | ‘qS r)   )rQ   rK   rP   r)   r*   Ú
<listcomp>ö   s     z2Distribution.iter_dependencies.<locals>.<listcomp>)ÚsetrQ   Úmapr   rG   Úrequires)r2   rO   Zrelevant_extrasr)   rP   r*   Úiter_dependenciesñ   s    
ÿzDistribution.iter_dependenciesc                 C   s
   | j  ¡ S r/   )rQ   ÚkeysrP   r)   r)   r*   Úiter_provided_extrasù   s    z!Distribution.iter_provided_extras)r)   ),r$   r%   r&   r	   r   r3   Úpropertyr   r   r'   rQ   Úclassmethodr   re   rD   rl   r   rx   r   rj   rz   r|   rE   r   r€   r   r‚   rƒ   r   r„   r   r†   r‰   r   r   r�   r–   ÚmessageÚMessager�   r   r
   r¢   r¤   r)   r)   r)   r*   r   S   sD   û
		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 dœdd„Zee	e dœdd„Zee	e dœdd„ZdS )r   N)Úwsr.   c                 C   s
   || _ d S r/   )Ú_ws)r2   r©   r)   r)   r*   r3   þ   s    zEnvironment.__init__rJ   c                 C   s
   | t jƒS r/   )r	   Úworking_set)r_   r)   r)   r*   Údefault  s    zEnvironment.default)Úpathsr.   c                 C   s   | t  |¡ƒS r/   )r	   Ú
WorkingSet)r_   r­   r)   r)   r*   Ú
from_paths  s    zEnvironment.from_pathsc                 c   s   | j D ]}t|ƒV  qd S r/   )rª   r   rI   r)   r)   r*   Ú_iter_distributions	  s    
zEnvironment._iter_distributionsr4   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   Ziter_all_distributionsr€   )r2   r!   r€   rF   r)   r)   r*   Ú_search_distribution  s
    

z Environment._search_distributionc                 C   sF   |   |¡}|r|S z| j |¡ W n tjk
r:   Y d S X |   |¡S r/   )r±   rª   Úrequirer	   ÚDistributionNotFound)r2   r!   rF   r)   r)   r*   Úget_distribution  s    

zEnvironment.get_distribution)r$   r%   r&   r	   r®   r3   r¦   r   r¬   r   r   r'   r¯   r   r   r°   r±   r´   r)   r)   r)   r*   r   ý   s   )4Úemail.messager–   Úemail.parserÚloggingrV   ru   Útypingr   r   r   r   r   r   r   Úpip._vendorr	   Z"pip._vendor.packaging.requirementsr
   Úpip._vendor.packaging.utilsr   r   Zpip._vendor.packaging.versionr   r   r�   Úpip._internal.exceptionsr   r   r   Zpip._internal.utils.egg_linkr   Úpip._internal.utils.miscr   r   Zpip._internal.utils.wheelr   r   Úbaser   r   r   r   r   Ú__all__Ú	getLoggerr$   r”   r   r    r+   r   r   r)   r)   r)   r*   Ú<module>   s.   $


# +