U
    aÊ¹jn0  ã                
   @   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!ej d#d$¡d%d&„ ƒZ"ej d'd(g¡d)d*„ ƒZ#ej d+d,¡d-d.„ ƒZ$ej d+d/¡d0d1„ ƒZ%d2d3„ Z&d4d5„ Z'dS )6é    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   sh   t dddidœ}dddddd	œi}|s*t‚|d
kr<||–}n|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ÚAssertionErrorÚjaracoÚpathÚbuild)r   Úpkg_rootÚfilesÚpackages© r   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/tests/config/test_pyprojecttoml.pyÚcreate_exampleU   s$     ÿýüÿ	
r!   c                 C   s4  |d }|j t | ¡dd� t| |ƒ}|d }t|dd�|ksBt‚|d dksRt‚|d	 d
 dksft‚d|d d kszt‚|dkr¢t|d d d ƒdhksÄt‚n"t|d d d ƒdddhksÄt‚|d d d dksÜt‚d|d d d ksôt‚d|d d d k�st‚|d d d ddgfgk�s0t‚d S )Nr   úutf-8©ÚencodingÚprojectT©ÚexpandÚversionz3.10ÚreadmeÚtextr   r   ÚtoolÚ
setuptoolsr   r   r   zother.nestedúinclude-package-datar   zpackage-dataÚ*z
data-filesÚdataz_files/file.txt)Ú
write_textÚtomli_wÚdumpsr   r   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 ks4t‚|d  d¡d ksJt‚t|| dƒ d S )NÚsrcr   Fr&   r%   r(   r)   )r!   r   Úgetr   r8   )Útmp_pathr5   r4   r   r   r    Útest_read_configurationŒ   s    
r<   zpkg_root, optsr   r9   Úlibr   ÚfindÚwherec                 C   s”   t | |ƒ | d }t|dd�}|d  d¡d ks4t‚|d  d¡d ksJt‚|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:   r   ÚpopÚupdater8   )r;   r   Úoptsr5   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   s<   t ƒ }| t¡ t|d ddd��}| |¡ W 5 Q R X 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   s0   d|pdddgi}ddddiii}|d|idœS )	NÚdynamicÚscriptsúgui-scriptsúentry-pointsÚ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s4t‚|d d dksHt‚t|d ƒdks\t‚|d d dkspt‚t|d	 ƒdks„t‚|d	 d
 d dksœt‚d S )Nr%   rX   é   rD   rE   rY   rF   rG   rZ   r   rH   rI   )rV   r   r5   Úlenr   )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   s\   |   |¡ dddh|h }d|› �}tjtt |tj¡d�� t|  |¡|ƒ W 5 Q R X d S )NrX   rY   rZ   z&defined outside of `pyproject.toml`:.*©Úmatch)	rV   ÚpytestÚraisesr   ÚreÚcompileÚSr   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|dh™ƒ|d	 d
< |d d d
 }ddi|d< t||ƒ t||ƒ}t|d	 d ƒddhks¦t‚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   r   )rS   r;   ro   r5   r4   rW   Zdynamic_configr6   r   r   r    Útest_dynamic×   s"    
ÿ

þzTestClassifiers.test_dynamicc              	   C   sD   d}|d }|j t|ƒdd� tjtdd�� t|ƒ W 5 Q R X 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sFt‚d S )Nzg
        [project]
        name = "myproj"
        version = '42'
        dynamic = ["readme"]
        r   r"   r#   Úlong_descriptionÚ42)Úattrs)r0   r   r
   r   Úmetadatars   r   )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   sT   d}|d }|j t|ƒdd� tjtdd�� t|ƒ}W 5 Q R X d|d ksPt‚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   r   )rS   r;   r4   r5   r6   r   r   r    Útest_dynamic_without_file  s    
z)TestClassifiers.test_dynamic_without_fileN)ri   rj   rk   rq   rr   rx   r{   r   r   r   r    rn   Ö   s   rn   Úexample)zˆ
        [project]
        name = "myproj"
        version = "1.2"

        [my-tool.that-disrespect.pep518]
        value = 42
        c                 C   s.   | d }|j t|ƒdd� t|ƒd k	s*t‚d S ©Nr   r"   r#   )r0   r   r   r   )r;   r|   r5   r   r   r    Útest_ignore_unrelated_config!  s    r~   zexample, error_msg)z›
            [project]
            name = "myproj"
            version = "1.2"
            requires = ['pywin32; platform_system=="Windows"' ]
            zGconfiguration error: .project. must not contain ..requires.. propertiesc              	   C   s\   | d }|j t|ƒdd� t d|› d�tjtjB ¡}tjt|d�� t	|ƒ W 5 Q R X d S )Nr   r"   r#   zinvalid pyproject.toml.*z.*r`   )
r0   r   rd   re   ÚMrf   rb   rc   Ú
ValueErrorr   )r;   r|   Ú	error_msgr5   Úpatternr   r   r    Útest_invalid_example6  s
    rƒ   r4   )r   z[tool.something]
value = 42c                 C   s*   | d }|j |dd� t|ƒi ks&t‚d S r}   ©r0   r   r   ©r;   r4   r5   r   r   r    Ú
test_emptyM  s    r†   )ú'[project]
name = 'myproj'
version='42'
c                 C   s:   | d }|j |dd� t|ƒ}|d d d dks6t‚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_defaultV  s    rˆ   c              	   C   sr   dddœ}t jj|| d� t| ƒ� tjjdi dd�}W 5 Q R X | ¡ dksPt‚| 	¡ d	ks`t‚|j
d
ksnt‚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_afterZmyprojrt   FN)r   r   r   r   Ú	distutilsÚcoreÚ	run_setupÚget_namer   Úget_versionZinclude_package_data)r;   r   rw   r   r   r    Ú$test_include_package_data_in_setuppyb  s    þ
r�   c              	   C   s@   d}| d }|j t|ƒdd� t t¡� t|ƒ W 5 Q R X 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   ry   r   r   r…   r   r   r    Útest_warn_tools_typov  s
    r‘   )(rd   Úconfigparserr   Úinspectr   Zjaraco.pathr   rb   r1   r   r   r,   Zsetuptools.config.pyprojecttomlr   r   r   r   r	   Zsetuptools.distr
   Zsetuptools.errorsr   Údistutils.corer‹   r   r!   r8   r<   rl   rm   rC   rP   rL   rn   r~   rƒ   r†   rˆ   r�   r‘   r   r   r   r    Ú<module>   s\   >ýþ
ý!Kþ
ÿþ
	

