o
    5‘ði~3  ã                
   @   sŠ  d dl Z d dlmZ d dlm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mZmZmZmZ d dlmZ d dlmZ d dlZdZd	d
„ Zdd„ Zdd„ Zej ddi fdi fdddddgiiifg¡dd„ ƒZddiddiddidœZG dd „ d ƒZ G d!d"„ d"ƒZ!G d#d$„ d$ƒZ"ej d%d&¡d'd(„ ƒZ#ej d)d*g¡d+d,„ ƒZ$ej d-d.¡d/d0„ ƒZ%ej d-d1¡d2d3„ ƒZ&d4d5„ Z'd6d7„ Z(dS )8é    N)ÚConfigParser)Úcleandoc)ÚPath)Ú_ToolsTypoInMetadataÚapply_configurationÚexpand_configurationÚread_configurationÚvalidate)ÚDistribution)ÚOptionErroraÀ  
[project]
name = "myproj"
keywords = ["some", "key", "words"]
dynamic = ["version", "readme"]
requires-python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
dependencies = [
    'importlib-metadata>=0.12;python_version<"3.8"',
    'importlib-resources>=1.0;python_version<"3.7"',
    'pathlib2>=2.3.3,<3;python_version < "3.4" and sys.platform != "win32"',
]

[project.optional-dependencies]
docs = [
    "sphinx>=3",
    "sphinx-argparse>=0.2.5",
    "sphinx-rtd-theme>=0.4.3",
]
testing = [
    "pytest>=1",
    "coverage>=3,<5",
]

[project.scripts]
exec = "pkg.__main__:exec"

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

[tool.setuptools]
package-dir = {"" = "src"}
zip-safe = true
platforms = ["any"]

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.cmdclass]
sdist = "pkg.mod.CustomSdist"

[tool.setuptools.dynamic.version]
attr = "pkg.__version__.VERSION"

[tool.setuptools.dynamic.readme]
file = ["README.md"]
content-type = "text/markdown"

[tool.setuptools.package-data]
"*" = ["*.txt"]

[tool.setuptools.data-files]
"data" = ["_files/*.txt"]

[tool.distutils.sdist]
formats = "gztar"

[tool.distutils.bdist_wheel]
universal = true
c                 C   sp   t dddidœ}dddddd	œi}|sJ ‚|d
kr i |¥|¥}ni |¥ddddiii¥||< tjj|| d� d S )Núhello worldzfile.txtÚ )úpyproject.tomlz	README.mdÚ_filesÚpkgzclass CustomSdist: passzVERSION = (3, 10)zdef exec(): print('hello'))ú__init__.pyzmod.pyz__version__.pyz__main__.pyÚ.ÚotherÚnestedr   ©Úprefix)ÚEXAMPLEÚjaracoÚpathÚbuild)r   Úpkg_rootÚfilesÚpackages© r   úi/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/tests/config/test_pyprojecttoml.pyÚcreate_exampleU   s"   ÿýüÿ	r    c                 C   s.  |d }|j t | ¡dd� t| |ƒ}|d }t|dd�|ks!J ‚|d dks)J ‚|d	 d
 dks3J ‚d|d d v s=J ‚|dkrQt|d d d ƒdhksPJ ‚nt|d d d ƒh d£ksaJ ‚|d d d du smJ ‚d|d d d v syJ ‚d|d d d vs…J ‚|d d d ddgfgks•J ‚d S )Nr   úutf-8©ÚencodingÚprojectT©ÚexpandÚversionz3.10ÚreadmeÚtextr   r   ÚtoolÚ
setuptoolsr   r   >   úother.nestedr   r   úinclude-package-datar   zpackage-dataÚ*z
data-filesÚdataz_files/file.txt)Ú
write_textÚtomli_wÚdumpsr   r   Úset)Úconfigr   r   Ú	pyprojectÚexpandedÚexpanded_projectr   r   r   Úverify_exampler   s"   
  ÿr8   c                 C   sZ   t | dƒ | d }t|dd�}|d  d¡d u sJ ‚|d  d¡d u s%J ‚t|| dƒ d S )NÚsrcr   Fr%   r$   r'   r(   )r    r   Úgetr8   )Útmp_pathr5   r4   r   r   r   Útest_read_configurationŒ   s   
r<   )r   Úoptsr   r9   Úlibr   ÚfindÚwherec                 C   s”   t | |ƒ | d }t|dd�}|d  d¡d u sJ ‚|d  d¡d u s%J ‚|d d  d	d ¡ |d d  d
d ¡ |d d  |¡ t|| |ƒ d S )Nr   Fr%   r$   r'   r(   r*   r+   r   zpackage-dir)r    r   r:   ÚpopÚupdater8   )r;   r   r=   r5   r4   r   r   r   Ú9test_discovered_package_dir_with_attr_directive_in_config—   s   
	rC   Úaú
