U
    ui;K                     @  s  U d Z ddlm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ZddlZddlmZ ddlZddl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 d
dlmZ ddl m!Z! ddl"m#Z# de$fddddddddfddddddddfddddddddfddd d!d"d#d$dffZ%ej&j'd%e%d&d' e%D d(d)d* Z(ej)dd+d,Z*d-d. Z+d/d0 Z,d1d2 Z-d3d4 Z.G d5d6 d6Z/e0d7d8d9d:iie0d8gd;e,d<d=d>d?d@gd9gdAidBe0dCe0dDdEdFe0dGdHedIie0dJdHgfgdKe,d<d=d>d?d@gdHgdLidBe0dMdNedOie0e/dPdMdNgdQgdRe,dSdTdUd=d>d?d@gigidBe0dVdWedXie0dWgdYe,d<dWdUd=d>d?d@gigidBe0dZed[ed\d]e0d^d_gd`e,d<dUd=d>d?d@dad^d_gigiidBe0dbdce,d<dUd=d>d?ddd@giiededfe0dgdhej1 edidje0dkdlej1 dme0dndodpdqiedrdse0dtdpduej1 iedvdwe0dxdydpdzied{dse0d|d8d}d9d:iiie0d8gd~gde,d<ddUd=d>d?dd@gid8d9d}d9gigigidBe0ddd9diie0dgdgde,d<ddUd=d>d?dd@gidd9gigidBe0dd8d:dHedidie0d8gddgfgde,d<d=d>d?d@gd9dJdHgigdAidBfZ2de3d< ej&j'de2dd' e2D d(dd Z4dd Z5dd Z6dd Z7dd Z8dS )zwheel tests    )annotationsN)Any)path	parse_tag)canonicalize_name)PY_MAJORDistributionPathMetadata)Wheel   )tempdir)DALS)get_config_var)get_platformzinvalid.whlz&simplewheel-2.0-1-py2.py3-none-any.whlZsimplewheelz2.01zpy2.py3noneany)project_nameversionbuild
py_versionabiplatformz$simple.dist-0.1-py2.py3-none-any.whlzsimple.distz0.1z example_pkg_a-1-py3-none-any.whlZexample_pkg_aZpy3z9PyQt5-5.9-5.9.1-cp35.cp36.cp37-abi3-manylinux1_x86_64.whlZPyQt5z5.9z5.9.1zcp35.cp36.cp37abi3Zmanylinux1_x86_64filenameinfoc                 C  s   g | ]}|d  qS )r    .0tr   r   ?/tmp/pip-unpacked-wheel-9osl9suo/setuptools/tests/test_wheel.py
<listcomp>Q   s     r#   )idsc              	     sV   t |r,t| t|  W 5 Q R X d S t|   fdd| D |ksRtd S )Nc                   s   i | ]}|t  |qS r   )getattr)r    kwr   r"   
<dictcomp>Y   s      z#test_wheel_info.<locals>.<dictcomp>)inspectisclasspytestraisesr   keysAssertionErrorr   r   r'   r"   test_wheel_infoP   s    
r0   c              	   k  sz   dt d| di}| r$||  t F}t|| tjtj	dddf|d t

tj|ddd	 V  W 5 Q R X d S )
Nsetup.pyz
            # -*- coding: utf-8 -*-
            from setuptools import setup
            import setuptools
            setup(**%r)
            utf-8-qbdist_wheelcwddist*.whlr   )r   encodeupdater   r   r   
subprocess
check_callsys
executableglobosjoin)extra_file_defskwargs	file_defs
source_dirr   r   r"   build_wheel\   s&    

 rF   c              
   C  sH   t  }t| D ]2\}}}|D ]"}|tjtj|| | qq|S N)setr@   walkaddr   rA   relpath)rootcontentsdirpathdirnames	filenamesr   r   r   r"   tree_setu   s
    "rQ   c                   sr   t  }|  D ]^\ }t|tr(t|}|D ]>}t|trV| fddt|D O }q,|tj | q,q|S )z8Flatten nested dicts and lists into a full list of pathsc                   s   h | ]}t j |qS r   )r@   r   rA   )r    valnoder   r"   	<setcomp>   s     zflatten_tree.<locals>.<setcomp>)	rH   items
