U
    fj"                     @   sF  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	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Zd	d
 ZeddddddddgdZdd Zddgdgddfdddgfddgffdfdddgidfddidfdd d! d"D id#ffZejd$ed%d& Zd'd( Zd)d* Zejd+d,d-d.d/gd0d1 Zejd2d3dd4d5gd6gfd7dd4d5gd6gfd6dd4d5gd6gfd3dd8gd9d3gfd6dd:d;gd6d<gfd6d=d>d?d@dAdBgdCdDdEgfgdFdG ZejdHdIddJgfd3dd8dKgfd6ddLgfd6dd4dMgfd6dd:dNgfd6d=d>dOd@dAdBgfdPddQdRgfdPddSdTgfgdUdV Z dS )W    N)DistutilsSetupError)check_package_datacheck_specifier)Distribution   )DALS)make_nspkg_sdist)ensure_filesc              	      s   |  dtjdtjt}fdd}|dd |dd | d	d
}|	t
dj|d W 5 Q R X d }|  & t      fdd|D }W 5 Q R X dd |D |kstdS )zR
    Check multiple calls to `Distribution.fetch_build_egg` work as expected.
    indexzfile://c              	      sb     | }d| |f }tt||| | |dd}|tdj|d W 5 Q R X d S )Nz%s-%s.tar.gzz
index.htmlwz
                <!DOCTYPE html><html><body>
                <a href="{dist_sdist}" rel="internal">{dist_sdist}</a><br/>
                </body></html>
                )
dist_sdist)mkdirr   strjoinopenwriter   format)ZdistnameversionZdist_dirr   fp)r
    9lib/python3.8/site-packages/setuptools/tests/test_dist.pysdist_with_index   s    
z3test_dist_fetch_build_egg.<locals>.sdist_with_indexZ
barbazquuxz3.2.0zbarbazquux-runnerz2.11.1z	setup.cfgr   zL
            [easy_install]
            index_url = {index_url}
            )	index_urlz*
    barbazquux-runner
    barbazquux
    c                    s   g | ]}  |qS r   )Zfetch_build_egg).0r)distr   r   
<listcomp><   s     z-test_dist_fetch_build_egg.<locals>.<listcomp>c                 S   s   g | ]}|r|j qS r   )key)r   r   r   r   r   r   =   s      N)r   urllibparseZurljoinZrequestZpathname2urlr   r   r   r   r   r   splitZas_cwdr   Zparse_config_filesAssertionError)Ztmpdirr   r   r   ZreqsZresolved_distsr   )r   r
   r   test_dist_fetch_build_egg   s&    



r"   packagez0.0.1zFoo Barzfoo@bar.netzLong
descriptionzShort descriptionZoneZtwo)namer   ZauthorZauthor_emailZlong_descriptionZdescriptionkeywordsc                  C   s   t  } dg| d< dg| d< t| d}t|}|jjddgksBtt tt|d 	 |d< t|}|jjddgks|td S )NfooaZbarb)extras_requirer)   )
collectionsOrderedDictdictr   ZmetadataZprovides_extrasr!   reversedlistitems)Zextrasattrsr   r   r   r   (test_provides_extras_deterministic_orderK   s    


r1   z*.txtz*.rstz*.msg) hellor2   r3   z^'package_data' must be a dictionary mapping package names to lists of string wildcard patternsi  z5keys of 'package_data' dict must be strings (got 400)zG"values of 'package_data' dict" must be a list of strings (got '*.msg')c                 c   s   | ]
}|V  qd S )Nr   )r   xr   r   r   	<genexpr>   s     r5   	generatorzP"values of 'package_data' dict" must be a list of strings (got <generator objectzpackage_data, expected_messagec              	   C   sN   |d krt d d| d ksJtn,tjtt|d t d d|  W 5 Q R X d S )Npackage_datamatch)r   r!   pytestraisesr   reescape)r7   Zexpected_messager   r   r   test_check_package_data   s    r>   c               	   C   sR   ddd} t | }t|| | d  dddgd} tt t | }W 5 Q R X d S )Nr&   z>=3.0, !=3.1)r$   python_requiresr?   z>=3.0z!=3.1)r   r   r:   r;   r   )r0   r   r   r   r   test_check_specifier   s    
r@   c                	   C   s(   t jtdd t   W 5 Q R X d S )Nzmissing.*namer8   )r:   r;   r   r   Z_validate_metadatar   r   r   r   test_metadata_name   s    rA   zdist_name, py_module)my.pkgmy_pkg)my-pkgrC   )rC   rC   )pkgrE   c                 C   s   | | d    | d    | d    t|t| d}t|}|  |j|gks\tt|ddgi}|  |jdgkstt|ddgi}|  |jrtd S )	Nz.pysetup.py
noxfile.py)r$   src_root
py_modulesZexplicity_py_modulepackagesZexplicity_package)touchEXAMPLE_BASE_INFOr   r   set_defaultsrI   r!   )tmp_path	dist_nameZ	py_moduler0   r   r   r   r   test_dist_default_py_modules   s    
rP   z/dist_name, package_dir, package_files, packagesrB   zmy_pkg/__init__.pyzmy_pkg/mod.pyrC   rD   zmy/pkg/__init__.pyZmyzsrc/my_pkg/__init__.pyzsrc/my_pkg2/__init__.pyZmy_pkg2libZlib2)rE   pkg2zlib/__init__.pyzlib/nested/__init__.pytzlib2/__init__.pyrE   z
pkg.nestedrR   c                 C   s   t | | | d   | d   t|t| |d}t|}|  |jrPt|jrZtt|j	t|ksptt|ddgi}|  |j	rtt|jdhkstt|ddgi}|  |jrtt|j	dhkstd S )NrF   rG   )r$   rH   package_dirrI   Zexplicit_py_modulerJ   Zexplicit_package)
r	   rK   rL   r   r   rM   rI   r!   setrJ   )rN   rO   rS   package_filesrJ   r0   r   r   r   r   test_dist_default_packages   s*    




rV   z%dist_name, package_dir, package_fileszmy.pkg.nestedzmy/pkg/nested/__init__.pyzmy/pkg/file.pyz	my_pkg.pyzmy_pkg/nested/__init__.pyzsrc/my_pkg/nested/__init__.py)rC   zmy_pkg.lib2ZUNKNOWNzsrc/mod1.pyzsrc/mod2.pyzsrc/pkg1/__ini__.pyzsrc/pkg2/__init__.pyc                 C   s`   t | | tdtj| |d}|d= t|}|  |jsL|j	sLt
| |ks\t
dS )z:Make sure dist.name is discovered from packages/py_modules/)rH   rS   r$   N)r	   rL   r   ospathr    r   rM   rI   rJ   r!   Zget_name)rN   rO   rS   rU   r0   r   r   r   r   test_dist_default_name   s    
rZ   )!r*   r<   rX   Zurllib.requestr   Zurllib.parseZdistutils.errorsr   Zsetuptools.distr   r   Z
setuptoolsr   textwrapr   Ztest_easy_installr   Ztest_find_packagesr	   r:   r"   r,   rL   r1   ZCHECK_PACKAGE_DATA_TESTSZmarkZparametrizer>   r@   rA   rP   rV   rZ   r   r   r   r   <module>   s   ,

 	  2
	

!