mod.a:funcÚbú
mod.b:funcÚcúmod.c:func [extra])Úconsole_scriptsÚgui_scriptsr   c                   @   s<   e Zd Zdd„ Zddd„Zdd„ Zej dd	¡d
d„ ƒZ	dS )ÚTestEntryPointsc                 C   sR   t ƒ }| t¡ t|d ddd��}| |¡ W d   ƒ d S 1 s"w   Y  d S )Núentry-points.txtÚwr!   r"   )r   Ú	read_dictÚENTRY_POINTSÚopenÚwrite)Úselfr;   Úentry_pointsÚfr   r   r   Úwrite_entry_points¶   s
   
"ÿz"TestEntryPoints.write_entry_pointsNc                 C   s.   d|pg d¢i}ddddiii}|d|idœS )NÚdynamic)Úscriptsúgui-scriptsúentry-pointsrZ   ÚfilerM   r+   )r$   r*   r   )rS   rW   r$   r*   r   r   r   r5   ¼   s   zTestEntryPoints.pyprojectc                 C   s    |   |¡ t|  ¡ |ƒ}|d }t|d ƒdksJ ‚|d d dks$J ‚t|d ƒdks.J ‚|d d dks8J ‚t|d	 ƒdksBJ ‚|d	 d
 d dksNJ ‚d S )Nr$   rX   é   rD   rE   rY   rF   rG   rZ   r   rH   rI   )rV   r   r5   Úlen)rS   r;   r6   r7   r   r   r   Útest_all_listed_in_dynamicÁ   s   
z*TestEntryPoints.test_all_listed_in_dynamicÚmissing_dynamic)rX   rY   c                 C   sp   |   |¡ h d£|h }d|› �}tjtt |tj¡d�� t|  |¡|ƒ W d   ƒ d S 1 s1w   Y  d S )N>   rX   rY   rZ   z&defined outside of `pyproject.toml`:.*©Úmatch)	rV   ÚpytestÚraisesr   ÚreÚcompileÚDOTALLr   r5   )rS   r;   r_   rW   Úmsgr   r   r   Ú"test_scripts_not_listed_in_dynamicÌ   s   

"ÿz2TestEntryPoints.test_scripts_not_listed_in_dynamic)N)
Ú__name__Ú
__module__Ú__qualname__rV   r5   r^   rb   ÚmarkÚparametrizerh   r   r   r   r   rL   µ   s    
rL   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestClassifiersc                 C   s¬   t |dƒ tdƒ}|d j|dd� |d }t|dd�}|d	 d
 }th |£d’ƒ|d	 d
< |d d d
 }ddi|d< t||ƒ t||ƒ}t|d	 d ƒddhksTJ ‚d S )Nr9   zX
            Framework :: Flask
            Programming Language :: Haskell
            zclassifiers.txtr!   r"   r   Fr%   r$   rW   Úclassifiersr*   r+   r[   zFramework :: FlaskzProgramming Language :: Haskell)r    r   r0   r   Úlistr	   r   r3   )rS   r;   ro   r5   r4   rW   Údynamic_configr6   r   r   r   Útest_dynamic×   s"   
ÿ

þzTestClassifiers.test_dynamicc                 C   sZ   d}|d }|j t|ƒdd� tjtdd�� t|ƒ W d   ƒ d S 1 s&w   Y  d S )Nzl
        [project]
        name = "myproj"
        version = '42'
        dynamic = ["classifiers"]
        r   r!   r"   z!No configuration .* .classifiers.r`   )r0   r   rb   rc   r   r   )rS   r;   r4   r5   r   r   r   Útest_dynamic_without_configô   s   
"ÿz+TestClassifiers.test_dynamic_without_configc                 C   sJ   d}|d }|j t|ƒdd� tddid�}t||ƒ}|jjdks#J ‚d S )Nzg
        [project]
        name = "myproj"
        version = '42'
        dynamic = ["readme"]
        r   r!   r"   Úlong_descriptionÚ42)Úattrs)r0   r   r
   r   Úmetadatart   )rS   r;   r4   r5   Údistr   r   r   Ú*test_dynamic_readme_from_setup_script_args  s   
z:TestClassifiers.test_dynamic_readme_from_setup_script_argsc                 C   sh   d}|d }|j t|ƒdd� tjtdd�� t|ƒ}W d   ƒ n1 s%w   Y  d|d vs2J ‚d S )	NzÂ
        [project]
        name = "myproj"
        version = '42'
        dynamic = ["classifiers"]

        [tool.setuptools.dynamic]
        classifiers = {file = ["classifiers.txt"]}
        r   r!   r"   z'File .*classifiers.txt. cannot be foundr`   ro   r$   )r0   r   rb   ÚwarnsÚUserWarningr   )rS   r;   r4   r5   r6   r   r   r   Útest_dynamic_without_file  s   