isinstancedictflatten_treerJ   r@   r   rA   )treeoutputrM   elemr   rS   r"   rY   }   s    

rY   c                 C  s   dd | D S )Nc                 S  s*   h | ]"}|j tt td p tddqS )
EXT_SUFFIXSO)r   r   Z	shlib_ext)formatr   r   r   )r    xr   r   r"   rU      s   z&format_install_tree.<locals>.<setcomp>r   )rZ   r   r   r"   format_install_tree   s    ra   c                 C  s   t | }tj|| }|| |d k	rRt|}t|}	||	sRt	||	 t
|tj|d}
tj||
d}|j|kst	|j|kst	|d kr|drt	n||d kst	d S )NEGG-INFO)metadatarequires.txt)r   r@   r   rA   egg_nameZinstall_as_eggra   rQ   issubsetr/   r
   r	   from_filenamer   r   has_metadataget_metadatalstrip)r   install_dirZinstall_tree_includesr   r   requires_txtr(   Zegg_pathinstall_treeexprc   r7   r   r   r"   _check_wheel_install   s    
ro   c                   @  s"   e Zd Zdd ZddddZdS )Recordc                 K  s   || _ || _d S rG   Z_id_fields)selfidrC   r   r   r"   __init__   s    zRecord.__init__str)returnc                 C  s   d| j | jf S )Nz%s(**%r)rq   )rs   r   r   r"   __repr__   s    zRecord.__repr__N)__name__
__module____qualname__ru   rx   r   r   r   r"   rp      s   rp   basicfoo__init__.py )packagesfoo-1.0-py{py_version}.eggPKG-INFORECORDWHEELtop_level.txt)rb   r}   rt   rD   setup_kwargsrm   r2   u   Description accentuée)description)rt   r   datazdata.txtz.
                Some data...
                data_dir)
data_files)rb   r   	extensionzextension.can  
                #include "Python.h"

                #if PY_MAJOR_VERSION >= 3

                static struct PyModuleDef moduledef = {
                        PyModuleDef_HEAD_INIT,
                        "extension",
                        NULL,
                        0,
                        NULL,
                        NULL,
                        NULL,
                        NULL,
                        NULL
                };

                #define INITERROR return NULL

                PyMODINIT_FUNC PyInit_extension(void)

                #else

                #define INITERROR return

                void initextension(void)

                #endif
                {
                #if PY_MAJOR_VERSION >= 3
                    PyObject *module = PyModule_Create(&moduledef);
                #else
                    PyObject *module = Py_InitModule("extension", NULL);
                #endif
                    if (module == NULL)
                        INITERROR;
                #if PY_MAJOR_VERSION >= 3
                    return module;
                #endif
                }
                zsetuptools.Extension)namesources)ext_modulesz%foo-1.0-py{py_version}-{platform}.eggzextension{shlib_ext}rb   headerzheader.hz
                )headersscriptX
                #/usr/bin/python
                print('hello world!')
                N
                #/bin/sh
                echo 'hello world!'
                	script.py	script.shr   r   scriptsr   Z	requires1zfoobar==2.0rd   z%
            foobar==2.0
            )rt   install_requiresrm   rl   Z	requires2z:
        bar
        foo<=2.0; %r in sys_platform
        z2
            bar
            foo<=2.0
            )rt   r   rl   Z	requires3z)
        bar; %r != sys_platform
        )rt   r   Z	requires4z
        foo
        extrazfoobar>3zG
            foo

            [extra]
            foobar>3
            )rt   r   extras_requirerl   Z	requires5zfoobar; %r != sys_platformz!
            [extra]
            )rt   r   rl   Zrequires_ensure_orderz9
        foo
        bar
        baz
        qux
        za
            foobar>3
            barbaz>4
            bazqux>5
            quxzap>6
            z
            foo
            bar
            baz
            qux

            [extra]
            foobar>3
            barbaz>4
            bazqux>5
            quxzap>6
            Znamespace_packagebarzfoo.bar)Znamespace_packagesr   z foo-1.0-py{py_version}-nspkg.pthznamespace_packages.txtZempty_namespace_packageZfoobarz7__import__('pkg_resources').declare_namespace(__name__)Zdata_in_packagez>
                        Some data...
                        )r~   r   zfoo/data_dirzfoo/data_dir/data.txt)r   r   ztuple[dict[str, Any], ...]WHEEL_INSTALL_TESTSparamsc                 C  s   g | ]}|d  qS )rt   r   )r    r   r   r   r"   r#   ,  s     c              
   C  s   |  dd}|  dd}|  dg }|  di }|  dd }|  d}|  d	i }|  d
