lu<| ddlZddlmZddlmZddlZddlZddlZddl m Z ddl Z ddl m Z mZmZmZmZddlmZddlmZddlZdZd Zd Zd Zejd d ifdifdddddgiiifgdZddiddiddidZGddZ GddZ!ejdd d!Z"ejd"d#gd$Z#ejd%d&d'Z$ejd%d(d)Z%d*Z&d+Z'dS),N) ConfigParser)cleandoc)Path)_ToolsTypoInMetadataapply_configurationexpand_configurationread_configurationvalidate) 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 ctdddid}dddddd i}|sJ|d kri||}ni|d d d diii||<tj||dS)N hello worldzfile.txt)pyproject.tomlz README.md_filespkgzclass CustomSdist: passzVERSION = (3, 10)zdef exec(): print('hello')) __init__.pyzmod.pyz__version__.pyz __main__.py.othernestedrprefix)EXAMPLEjaracopathbuild)rpkg_rootfilespackagess |/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/setuptools/tests/config/test_pyprojecttoml.pycreate_exampler!Us!"    E /17   H OO83%5%H%QXPwM2;N0OPPh KeD)))))c|dz }|tj|dt||}|d}t |d|ksJ|ddksJ|d d d ksJd |d dvsJ|dkr)t |d dd dhksJn)t |d dd hdksJ|d dddusJd|d ddvsJd|d ddvsJ|d ddddgfgksJdS)Nrutf-8encodingprojectTexpandversionz3.10readmetextrrtool setuptoolsrr> other.nestedrrinclude-package-datarz package-data*z data-filesdataz_files/file.txt) write_texttomli_wdumpsrr set)configrr pyprojectexpandedexpanded_projects r verify_exampler;rs''I v..AAA#FD11H * i 5 5 5 A A A A I && 0 0 0 0 H %f - > > > > &),7 7 7 7 738F#L1*=>>5'IIIII8F#L1*=>>C C C     F L )*@ AT I I I I &!,/? ? ? ? ? hv&|4^D D D D D F L ), 7 #$%<      r"ct|d|dz }t|d}|ddJ|ddJt||ddS)NsrcrFr(r'r*r+)r!r getr;)tmp_pathr8r7s r test_read_configurationr@s8U###++I  % 8 8 8F )   + + 3 3 3 )   * * 2 2 268U+++++r")roptsrr=librfindwherect|||dz }t|d}|ddJ|ddJ|ddd d|ddd d|dd|t |||dS) NrFr(r'r*r+r-r.rz package-dir)r!r r>popupdater;)r?rrAr8r7s r 9test_discovered_package_dir_with_attr_directive_in_configrHs8X&&&++I  % 8 8 8F )   + + 3 3 3 )   * * 2 2 2 6N< $$Z666 6N< $$]D999 6N< ''---68X.....r"a mod.a:funcb mod.b:funccmod.c:func [extra])console_scripts gui_scriptsrcjeZdZdZddZdZejdddZ dS) TestEntryPointsct}|tt|dz dd5}||ddddS#1swxYwYdS)Nentry-points.txtwr$r%)r read_dict ENTRY_POINTSopenwrite)selfr? entry_pointsfs r write_entry_pointsz"TestEntryPoints.write_entry_pointss#~~ |,,, (//w G G G "1   q ! ! ! " " " " " " " " " " " " " " " " " "sA!!A%(A%Nc0d|pgdi}ddddiii}|d|idS)Ndynamic)scripts gui-scripts entry-pointsrbfilerTr.)r'r-)rZr_r'r-s r r8zTestEntryPoints.pyprojects@gS)S)S)STNV5G,HIJ"\4,@AAAr"c||t||}|d}t|ddksJ|dddksJt|ddksJ|dddksJt|d dksJ|d d d d ksJdS) Nr'r`rIrJrarKrLrbrrMrN)r]rr8len)rZr?r9r:s r test_all_listed_in_dynamicz*TestEntryPoints.test_all_listed_in_dynamics )))'(8(8(CC#I.#I.//14444 *3/<????#M233q8888 .s3|CCCC#N3449999/8=AUUUUUUUr"missing_dynamic)r`rac2||hd|hz }d|}tjtt j|tj5t|||ddddS#1swxYwYdS)N>r`rarbz&defined outside of `pyproject.toml`:.*match) r]pytestraisesr recompileSrr8)rZr?rir_msgs r "test_scripts_not_listed_in_dynamicz2TestEntryPoints.test_scripts_not_listed_in_dynamics )))<<<?PPHHH ];bjbd.C.C D D D D D !8!8( C C C D D D D D D D D D D D D D D D D D Ds$B  BB)N) __name__ __module__ __qualname__r]r8rhrmmark parametrizersrdr"r rRrRs""" BBBB V V V [.0JKKDDLKDDDr"rRc&eZdZdZdZdZdZdS)TestClassifiersct|dtd}|dz |d|dz }t|d}|d d }t h|d |d d <|d d d }ddi|d <t ||t ||}t|d d ddhksJdS)Nr=zX Framework :: Flask Programming Language :: Haskell zclassifiers.txtr$r%rFr(r'r_ classifiersr-r.rczFramework :: FlaskzProgramming Language :: Haskell)r!rr3r listr rr6)rZr?r|r8r7r_dynamic_configr9s r test_dynamiczTestClassifiers.test_dynamics x'''   % %11+1PPP// #Ie<<<#I.'+,Eg,E},E'F'Fy)$ 5i@)/1B(C}% ###'998I&}566 -;       r"cd}|dz }|t|dtjtd5t |ddddS#1swxYwYdS)Nzl [project] name = "myproj" version = '42' dynamic = ["classifiers"] rr$r%z!No configuration .* .classifiers.rk)r3rrmrnr r )rZr?r7r8s r test_dynamic_without_configz+TestClassifiers.test_dynamic_without_configs // Xf--@@@ ];.Q R R R * * y ) ) ) * * * * * * * * * * * * * * * * * *sA$$A(+A(cd}|dz }|t|dtddi}t||}|jjdksJdS)Nzg [project] name = "myproj" version = '42' dynamic = ["readme"] rr$r%long_description42)attrs)r3rr rmetadatar)rZr?r7r8dists r *test_dynamic_readme_from_setup_script_argsz:TestClassifiers.test_dynamic_readme_from_setup_script_argssx  // Xf--@@@#5t"<==="433}-555555r"cd}|dz }|t|dtjtd5t |}dddn #1swxYwYd|dvsJdS) Nz [project] name = "myproj" version = '42' dynamic = ["classifiers"] [tool.setuptools.dynamic] classifiers = {file = ["classifiers.txt"]} rr$r%z'File .*classifiers.txt. cannot be foundrkr|r')r3rrmwarns UserWarningr )rZr?r7r8r9s r test_dynamic_without_filez)TestClassifiers.test_dynamic_without_files // Xf--@@@ \+-V W W W 5 5))44H 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5HY$7777777sA##A'*A'N)rtrurvrrrrrdr"r rzrzsP   : * * * 6 6 688888r"rzexample)z [project] name = "myproj" version = "1.2" [my-tool.that-disrespect.pep518] value = 42 cz|dz }|t|dt|JdSNrr$r%)r3rr )r?rr8s r test_ignore_unrelated_configr!sL++I '**W=== i ( ( 4 4 4 4 4r")r error_msg)z [project] name = "myproj" version = "1.2" requires = ['pywin32; platform_system=="Windows"' ] zGconfiguration error: .project. must not contain ..requires.. propertiesc>|dz }|t|dtjd|dtjtjz}t jt|5t|ddddS#1swxYwYdS)Nrr$r%zinvalid pyproject.toml.*z.*rk) r3rrorpMrqrmrn ValueErrorr )r?rrr8patterns r test_invalid_exampler6s++I '**W===jAIAAA24"$;OOG z 1 1 1&&9%%%&&&&&&&&&&&&&&&&&&s5BBBr7)rzool.something] value = 42ch|dz }||dt|iksJdSrr3r r?r7r8s r test_emptyrMsG++I '222 i ( (B . . . . . .r")'[project] name = 'myproj' version='42' c|dz }||dt|}|ddddusJdS) zaBuilds with ``pyproject.toml`` should consider ``include-package-data=True`` as default. rr$r%r-r.r0TNrrs r $test_include_package_data_by_defaultrVs[ ++I '222  * *F &>, '(> ?4 G G G G G Gr"cbddd}tj||t|5tjdid}dddn #1swxYwY|d ksJ|d ksJ|j d usJdS) zBuilds with ``pyproject.toml`` should consider ``include_package_data`` set in ``setup.py``. See https://github.com/pypa/setuptools/issues/3197#issuecomment-1079023889 rz:__import__('setuptools').setup(include_package_data=False))rsetup.pyrrr7) stop_afterNmyprojrF) rrrr distutilscore run_setupget_name get_versioninclude_package_data)r?rrs r $test_include_package_data_in_setuppyrbsGP  E KeH--- hMM~'' B8'LLMMMMMMMMMMMMMMM ==??h & & & &      % % % %  $ - - - - - -s#A%%A),A)cd}|dz }|t|dtjt5t |ddddS#1swxYwYdS)zTest 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"] rr$r%N)r3rrmrrr rs r test_warn_tools_typorvs F++I &))G<<< * + +&&9%%%&&&&&&&&&&&&&&&&&&sA""A&)A&)(ro configparserrinspectr jaraco.pathrrmr4rrr.setuptools.config.pyprojecttomlrrrr r setuptools.distr setuptools.errorsr distutils.corerrr!r;r@rwrxrHrWrRrzrrrrrrrdr"r rs %%%%%% )((((()))))); |***:4,,, b  fw&89:; / / / \*&' ( DDDDDDDDBH8H8H8H8H8H8H8H8V    55  5    &&  &#GHH//IH/#RSSHHTSH...(&&&&&r"