K iv0 dddlZddlmZddlmZddlZddlZddlZddl m Z ddl Z ddl m Z mZmZmZmZddlmZddlmZddlZdZd Zd Zd Zej8j;d d ifdifdddddgiiifgdZddiddiddidZGddZ GddZ!ej8j;dd d!Z"ej8j;d"d#gd$Z#ej8j;d%d&d'Z$ej8j;d%d(d)Z%d*Z&d+Z'y),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 k(ri||}ni|d d d diii||<tjj||y)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 p/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/setuptools/tests/config/test_pyprojecttoml.pycreate_exampler!Us!"   E /17  H O83%5%H%QXPwM2;N0OPh KKeD)c|dz }|jtj|dt||}|d}t |d|k(sJ|ddk(sJ|d d d k(sJd |d dvsJ|dk(rt |d dd dhk(sJt |d dd hdk(sJ|d dddusJd|d ddvsJd|d ddvsJ|d ddddgfgk(sJy)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.A#FD1H * i 5 AA A I && 00 0 H %f - >> > &),7 77 738F#L1*=>5'III8F#L1*=>C    F L )*@ AT II I &!,/? ?? ? hv&|4^D DD D F L ), 7 #$%<  r"ct|d|dz }t|d}|djdJ|djdJt||dy)NsrcrFr(r'r*r+)r!r getr;)tmp_pathr8r7s r test_read_configurationr@sg8U#++I  % 8F )   + 33 3 )   * 22 268U+r")roptsrr=librfindwherec@t|||dz }t|d}|djdJ|djdJ|ddjd d|ddjd d|ddj |t |||y) 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  % 8F )   + 33 3 )   * 22 2 6N< $$Z6 6N< $$]D9 6N< ''-68X.r"a mod.a:funcb mod.b:funccmod.c:func [extra])console_scripts gui_scriptsrcdeZdZdZddZdZejjdddZ y) TestEntryPointsct}|jtt|dz dd5}|j |dddy#1swYyxYw)Nentry-points.txtwr$r%)r read_dict ENTRY_POINTSopenwrite)selfr? entry_pointsfs r write_entry_pointsz"TestEntryPoints.write_entry_pointssN#~ |, (//w G "1   q ! " " "s A  ANc4d|xsgdi}ddddiii}|d|idS)Ndynamic)scripts gui-scripts entry-pointsrbfilerTr.)r'r-)rZr_r'r-s r r8zTestEntryPoints.pyprojects7gS)STNV5G,HIJ"\4,@AAr"c*|j|t|j|}|d}t|ddk(sJ|dddk(sJt|ddk(sJ|dddk(sJt|d dk(sJ|d d d d k(sJy) Nr'r`rIrJrarKrLrbrrMrN)r]rr8len)rZr?r9r:s r test_all_listed_in_dynamicz*TestEntryPoints.test_all_listed_in_dynamics )'(8(C#I.#I./1444 *3/<???#M23q888 .s3|CCC#N34999/8=AUUUUr"missing_dynamic)r`rac|j|hd|hz }d|}tjtt j |tj 5t|j||dddy#1swYyxYw)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_dynamicss )<?PP66GH ]];bjjbdd.C D D !8( C D D Ds BB )N) __name__ __module__ __qualname__r]r8rhrmmark parametrizersrdr"r rRrRs=" B V [[.0JKDLDr"rRc$eZdZdZdZdZdZy)TestClassifiersc@t|dtd}|dz j|d|dz }t|d}|d d }t h|d |d d <|d d d }ddi|d <t ||t ||}t|d d ddhk(sJy)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+1P// #Ie<#I.'+,Eg,E},E'Fy)$ 5i@)/1B(C}% #'98I&}56 -;    r"cd}|dz }|jt|dtjtd5t |dddy#1swYyxYw)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_configsZ // Xf-@ ]];.Q R * y ) * * *s AAcd}|dz }|jt|dtddi}t||}|jj dk(sJy)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_argssb  // Xf-@#5t"<="43}}--555r"cd}|dz }|jt|dtjtd5t |}dddddvsJy#1swYxYw) 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_fileso // Xf-@ \\+-V W 5))4H 5HY$7777 5 5s AA&N)rtrurvrrrrrdr"r rzrzs : * 68r"rzexample)z [project] name = "myproj" version = "1.2" [my-tool.that-disrespect.pep518] value = 42 c`|dz }|jt|dt|JyNrr$r%)r3rr )r?rr8s r test_ignore_unrelated_configr!s:++I '*W= i ( 44 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 }|jt|dtjd|dtjtj z}t jt|5t|dddy#1swYyxYw)Nrr$r%zinvalid pyproject.toml.*z.*rk) r3rrorpMrqrmrn ValueErrorr )r?rrr8patterns r test_invalid_exampler6sx++I '*W=jj3I;bA244"$$;OG z 1&9%&&&s 6 B  Br7)rzool.something] value = 42cT|dz }|j|dt|ik(sJyrr3r r?r7r8s r test_emptyrMs5++I '2 i (B .. .r")'[project] name = 'myproj' version='42' ch|dz }|j|dt|}|ddddusJy) zaBuilds with ``pyproject.toml`` should consider ``include-package-data=True`` as default. rr$r%r-r.r0TNrrs r $test_include_package_data_by_defaultrVsI ++I '2  *F &>, '(> ?4 GG Gr"cHddd}tjj||t|5tj j did}dddjd k(sJ|jd k(sJ|jd usJy#1swYDxYw) 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 KKeH- hM~~'' B8'LM ==?h && &     %% %  $ $ -- - MMs #BB!cd}|dz }|jt|dtjt5t |dddy#1swYyxYw)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_typorvsX F++I &)G< * +&9%&&&s AA)(ro configparserrinspectr jaraco.pathrrmr4rrr.setuptools.config.pyprojecttomlrrrr r setuptools.distr setuptools.errorsr distutils.corerrr!r;r@rwrxrHrWrRrzrrrrrrrdr"r rs % )); |*:4, b  fw&89:; / / \*&' ( DDBH8H8V   5 5   & &#GH/I/#RSHTH.(&r"