i }tf |||||d|*}	t }
t|	|
|||| W 5 Q R X W 5 Q R X d S )Nr   r}   r   1.0r   r   rl   rm   rD   r   r   r   r   r   rB   )getrF   r   ro   )r   r   r   r   r   rl   rm   rD   r   r   rk   r   r   r"   test_wheel_install)  s:    
      r   c               
   C  sh   d} d}t | |dJ}t 8}|| t| }t|| t||d t| |d  W 5 Q R X W 5 Q R X d S )NZFoo_Barr   )r   r   )rF   r   replacer   shutilmovero   )r   r   r   rk   Znew_filenamer   r   r"   test_wheel_install_pep_503D  s(     r   c                  C  s   d} d}d | |}t ^}tj||}t|d  t .}t	t
 t||d | |d  W 5 Q R X W 5 Q R X W 5 Q R X d S )NZ
nodistinfor   z{0}-{1}-py2.py3-none-any.whlr(   )r_   r   r@   r   rA   zipfileZipFilecloser,   r-   
ValueErrorro   )r   r   
wheel_namerE   
wheel_pathrk   r   r   r"   test_wheel_no_dist_dirW  s          r   c                 C  s(   dd }|  d| td s$td S )Nc                   S  s   dd t dD S )Nc                 S  s   h | ]}|j |j|jfqS r   )interpreterr   r   r   r   r   r"   rU   h  s   z=test_wheel_is_compatible.<locals>.sys_tags.<locals>.<setcomp>zcp36-cp36m-manylinux1_x86_64r   r   r   r   r"   sys_tagsg  s    z*test_wheel_is_compatible.<locals>.sys_tagsz$setuptools.wheel._get_supported_tagsz2onnxruntime-0.1.2-cp36-cp36m-manylinux1_x86_64.whl)setattrr   is_compatibler/   )Zmonkeypatchr   r   r   r"   test_wheel_is_compatiblef  s    r   c                  C  s>  t jddd} tdtdtddtddgd	td
ddddddddgigiid}|dd}|dd}|d}|di }|di }| f ||g i |d|}t x}t|||||d  t|}	t	
||	  }
|
d d d }| sttjdkr&tt| jdks&tW 5 Q R X W 5 Q R X d S )Nc              	   {  s   dt d| di}| r$||  t `}t|| t|d }t	|d t
jtjdddf|d ttj|d	d
d V  W 5 Q R X d S )Nr1   z
                # -*- coding: utf-8 -*-
                from setuptools import setup
                import setuptools
                setup(**%r)
                r2   r   i  r3   r4   r5   r7   r8   r   )r   r9   r:   r   r   r   pathlibPathr@   chmodr;   r<   r=   r>   r?   rA   )rB   rC   rD   rE   Zrunshr   r   r"   rF   r  s*    

 z$test_wheel_mode.<locals>.build_wheelr   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   r   r}   r   r   rm   rD   r   r   win32Z0o777)N)
contextlibcontextmanagerrX   r   rY   r   r   ro   r   r   r   re   existsr/   r=   r   octstatS_IMODEst_mode)rF   r   r   r   rm   rD   r   r   rk   r(   baseZ	script_shr   r   r"   test_wheel_modeq  st    
 
      r   )N)9__doc__
__future__r   r   r?   r*   r@   r   r   r   r;   r=   r   typingr   r,   Zjaracor   Zpackaging.tagsr   Zpackaging.utilsr   pkg_resourcesr   r	   r
   Zsetuptools.wheelr   Zcontextsr   textwrapr   distutils.sysconfigr   distutils.utilr   r   ZWHEEL_INFO_TESTSmarkZparametrizer0   r   rF   rQ   rY   ra   ro   rp   rX   r   r   __annotations__r   r   r   r   r   r   r   r   r"   <module>   s  1  
	

 

 -  D 
    
 
! 
    r
