\bg4XddlZddlZddlmZddlmZddlmZddlZ ddl Z ddl m Z ddl Z ddlmZddlmZmZddlmZdd lmZd d lmZd d lmZmZmZd d lmZddlZ GddZ!GddZ"GddZ#GddZ$GddZ%GddZ&dZ'dZ(dZ)dZ*dZ+dZ,d Z-d!Z.dS)"N) ConfigParser)product)cast)Path)sdist)find_package_pathfind_parent_package) Distribution)PackageDiscoveryError)quiet)get_sdist_membersget_wheel_membersrun)DALSceZdZdZdZdS)TestFindParentPackagec|dz dd|dz |dz gd}t|ddi|d ksJdS) Nzsrc/namespace/pkg/nestedTexist_okparentsz$src/namespace/pkg/nested/__init__.pyzsrc/namespace/pkg/__init__.py) namespace namespace.pkgznamespace.pkg.nestedsrcrmkdirtouchr )selftmp_pathpackagess w/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/setuptools/tests/test_config_discovery.pytest_single_packagez)TestFindParentPackage.test_single_packages . .55tT5RRR : :AACCC 3 3::<<<III"8b%[(CCVVVVVVcgd}|D]:}|d|z dd|d|dz ;t|ddi|JdS)N)pkgpkg1pkg2src/Trz /__init__.pyrrr)rr multiplenames r"test_multiple_toplevelz,TestFindParentPackage.test_multiple_toplevel!s+** ; ;D  t % , ,dD , I I I 1t111 1 8 8 : : : :"8b%[(CCKKKKKr$N)__name__ __module__ __qualname__r#r,r$r"rrs:WWWLLLLLr$rc (eZdZdZddidgddddiiddgid dgidd d giiiiid Zd dgddgddgdgdgdZdZej de dZ ej de dZ e de de de ddZej degd dd ge d!Zej d"d#gdhfd$gdd%hfd&gdd'hfd(ghd)fd*gdd+hfd,gdhfd-gdhfgd.Zej d/d0gd1ggd2Zd3Zd4Zd5Zd6S)7 TestDiscoverPackagesAndPyModuleszMake sure discovered values for ``packages`` and ``py_modules`` work similarly to explicit configuration for the simple scenarios. rrr&) package_dirr!r3libr! py_modulesnszns.pkg) z explicit-srcz variation-libz explicit-flatzexplicit-single_modulezexplicit-namespacez automatic-srczautomatic-flatzautomatic-single_modulezautomatic-namespacesrc/pkg/__init__.pyzsrc/pkg/main.pyzlib/pkg/__init__.pyzlib/pkg/main.pyzpkg/__init__.pyz pkg/main.pypkg.pyzns/pkg/__init__.py)rr4flat single_modulercp|d\}}}|j|}|j|}||fS)N-) partitionFILESOPTIONS)r circumstance_layoutfilesoptionss r" _get_infoz*TestDiscoverPackagesAndPyModules._get_infoFs=#--c22 1f 6",|,g~r$r@c||\}}t|||t||\}}d|jjD}|D]t fd|DsJ dS)NcNg|]"}|tjd#S)/)replaceossep.0fs r" zHTestDiscoverPackagesAndPyModules.test_sdist_filelist..Ss(GGGqAIIbfc**GGGr$c3BK|]}|VdSN)endswith)rMrNfiles r" zGTestDiscoverPackagesAndPyModules.test_sdist_filelist..Us/::Aqzz$''::::::r$)rE_populate_project_dir_run_sdist_programaticallyfilelistrCany) rr r@rCrDrAcmdmanifestrSs @r"test_sdist_filelistz4TestDiscoverPackagesAndPyModules.test_sdist_filelistLs 55whw777+Hg>>3GGCL4FGGG ; ;D::::::::: : :: : ; ;r$c||\}}t||||dz |dz |dz |dz |dz |dz |dz |dz t |t t |d }td td ||t|ksJtt |d }td td |d|D}||ksJ|D]}d|vsJd|vsJdS)Nbuildz build/libzbuild/bdist.linux-x86_64z build/bdist.linux-x86_64/file.pyzbuild/lib/__init__.pyzbuild/lib/file.pydistz dist/file.py dist/*.tar.gz~~~~~ sdist_members ~~~~~ dist/*.whl~~~~~ wheel_members ~~~~~cbh|],}|dddd-Sr)rzlib/rIrLs r" z@TestDiscoverPackagesAndPyModules.test_project..ps6OOOAaii++33FB??OOOr$) rErUrr _run_buildrnextglobprintjoinsetr) rr r@rCrD sdist_files wheel_files orig_filesrSs r" test_projectz-TestDiscoverPackagesAndPyModules.test_projectWs 55whw777 G ""$$$ K &&((( . .55777 6 6==??? + +22444 ' '..000 F !!### N "))+++8'X]]?-K-K(L(LMM  )*** dii $$%%%c%jj(((('X]]<-H-H(I(IJJ  )*** dii $$%%%OOOOO j((((  ' 'D%''''&&&&& ' 'r$z [metadata] name = myproj version = 0.0.0 [options] {param} = z __import__('setuptools').setup( name="myproj", version="0.0.0", {param}=[] ) z [build-system] requires = [] build-backend = 'setuptools.build_meta' [project] name = "myproj" version = "0.0.0" [tool.setuptools] {param} = [] zv [build-system] requires = [] build-backend = 'setuptools.build_meta' ) setup.cfgsetup.pypyproject.tomltemplate-pyproject.toml) config_fileparamr@)rrrsrtc|j|gdz}t||i|dkr|dd}n)|jd}|dz |d|}|j||}||z |dt |i} t| |gksJd d d |} t| | JdS) N)zmod.pyzother.pyr7rtrAr<ruutf-8encoding)rwr!r5)r5r!)r>rUrIPURPOSEFULLY_EMPY write_textformat _get_distgetattr) rr rvrwr@rCtemplate_param pyprojectconfigr^others r"test_purposefully_emptyz8TestDiscoverPackagesAndPyModules.test_purposefully_emptys <(+X+X+XXhr222 * * *"]]344NN./HII ( ( 4 4Y 4 Q Q Q"N' 4;;.;QQ K ++FW+EEE2&&tU##r)))))|DDUKtU##+++++r$) extra_filespkgszvenv/bin/simulate_venvzpkg-stubs/__init__.pyiz pkg-stubszother-stubs/__init__.pyiz other-stubsz namespace-stubs/pkg/__init__.pyi>namespace-stubs.pkgr&namespace-stubsz&namespace-stubs/pkg-stubs/__init__.pyirz_hidden/file.pyznews/finalize.pyc|jd|z}t||it|i}t|j|ksJdS)Nr9)r>rUrrmr!)rr rrrCr^s r"!test_flat_layout_with_extra_fileszBTestDiscoverPackagesAndPyModules.test_flat_layout_with_extra_filessW* 6"[0hr2222&&4=!!T))))))r$rzother/__init__.pyzother/finalize.pyc|jd|z}t||itjtd5t |iddddS#1swxYwYdS)Nr9multiple (packages|modules)matchr>rUpytestraisesr r)rr rrCs r"+test_flat_layout_with_dangerous_extra_fileszLTestDiscoverPackagesAndPyModules.test_flat_layout_with_dangerous_extra_filess 6"[0hr222 ]08U V V V $ $ h # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sAA"Ac|jddgz}t||it|i}t|jdhksJdS)Nr:zinvalid-module-name.pyr&)r>rUrrmr5)rr rCr^s r"#test_flat_layout_with_single_modulezDTestDiscoverPackagesAndPyModules.test_flat_layout_with_single_modules[ ?+/G.HHhr2222&&4?##w......r$c|jddgz}t||itjtd5t |iddddS#1swxYwYdS)Nr:zvalid_module_name.pyrrr)rr rCs r"&test_flat_layout_with_multiple_moduleszGTestDiscoverPackagesAndPyModules.test_flat_layout_with_multiple_moduless ?+/E.FFhr222 ]08U V V V $ $ h # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sAA #A cddlm}d}|dz t|d|dz t j|5| dd d d n #1swxYwYtt| d }d|vsJd S) zRegression for issue 3692r) build_metaz%[project] name = "test" version = "1"rtryrzzfoo.py.Nz*.whl) setuptoolsrr}rrjaracopathDirectoryStackcontext build_wheelrrirj)rr rrros r"%test_py_modules_when_wheel_dir_is_cwdzFTestDiscoverPackagesAndPyModules.test_py_modules_when_wheel_dir_is_cwds))))))= $ $00i70SSS H ##%%% [ ' ' ) ) 1 1( ; ; ( (  " "3 ' ' ' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ((X]]7-C-C(D(DEE ;&&&&&&s8BB!BN)r-r.r/__doc__r?r>rErmark parametrizekeysr[rqrr|rrrrrrrr0r$r"r2r2+s  *,U %II B; %ug.#/%"9)D(+;<#%!  G&'89%'89"M2"*+   E  [^W\\^^<<;;=<; [^W\\^^<<''=<'BT    D   $    $(4 $ $ E))V [0 7 7 7  & JJLL  ,,,, [& '% 1& '%)= >( )E=+A B44AAA ::)*   5' * !E7 + (**)(*  [ ! ! $$$ /// $$$ ' ' ' ' 'r$r2ceZdZdZdgdgddgddgdgd gd Zejd ed Z d Z dS) TestNoConfigz0.0.0z src/pkg1.pyzsrc/pkg2/__init__.pyzsrc/pkg3/__init__.pyzsrc/pkg3-stubs/__init__.pyzpkg4/__init__.pyzpkg4-stubs/__init__.pyzsrc/ns/nested/pkg1/__init__.pyzns/nested/pkg2/__init__.py)r'r(pkg3pkg4zns.nested.pkg1zns.nested.pkg2examplect||j|it|i}||ksJdSrQ)rUEXAMPLESrget_name)rr rr^s r"test_discover_namezTestNoConfig.test_discover_namesIh g(>CCC2&&}}'))))))r$cdg}t||it|d|d|jdz }|sJdS)Nzsrc/ns/nested/pkg/__init__.py--sdistzdist/ns_nested_pkg-z.tar.gz)rUrhDEFAULT_VERSIONis_file)rr rC dist_files r"test_build_with_discovered_namez,TestNoConfig.test_build_with_discovered_namesc01hr2228Y'''RT5IRRRR   """""""r$N) r-r.r/rrrrrrrrr0r$r"rrsO'(')EF#%=>;<78 H [Y 88**98* #####r$rcreZdZejddifddddidfgdZdZd S) TestWithAttrDirective)folderoptsrr4zfind:where)r! packages.findcl|ddg}t||||dz d}|dddiidd|zi}tj|| t |i}|dksJ|d ksJ|jsJtd|j|}tj |sJ|t| vsJt|d |d z } | sJdS) Nz/pkg/__init__.pyrrryrzr& __init__.py version = 42z'[metadata] version = attr: pkg.version prefix42rzdist/pkg-42.tar.gz)rU read_textrrr]rr get_versionr3rrJexistsrpartsrhr) rr rrrCr overwriter^ package_pathrs r"test_setupcfg_metadataz,TestWithAttrDirective.test_setupcfg_metadatasb,,,k:ht444[(33W3EE U]N;< DvM   )H5552&&}}%''''!!T))))(0@(KK w~~l+++++l++113333338Y'''33   """""""r$ct|dgidddiidd}tj||t |i}|dksJ|jd d iksJdS) Nr7r&rrzh[project] name = 'pkg' dynamic = ['version'] [tool.setuptools.dynamic] version = {attr = 'pkg.version'} rrtrrrr)rUrrr]rrr3)rr rr^s r"test_pyproject_metadataz-TestWithAttrDirective.test_pyproject_metadata<sh)>(?DDDM>:;P    )H5552&&!!T))))B;......r$N)r-r.r/rrrrrr0r$r"rrsu [ BK GU;KLL M ###./////r$rc eZdZdZdZdZdS)TestWithCExtensioncgd}t||id}|dz t|ddS)N) zbenchmarks/file.pyz docs/Makefilezdocs/requirements.txtzdocs/source/conf.pyz proj/header.hz proj/file.pyz py/proj.cppz py/other.cppz py/file.pyz py/py.typedzpy/tests/test_proj.pyz README.rsta^ from setuptools import Extension, setup ext_modules = [ Extension( "proj", ["py/proj.cpp", "py/other.cpp"], include_dirs=["."], language="c++", ), ] setup(ext_modules=ext_modules) rsryrzrUr}r)rr rC setup_scripts r" _simulate_package_with_extensionz3TestWithCExtension._simulate_package_with_extensionNs\     hr222   J **4 +=+=*PPPPPr$c||d}|dz t|dd}|dz t|dt|i}|dksJ|dksJ|jJ|jJt|j d ksJ|j d j dksJd S) zEnsure that auto-discovery is not triggered when the project is based on C-extensions only, for backward compatibility. zr [build-system] requires = [] build-backend = 'setuptools.build_meta' rtryrzzQ [metadata] name = proj version = 42 rrprojrNr r) rr}rrrrr5r!len ext_modulesr+)rr rsetupcfgr^s r"*test_skip_discovery_with_setupcfg_metadataz=TestWithCExtension.test_skip_discovery_with_setupcfg_metadataos --h777 $ $00i70SSS  K ++DNNW+MMM2&&}}&((((!!T))))&&&}$$$4#$$))))"'6111111r$c ||d}|dz t|dtjt d5t |iddddS#1swxYwYdS)aWhen opting-in to pyproject.toml metadata, auto-discovery will be active if the package lists C-extensions, but does not configure py-modules or packages. This way we ensure users with complex package layouts that would lead to the discovery of multiple top-level modules/packages see errors and are forced to explicitly set ``packages`` or ``py-modules``. zT [project] name = 'proj' version = '42' rtryrzrrN)rr}rrrr r)rr rs r"0test_dont_skip_discovery_with_pyproject_metadatazCTestWithCExtension.test_dont_skip_discovery_with_pyproject_metadatas --h777 $ $00i70SSS ]08U V V V $ $ h # # # $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sA88A<?A<N)r-r.r/rrrr0r$r"rrMsEQQQB2228$$$$$r$rc@eZdZdZdZdZdZej ddde eifdde eifd de eifd de eifd de ee d zifd de ee d zifgd Z d S)TestWithPackageDatac|d|d|dg}t||id}|dz t|ddS)Nz/proj/__init__.py/proj/file1.txt/proj/nested/file2.txtz/ global-include *.py *.txt z MANIFEST.inryrzr)rr src_rootrCrZs r"!_simulate_package_with_data_filesz5TestWithPackageData._simulate_package_with_data_filesst * * * ( ( ( / / /  hr222  M !--d8nnw-OOOOOr$zd [metadata] name = proj version = 42 [options] include_package_data = True z8 [project] name = "proj" version = "42" z: [tool.setuptools] package-dir = {"" = "src"} )rrCrrrrtrz packages = find: package_dir = =src [options.packages.find] where = src zv [tool.setuptools] package-dir = {"" = "src"} cdtj|t||||t j|dt jdt j|dt jdh}t|tt| d}tdtd|||ksJtt| d}td td|d |D}||ksJd S) zq Make sure auto-discovery does not affect package include_package_data. See issue #3196. rrrHrr_r`rarbrccbh|],}|dddd-SrerfrLs r"rgz@TestWithPackageData.test_include_package_data..s6RRRAaii++33FB??RRRr$N)rrr]strrrJnormpathrIrKrhrrirjrkrlr)rr rrCexpectedrnrorps r"test_include_package_dataz-TestWithPackageData.test_include_package_datasT  %H 666 ..xBBB G  999 : : B B263 O O G  @@@ A A I I"&RU V V  8'X]]?-K-K(L(LMM  )*** dii $$%%%h&&&&'X]]<-H-H(I(IJJ  )*** dii $$%%%RRRRR j((((((r$N) r-r.r/rEXAMPLE_SETUPCFGEXAMPLE_PYPROJECTPYPROJECT_PACKAGE_DIRrrrrrr0r$r"rrsI P P P   [ ;%5 6 67 8 #TT*;%<%<= > [$$'7"8"89 : %tt,='>'>? @&6!7!7d   "  "$dd+<&=&=d' +! $$J))K$$J)))r$rcgd}t||iti}t|_||jJ|jJdS)N)zdir1/__init__.pyzdir2/__init__.pyzfile.py)rUr object configuration set_defaultsr5r!)r rCr^s r"(test_compatible_with_numpy_configurationrst   E (E2...   DD ? " " " = r$ctjdditi}dg|_|||dksJdS)Nr8rz--namer&)rrr]r script_argsrparse_command_liner) tmpdir_cwdr^s r"$test_name_discovery_doesnt_break_clirsv Kxn%%%   D zD ==??e # # # # # #r$cdddiitdd}tj|t ijjfd}|jd| dksJtj dhksJd S) a According to #3545 it seems that ``name`` discovery is running, even when the project already explicitly sets it. This seems to be related to parsing of dynamic versions (via ``attr`` directive), which requires the auto-discovery of ``package_dir``. r&rz__version__ = 42 z [project] name = "myproj" # purposefully different from package name dynamic = ["version"] [tool.setuptools.dynamic] version = {"attr" = "pkg.__version__"} rcPdksJdS)Nmyproj)r)r^orig_analyse_namesr"spy_analyse_namezJtest_preserve_explicit_name_with_dynamic_version..spy_analyse_name/s3 }}(******r$ analyse_namerN) rrrr]r rrsetattrparse_config_filesrrmr!)r monkeypatchrCrr^rs @@r"0test_preserve_explicit_name_with_dynamic_versionrs M#78     E Ke   D)6++++++ )>;KLLL      % % % % t}  % ( ( ( ( ( (r$cdddd}tj|t|fd|D}|D]2}|jdd|3dS) Nz$import setuptools setuptools.setup()z# Example PackagezCopyright (c) 2018)rsz README.mdLICENSErc3"K|] }|z V dSrQr0)rMrNroots r"rTz(_populate_project_dir..Fs' % %!TAX % % % % % %r$Tr)rrr]_write_setupcfgparentrr)rrCrDbasicpathsrs` r"rUrU;s <('  E  KeD)))D'""" % % % %u % % %E 4666 r$cP|stddSt}|d|D]\}}|dkr7|d||d||Bt |t rd||d|<vt |tr@dd|D}d|z|d|<t||d|<t|dz d d 5}| |dddn #1swxYwYtd t|dz d dS) Nz~~~~~ **NO** setup.cfg ~~~~~rDrzoptions.z, rac3,K|]\}}d|d|VdS) z = Nr0)rMkvs r"rTz"_write_setupcfg..Ys2!K!KTQ.q..Q..!K!K!K!K!K!Kr$rrwryrzz~~~~~ setup.cfg ~~~~~) rkr add_sectionitemsupdate isinstancelistrldictropenwriter)rrDrkeyvalue str_valuerNs r"rrLs  ,---~~H ###mmoo 2 2 U / ! !  !1C!1!1 2 2 2 %%% & - -e 4 4 4 4 t $ $ 2'+yy'7'7HY  $ $ t $ $ 2 !K!KU[[]]!K!K!KKKI'+i'7HY  $ $'*5zzHY  $ $ d[ # 8 8 8Aq !""" 4+  ( (' ( : :;;;;;sE&&E*-E*cjtjdddg|t|}t|ddiS)Nz-mr]z--no-isolationDISTUTILS_DEBUGr)env)sys executablerr)rflagsrYs r"rhrhcs< >4*: NU NCII NC s*B/ 0 0 00r$c .dtj|}|dz }|r]t |5t ttj did}dddn #1swxYwYnt|}||_ d|_ t |5| dddn #1swxYwY||S)NrHrsinit) stop_after)rlrJrsplitrrrr distutilscore run_setupr script_namerr) dist_pathattrsrscriptr^s r"rrhss 88BGMM),, - -D  #F }}# )__  ((RF(KKD                E""DM!D i"" !!!"""""""""""""""  Ks$6BB!$B!C66C:=C:cft||}t|}||jjs|jjsJt 5t|5|dddn #1swxYwYdddn #1swxYwY||fSrQ) rrensure_finalized distributionr!r5r rr)r$r%r^rYs r"rVrV~s# Y & &D ++C   $C(8(CCC C $y//   9s6B$,B  B$ B B$B B$$B(+B()/rJr configparserr itertoolsrtypingr jaraco.pathrrrrrsetuptools.command.sdistrsetuptools.discoveryrr setuptools.distr setuptools.errorsr contextsr integration.helpersrrrtextwraprdistutils.corer rr2rrrrrrrrUrrhrrVr0r$r"r6s %%%%%% ******GGGGGGGG((((((333333JJJJJJJJJJLLLLLLLL&T'T'T'T'T'T'T'T'n########6-/-/-/-/-/-/-/-/`O$O$O$O$O$O$O$O$d^)^)^)^)^)^)^)^)B ! ! !$$$!)!)!)H"<<<.111 ,     r$