o
    Zh                     @   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mZ ddlZddl	Z	ddl
mZ ddlmZ eejjddZG d	d
 d
ZG dd dZdd Zdd ZdS )z$Test .dist-info style distributions.    N)partial)unpack_archive   )DALSutf-8encodingc                   @   sd   e Zd ZedZedd Zejdd Z	dd Z
dd	 Zd
d Zdd Zejdddd ZdS )TestDistInfoz
        Metadata-Version: 1.2
        Requires-Dist: splort (==4)
        Provides-Extra: baz
        Requires-Dist: quux (>=1.1); extra == 'baz'
        c                 K   s"   dd |  D }| jd| S )Nc                 s   s&    | ]\}}d j di t V  qdS )z{key}: {value}
N )formatlocals).0keyvaluer
   r
   V/var/www/html/lang_env/lib/python3.10/site-packages/setuptools/tests/test_dist_info.py	<genexpr>    s   $ z.TestDistInfo.build_metadata.<locals>.<genexpr> )itemsmetadata_basejoin)clskwargslinesr
   r
   r   build_metadata   s   zTestDistInfo.build_metadatac                 C   sv   d}|| }|   |d }| jdd}|j|dd d}|| }|   |d }| jdd	d
}|j|dd t|S )Nz%VersionedDistribution-2.718.dist-infoMETADATAVersionedDistribution)Namer   r   z!UnversionedDistribution.dist-infoUnversionedDistribution0.3)r   Version)mkdirr   
write_textstr)selfZtmpdirZdist_info_name	versionedfilenamecontentunversionedr
   r
   r   metadata#   s$   zTestDistInfo.metadatac                 C   s\   t dd t|D }t|dksJ ||d }|d }|jdks%J |jdks,J d S )Nc                 s   s    | ]}|j |fV  qd S N)project_name)r   dr
   r
   r   r   ;   s    

z-TestDistInfo.test_distinfo.<locals>.<genexpr>   r   r   z2.718r   )dictpkg_resourcesfind_distributionslenversion)r#   r(   distsr'   r$   r
   r
   r   test_distinfo:   s   zTestDistInfo.test_distinfoc                 C   sv   d}t ttjj|}t|D ](}| |d d ksJ |jdd|d tjdgks0J |jdgks8J qd S )N)z	splort==4z	quux>=1.1r   )baz)extrasr   zquux>=1.1;extra=="baz"r4   )listmapr.   Requirementparser/   requiresr5   )r#   r(   specsr:   r+   r
   r
   r   test_conditional_dependenciesG   s   


z*TestDistInfo.test_conditional_dependenciesc                 C   sh   d}|d j |dd tdtjtjB }td|dd}|js!J ||js)J t	|
d	r2J d
S )zA
        Supplying an invalid version crashes dist_info.
        z@[metadata]
name=proj
version=42
[egg_info]
tag_build=invalid!!!
	setup.cfgr   r   zinvalid version	dist_infoF)cwdcheck*.dist-infoN)r!   recompileMIrun_command_inner
returncodesearchstdoutr6   glob)r#   tmp_pathconfigmsgprocr
   r
   r   test_invalid_versionS   s   
z!TestDistInfo.test_invalid_versionc                 C   s   d}|d j |dd ttdd|d t|d}|jd	s#J t| ttdd
d|d t|d}|jdsAJ d S )Nz
        [metadata]
        name=proj
        version=42
        [egg_info]
        tag_date=1
        tag_build=.post
        r=   r   r   r>   z	--no-dater?   rA   zproj-42z--tag-buildz.azproj-42a)	r!   printrun_commandnextrJ   name
startswithshutilrmtree)r#   rK   rL   r>   r
   r
   r   test_tag_arguments_   s   
zTestDistInfo.test_tag_argumentskeep_egg_info)FTc                 C   s   d}|d j |dd |d }|  |rdgng }tdd|g|R d	|i tt|d
dks4J tt|d
dksAJ t|}tt|d|ksRJ tt|ddks_J tt|ddkslJ tt|ddksyJ d S )Nz [metadata]
name=proj
version=42
r=   r   r   Z__outz--keep-egg-infor>   z--output-dirr?   rA   r   r   z
*.egg-infoz	*.__bkp__)r!   r    rR   r0   r6   rJ   int)r#   rK   rY   rL   outoptsZexpected_egg_infor
   r
   r   test_output_dirs   s   zTestDistInfo.test_output_dirN)__name__
__module____qualname__r   r   classmethodr   pytestZfixturer(   r3   r<   rO   rX   markparametrizer]   r
   r
   r
   r   r	      s    	

r	   c                   @   sX   e Zd ZdZedZg dZej	dd
 ej	ddgej	ded	d
 ZdS )TestWheelCompatibilityzMake sure the .dist-info directory produced with the ``dist_info`` command
    is the same as the one produced by ``bdist_wheel``.
    ae  
    [metadata]
    name = {name}
    version = {version}

    [options]
    install_requires =
        foo>=12; sys_platform != "linux"

    [options.extras_require]
    test = pytest

    [options.entry_points]
    console_scripts =
        executable-name = my_package.module:function
    discover =
        myproj = my_package.other_module:function
    ))r   r   ).postz[egg_info]
tag_build = post
)rf   z[egg_info]
tag_build = .post
)rf   z)[egg_info]
tag_build = post
tag_date = 1
).devz[egg_info]
tag_build = .dev
)rg   z)[egg_info]
tag_build = .dev
tag_date = 1
)Za1z[egg_info]
tag_build = .a1
)z+localz[egg_info]
tag_build = +local
rT   zmy-proj my_proj my.proj My.Projr1   z0.42.13)suffixcfgc                 C   s   | j j||d| }dD ]}||   || d j|dd qtd|d d t|d	}t||d
  t|d}	td|d d t|d}
|
j|	jksTJ |
j	|
dd d| | sgJ dD ]}t|
| t|	| ksyJ qid S )N)rT   r1   )	dir_wheeldir_distr=   r   r   bdist_wheelrj   rP   zdir_wheel/dist/*.whlunpackzunpack/*.dist-infor>   rk   zdir_dist/*.dist-info-_)r   zentry_points.txt)SETUPCFGr   r    r!   rR   rS   rJ   r   rT   rU   replaceread)r#   rT   r1   rK   rh   ri   rL   iwheelZwheel_dist_infor>   filer
   r
   r   &test_dist_info_is_the_same_as_in_wheel   s   &z=TestWheelCompatibility.test_dist_info_is_the_same_as_in_wheelN)r^   r_   r`   __doc__r   rp   ZEGG_INFO_OPTSrb   rc   rd   splitrv   r
   r
   r
   r   re      s    re   c                  O   s@   t jt jdddd|}tjddgtt| } t j| fi |S )NTr   )stderrrI   textr   r@   z-cz __import__('setuptools').setup())
subprocessSTDOUTPIPEsys
executabler7   r"   run)cmdr   r\   r
   r
   r   rF      s   rF   c                  O   s   t | i |jS r)   )rF   rI   )argsr   r
   r
   r   rR      s   rR   )rw   pathlibrB   rV   r{   r~   	functoolsr   rb   r.   Zsetuptools.archive_utilr   textwrapr   Path	read_textrr   r	   re   rF   rR   r
   r
   r
   r   <module>   s     p@