ÿz)TestClassifiers.test_dynamic_without_fileN)ri   rj   rk   rr   rs   ry   r|   r   r   r   r   rn   Ö   s
    rn   c                   @   s*   e Zd Zg d¢Zej de¡dd„ ƒZdS )ÚTestImportNames)z!import-names = ["hello", "world"]z&import-namespaces = ["hello", "world"]zdynamic = ["import-names"]zdynamic = ["import-namespaces"]Úexamplec                 C   sr   |  |¡ tdƒ}d|› d�}|jt|ƒdd� tjtdd�� tti ƒ|ƒ W d   ƒ d S 1 s2w   Y  d S )Nr   zH
        [project]
        name = 'proj'
        version = '42'
        z	
        r!   r"   zimport-namesr`   )	Úchdirr   r0   r   rb   rc   ÚNotImplementedErrorr   r
   )rS   Úmonkeypatchr;   r~   r5   Útoml_configr   r   r   Útest_not_implemented)  s   
ü"ÿz$TestImportNames.test_not_implementedN)ri   rj   rk   ÚEXAMPLESrb   rl   rm   rƒ   r   r   r   r   r}   !  s    r}   r~   )zˆ
        [project]
        name = "myproj"
        version = "1.2"

        [my-tool.that-disrespect.pep518]
        value = 42
        c                 C   s.   | d }|j t|ƒdd� t|ƒd usJ ‚d S ©Nr   r!   r"   )r0   r   r   )r;   r~   r5   r   r   r   Útest_ignore_unrelated_config8  s   r†   )r~   Ú	error_msg)z›
            [project]
            name = "myproj"
            version = "1.2"
            requires = ['pywin32; platform_system=="Windows"' ]
            zGconfiguration error: .project. must not contain ..requires.. propertiesc                 C   sr   | d }|j t|ƒdd� t d|› d�tjtjB ¡}tjt|d�� t	|ƒ W d   ƒ d S 1 s2w   Y  d S )Nr   r!   r"   zinvalid pyproject.toml.*z.*r`   )
r0   r   rd   re   Ú	MULTILINErf   rb   rc   Ú
ValueErrorr   )r;   r~   r‡   r5   Úpatternr   r   r   Útest_invalid_exampleM  s   ÿ
"ÿr‹   r4   )r   z[tool.something]
value = 42c                 C   s*   | d }|j |dd� t|ƒi ksJ ‚d S r…   ©r0   r   ©r;   r4   r5   r   r   r   Ú
test_emptyf  s   rŽ   )ú'[project]
name = 'myproj'
version='42'
c                 C   s:   | d }|j |dd� t|ƒ}|d d d du sJ ‚dS )	zaBuilds with ``pyproject.toml`` should consider ``include-package-data=True`` as
    default.
    r   r!   r"   r*   r+   r-   TNrŒ   r�   r   r   r   Ú$test_include_package_data_by_defaulto  s   r�   c                 C   s†   dddœ}t jj|| d� t| ƒ� tjjdi dd�}W d  ƒ n1 s%w   Y  | ¡ d	ks2J ‚| ¡ d
ks:J ‚|j	du sAJ ‚dS )zµBuilds with ``pyproject.toml`` should consider ``include_package_data`` set in
    ``setup.py``.

    See https://github.com/pypa/setuptools/issues/3197#issuecomment-1079023889
    r�   z:__import__('setuptools').setup(include_package_data=False))r   úsetup.pyr   r‘   r4   )Ú
stop_afterNÚmyprojru   F)
r   r   r   r   Ú	distutilsÚcoreÚ	run_setupÚget_nameÚget_versionÚinclude_package_data)r;   r   rx   r   r   r   Ú$test_include_package_data_in_setuppy{  s   þ
ÿrš   c                 C   sV   d}| d }|j t|ƒdd� t t¡� t|ƒ W d  ƒ dS 1 s$w   Y  dS )z’Test that the common ``tools.setuptools`` typo in ``pyproject.toml`` issues a warning

    See https://github.com/pypa/setuptools/issues/4150
    zË
    [build-system]
    requires = ["setuptools"]
    build-backend = "setuptools.build_meta"

    [project]
    name = "myproj"
    version = '42'

    [tools.setuptools]
    packages = ["package"]
    r   r!   r"   N)r0   r   rb   rz   r   r   r�   r   r   r   Útest_warn_tools_typo�  s   
"ÿr›   ))rd   Úconfigparserr   Úinspectr   Újaraco.pathr   rb   r1   r   r   r+   Úsetuptools.config.pyprojecttomlr   r   r   r   r	   Úsetuptools.distr
   Úsetuptools.errorsr   Údistutils.corer”   r   r    r8   r<   rl   rm   rC   rP   rL   rn   r}   r†   r‹   rŽ   r�   rš   r›   r   r   r   r   Ú<module>   s`    >ýþ
ý!Kþ
ÿþ


