o
    !g                     @   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
   ^/root/parts/websockify/install/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)selftmpdir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"r6   )listmapr0   Requirementparser1   requiresr7   )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stdoutr8   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rA   rC   zproj-42z--tag-buildz.azproj-42a)	r!   printrun_commandnextrL   name
startswithshutilrmtree)r#   rM   rN   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   __outz--keep-egg-infor@   z--output-dirrA   rC   r   r   z
*.egg-infoz	*.__bkp__)r!   r    rT   r2   r8   rL   int)r#   rM   r[   rN   outoptsexpected_egg_infor
   r
   r   test_output_dirs   s   zTestDistInfo.test_output_dirN)__name__
__module____qualname__r   r   classmethodr   pytestfixturer*   r5   r>   rQ   rZ   markparametrizera   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
)rk   z[egg_info]
tag_build = .post
)rk   z)[egg_info]
tag_build = post
tag_date = 1
).devz[egg_info]
tag_build = .dev
)rl   z)[egg_info]
tag_build = .dev
tag_date = 1
)a1z[egg_info]
tag_build = .a1
)z+localz[egg_info]
tag_build = +local
rV   zmy-proj my_proj my.proj My.Projr3   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| | saJ dD ]}t
|
| t
|	| kssJ qcd S )N)rV   r3   )	dir_wheeldir_distr?   r   r   bdist_wheelrp   rR   zdir_wheel/dist/*.whlunpackzunpack/*.dist-infor@   rq   zdir_dist/*.dist-infozmy_proj-)r   zentry_points.txt)SETUPCFGr   r    r!   rT   rU   rL   r   rV   rW   read)r#   rV   r3   rM   rn   ro   rN   iwheel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)rb   rc   rd   __doc__r   rt   EGG_INFO_OPTSrf   rh   ri   splitrz   r
   r
   r
   r   rj      s    rj   c                  O   s@   t jt jdddd|}tjddgtt| } t j| fi |S )NTr   )stderrrK   textr   rB   z-cz __import__('setuptools').setup())
subprocessSTDOUTPIPEsys
executabler9   r"   run)cmdr   r_   r
   r
   r   rH      s   rH   c                  O   s   t | i |jS r+   )rH   rK   )argsr   r
   r
   r   rT      s   rT   )r{   pathlibrD   rX   r   r   	functoolsr   rf   r0   setuptools.archive_utilr   textwrapr   Path	read_textru   r	   rj   rH   rT   r
   r
   r
   r   <module>   s     p@