U
    aÊ¹j´!  ã                   @   sô   d Z 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ZddlZddl	m
Z
 ddlmZ ddlmZ ddlZddlmZ ddlmZmZ dd	lmZ dd
lmZ e dej¡jZdZejdd�dd„ ƒZ dd„ Z!ej"dd„ ƒZ#G dd„ dƒZ$dS )zWheels support.é    N©Úsys_tags)Úcanonicalize_name)ÚVersion)Ú_unpack_zipfile_obj)Ú_egg_basenameÚwrite_requirementsé   )Ú_read_utf8_with_fallback)Úget_platformz‚^(?P<project_name>.+?)-(?P<version>\d.*?)
    ((-(?P<build>\d.*?))?-(?P<py_version>.+?)-(?P<abi>.+?)-(?P<platform>.+?)
    )\.whl$z8__import__('pkg_resources').declare_namespace(__name__)
)Úmaxsizec                   C   s   dd„ t ƒ D ƒS )Nc                 S   s   h | ]}|j |j|jf’qS © )ÚinterpreterÚabiÚplatform©Ú.0Útr   r   úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/wheel.pyÚ	<setcomp>'   s     z&_get_supported_tags.<locals>.<setcomp>r   r   r   r   r   Ú_get_supported_tags"   s    r   c                 C   sÞ   t  | ¡D ]¢\}}}t j || ¡}|D ].}t j ||¡}t j |||¡}t  ||¡ q&ttt|ƒƒƒD ]D\}	}
t j ||
¡}t j |||
¡}t j 	|¡sft  ||¡ ||	= qfq
t j| dd�D ]\}}}|rÎt
‚t  |¡ q¼dS )zDMove everything under `src_dir` to `dst_dir`, and delete the former.T)ÚtopdownN)ÚosÚwalkÚpathÚrelpathÚjoinÚrenamesÚreversedÚlistÚ	enumerateÚexistsÚAssertionErrorÚrmdir)Úsrc_dirZdst_dirÚdirpathÚdirnamesÚ	filenamesÚsubdirÚfÚsrcÚdstÚnÚdr   r   r   Úunpack*   s    
r.   c               	   c   s4   ddl m}  |  | j¡}z
dV  W 5 |  |¡ X dS )z*
    Temporarily disable info traces.
    r   )ÚlogN)Ú	distutilsr/   Úset_thresholdÚWARN)r/   Zsavedr   r   r   Údisable_info_traces@   s
    
r3   c                   @   sh   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZdS )ÚWheelc                 C   sP   t tj |¡ƒ}|d kr$td| ƒ‚|| _| ¡  ¡ D ]\}}t| ||ƒ q6d S )Nzinvalid wheel name: %r)	Ú
WHEEL_NAMEr   r   ÚbasenameÚ
ValueErrorÚfilenameÚ	groupdictÚitemsÚsetattr)Úselfr8   ÚmatchÚkÚvr   r   r   Ú__init__O   s    zWheel.__init__c                 C   s&   t  | j d¡| j d¡| j d¡¡S )z>List tags (py_version, abi, platform) supported by this wheel.Ú.)Ú	itertoolsÚproductÚ
py_versionÚsplitr   r   ©r<   r   r   r   ÚtagsW   s
    


ýz
Wheel.tagsc                 C   s   t dd„ |  ¡ D ƒdƒS )z2Is the wheel compatible with the current platform?c                 s   s   | ]}|t ƒ krd V  qdS )TN)r   r   r   r   r   Ú	<genexpr>a   s     
 z&Wheel.is_compatible.<locals>.<genexpr>F)ÚnextrG   rF   r   r   r   Úis_compatible_   s    zWheel.is_compatiblec                 C   s&   t | j| j| jdkrd ntƒ d�d S )NÚany)r   z.egg)r   Úproject_nameÚversionr   r   rF   r   r   r   Úegg_namec   s    ýûÿzWheel.egg_namec                 C   sJ   |  ¡ D ]4}t |¡}| d¡rt|ƒ t| jƒ¡r|  S qtdƒ‚d S )Nz
.dist-infoz.unsupported wheel format. .dist-info not found)ÚnamelistÚ	posixpathÚdirnameÚendswithr   Ú
startswithrL   r7   )r<   ÚzfÚmemberrQ   r   r   r   Úget_dist_infom   s    
ÿ
zWheel.get_dist_infoc              	   C   s(   t  | j¡�}|  ||¡ W 5 Q R X dS )z"Install wheel as an egg directory.N)ÚzipfileÚZipFiler8   Ú_install_as_egg)r<   Údestination_eggdirrT   r   r   r   Úinstall_as_eggw   s    zWheel.install_as_eggc                 C   s\   d| j | jf }|  |¡}d| }tj |d¡}|  ||||¡ |  ||¡ |  ||¡ d S )Nz%s-%sz%s.dataúEGG-INFO)	rL   rM   rV   r   r   r   Ú_convert_metadataÚ_move_data_entriesÚ_fix_namespace_packages)r<   rZ   rT   Zdist_basenameÚ	dist_infoÚ	dist_dataÚegg_infor   r   r   rY   |   s    
zWheel._install_as_eggc              	      s2  dd l }‡‡fdd„}|dƒ}t| d¡ƒ}tdƒ|  koFtdƒk n  }|s\td| ƒ‚tˆ|ƒ tj |ˆ¡‰|jj	|ˆ| 
|ˆ¡d	�‰ d
d„ ‰ttˆˆ  ¡ ƒƒ‰‡ ‡‡fdd„ˆ jD ƒ}	t ˆ|¡ t tj |d¡tj |d¡¡ tjtˆ|	d�d�}
tƒ �" t|
 d¡d tj |d¡ƒ W 5 Q R X d S )Nr   c              
      sH   ˆ  t ˆ | ¡¡�,}| ¡  d¡}tj ¡  |¡W  5 Q R £ S Q R X d S )Núutf-8)	ÚopenrP   r   ÚreadÚdecodeÚemailÚparserÚParserÚparsestr)ÚnameÚfpÚvalue)r`   rT   r   r   Úget_metadataŠ   s    z-Wheel._convert_metadata.<locals>.get_metadataÚWHEELzWheel-Versionz1.0z2.0dev0z$unsupported wheel format version: %s)Úmetadatac                 S   s   d | _ t| ƒS ©N)ÚmarkerÚstr)Úreqr   r   r   Úraw_req¢   s    z(Wheel._convert_metadata.<locals>.raw_reqc              	      s.   i | ]&}|‡fd d„t ˆˆ  |f¡ƒD ƒ“qS )c                    s   g | ]}|ˆ kr|‘qS r   r   )r   rt   )Úinstall_requiresr   r   Ú
<listcomp>¨   s   þz6Wheel._convert_metadata.<locals>.<dictcomp>.<listcomp>)ÚmapÚrequires)r   Úextra)Údistrv   ru   r   r   Ú
<dictcomp>§   s
   û 
þz+Wheel._convert_metadata.<locals>.<dictcomp>ÚMETADATAzPKG-INFO)rv   Úextras_require)Úattrsrb   zrequires.txt)Úpkg_resourcesÚparse_versionÚgetr7   r   r   r   r   ÚDistributionÚfrom_locationÚPathMetadatar   rx   ry   ÚextrasÚrenameÚ
setuptoolsÚdictr3   r   Úget_command_obj)rT   rZ   r`   rb   r€   rn   Úwheel_metadataÚwheel_versionZwheel_v1r~   Z
setup_distr   )r{   r`   rv   ru   rT   r   r]   †   sH     

ý	úþþÿýzWheel._convert_metadatac                    sâ   t j | ˆ ¡‰ t j ˆ d¡}t j |¡rœt j | dd¡}t  |¡ t  |¡D ]D}| d¡rpt  t j ||¡¡ qLt  t j ||¡t j ||¡¡ qLt  	|¡ t
t jj‡ fdd„dD ƒƒD ]}t|| ƒ q¸t j ˆ ¡rÞt  	ˆ ¡ dS )z,Move data entries to their correct location.Úscriptsr\   z.pycc                 3   s   | ]}t j ˆ |¡V  qd S rq   )r   r   r   )r   r-   ©ra   r   r   rH   Ö   s   ÿz+Wheel._move_data_entries.<locals>.<genexpr>)ÚdataÚheadersÚpurelibÚplatlibN)r   r   r   r!   ÚmkdirÚlistdirrR   Úunlinkr‡   r#   Úfilterr.   )rZ   ra   Zdist_data_scriptsZegg_info_scriptsÚentryr(   r   rŽ   r   r^   Á   s,    

þ

þþzWheel._move_data_entriesc              
   C   s    t j | d¡}t j |¡rœt|ƒ ¡ }|D ]p}t jj|f| d¡žŽ }t j |d¡}t j |¡sjt  |¡ t j |¡s*t|ddd��}| t	¡ W 5 Q R X q*d S )Nznamespace_packages.txtrA   z__init__.pyÚwrc   )Úencoding)
r   r   r   r!   r
   rE   r“   rd   ÚwriteÚNAMESPACE_PACKAGE_INIT)rb   rZ   Únamespace_packagesÚmodZmod_dirZmod_initrl   r   r   r   r_   ß   s    
zWheel._fix_namespace_packagesN)Ú__name__Ú
__module__Ú__qualname__r@   rG   rJ   rN   rV   r[   rY   Ústaticmethodr]   r^   r_   r   r   r   r   r4   N   s   



:
r4   )%Ú__doc__Ú
contextlibrg   Ú	functoolsrB   r   rP   ÚrerW   Zpackaging.tagsr   Zpackaging.utilsr   Zpackaging.versionr   r�   rˆ   Zsetuptools.archive_utilr   Zsetuptools.command.egg_infor   r   Zunicode_utilsr
   Údistutils.utilr   ÚcompileÚVERBOSEr=   r5   r›   Ú	lru_cacher   r.   Úcontextmanagerr3   r4   r   r   r   r   Ú<module>   s6   ü


