K ij7ddlZddlZddlZddlZddlmZddlmZddlZ ddl Z ddl m Z ddl mZddlmZdZd Zd Ze j(j+d d ed dZeddddddddeddZdZe j(j5ddZedddddddddididddedd Zd!ZGd"d#Zd&d$Zd%Z y)'N)Path)Mock)SetuptoolsDeprecationWarning) Distribution)DALSc ttddgdgddgi}tjd|j |j y)z Directories matching the glob in package_data should not be included in the package data. Regression test for #261. setup.pybuild_pyzpath/* script_name script_argspackages package_dataz path/subpathN)rdictosmakedirsparse_command_line run_commands tmpdir_cwddists d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/setuptools/tests/test_build_py.py%test_directories_in_package_data_globrsS  "# Txj)   DKKc Nttddgdgddgi}tjdt ddj |j |jtjtjd jsJd y ) zt Files matching recursive globs (**) in package_data should be included in the package data. #1806 r r r z path/**/datar zpath/subpath/subsubpathzpath/subpath/subsubpath/datawbz&build/lib/path/subpath/subsubpath/datazFile is not includedN) rrrropencloserrstatS_ISREGst_moders r#test_recursive_in_package_data_globr$%s  "# T~./   DKK)* '.446 << HIQQ R Rrc ttddgdgddgi}tjdt ddj t ddj tj dtjtj dtj|j|jtjd y ) z Ensure read-only flag is not preserved in copy for package modules and package data, as that causes problems with deleting read-only files on Windows. #1451 r r pkgzdata.datr pkg/__init__.pyrz pkg/data.datbuildN) rrrrrr chmodr!S_IREADrrshutilrmtreers rtest_read_onlyr-?s  "# W*.   DKK D!'')$$&HH  -HH^T\\* MM'rzplatform.system() == "Windows"z-On Windows, files do not have executable bitsT)reasonraisesstrictc ttddgdgddgi}tjdt ddj t ddj tj dd |j|jtjd jtjzsJd y ) zv Ensure executable bit is preserved in copy for package data, as users rely on it for scripts. #2041 r r r&zrun-mer r'rz pkg/run-meizbuild/lib/pkg/run-mezScript is not executableN) rrrrrr r)rrr!r#S_IEXECrs rtest_executable_datar3Zs  "# W(,   DKK D!'')t""$HH\5! 77) * 2 2T\\ A" Arz [metadata] name = mypkg version = 42 [options] include_package_data = True packages = find: [options.packages.find] exclude = *.tests* r ) __init__.pyz test_mypkg.pyz test_file.txt)r4resource_file.txttestsz global-include *.py *.txt global-exclude *.py[cod] prune dist prune build prune *.egg-info )z setup.cfgmypkg MANIFEST.inctjjtt ddi}|j |j d}d}tjt|5tjddk(rtjdd d |j|jdddt!|j dj"}|d z j%sJ|d z j%sJdD]:}tj&t(5||z j%rJ ddd<tj*dy#1swYxYw#1swYhxYw)Nr %PEP 517%r z9Python recognizes 'mypkg\.tests' as an importable package)matchSETUPTOOLS_USE_DISTUTILSstdlibignorez!'encoding' argument not specifiedzdistutils.text_file)modulemypkg/__init__.pyzmypkg/resource_file.txt)zmypkg/tests/__init__.pyzmypkg/tests/test_mypkg.pyzmypkg/tests/test_file.txtz mypkg/testsz#3260)jaracopathr(EXAMPLE_WITH_MANIFESTrparse_config_filesget_command_objpytestwarnsrrgetenvwarningsfilterwarningsfinalize_optionsrunr build_libexistsr/AssertionErrorxfail)rrr msg build_dirfs rtest_excluded_subpackagesrTs] KK+,  4 5D##J/H FC 2# > 99/ 0H <  # #3,  !!# !$T))*5??@I + + 3 3 55 5 1 1 9 9 ;; ; 0 ]]> * 0"A --/ /// 0 0 0 LLG< 0 0s/AE+4E7+E47F z/ignore::setuptools.SetuptoolsDeprecationWarningchtjjtt ddi}|j |j sJ|jd}|jdtt|jjd}|jsJ|jd}|j|jd}t|j }|j#|d||j$j'dd |j)|d |_|j!|j-|j/|j$j'dd |j)|||_|j!|j1|j2sJt5d |j7}|sJt9t|j:d j=t>j@d }||vsJy ) zwWhen provided with the ``existing_egg_info_dir`` attribute, build_py should not attempt to run egg_info again. rr:egg_infoz *.egg-infor ) side_effectrL data_filesNcB|jtjdSN/)replacersep)xs rz(test_existing_egg_info..sAIIbffc2rr@r[)!rArBr(rCrrDinclude_package_datarE run_commandnextregg_baseglobis_dirrKrrLsetattr__dict__popreinitialize_commandexisting_egg_info_dir assert_called reset_mockassert_not_calledrXmap get_outputsstrrMr\rr]) r monkeypatchrrV egg_info_dirr egg_info_runoutputsexamples rtest_existing_egg_inforvs KK+,  4 5D  $ $$ $##J/HZ X../44\BCL     ##J/H ##J/HHLL1L%6  ,-h'&*H" LLN  ,-h'&2H" LLN""$    2H4H4H4JKG N7$x))+>?@HHQTUG g  ra; [project] name = "mypkg" version = "42" [tool.setuptools] packages = ["mypkg", "mypkg.sub1", "mypkg.sub2", "mypkg.sub2.nested"] [tool.setuptools.package-dir] "" = "src" "mypkg.sub2" = "src/mypkg/_sub2" "mypkg.sub2.nested" = "other" r7)r4zmod1.pyzmod2.py)r4r5sub1_sub2)r4zmod3.pyzL global-include *.py *.txt global-exclude *.py[cod] )pyproject.tomlsrcotherr8c(tjjtt ddi}|j |j d}d|_|j|jjtjd}|jDchc]"}|jtjd$}}||d|d|d|d |d |d |d hk(sJ|jjDcic]D\}}|jtjd|jtjdF}}}||dd |dd|dd|d d|d d|d d|d dik(sJycc}wcc}}w)Nrz%test%r Tr[z/mypkg/__init__.pyz/mypkg/resource_file.txtz/mypkg/sub1/__init__.pyz/mypkg/sub1/mod1.pyz/mypkg/sub2/mod2.pyz/mypkg/sub2/nested/__init__.pyz/mypkg/sub2/nested/mod3.pyzsrc/mypkg/__init__.pyzsrc/mypkg/resource_file.txtzsrc/mypkg/sub1/__init__.pyzsrc/mypkg/sub1/mod1.pyzsrc/mypkg/_sub2/mod2.pyzother/__init__.pyz other/mod3.py)rArBr(EXAMPLE_ARBITRARY_MAPPINGrrDrE editable_modeensure_finalizedrMr\rr]roget_output_mappingitems) rrr rMr^rtkvmappings rtest_get_outputsr/s KK/0 1 2D##J/H!H ""**26637I/7/C/C/EF!qyy%FGF  +'( +-. +,- +() +() +34 +/0  //1779 Aq "&&# "&&# 66G  +'(*A +-.0M +,-/K +()+C +()+D +346I +/0/  Gs %'F A Fc 0eZdZedededdZdddddidd hd dd ddd iid dhd dddidddihdd dZejjddejdejjdgejjdejdZ ejjddgejjdejdZ dZy)TestTypeInfoFileszV [project] name = "foo" version = "1" z [project] name = "foo" version = "1" [tool.setuptools] include-package-data = false z [project] name = "foo" version = "1" [tool.setuptools] include-package-data = false [tool.setuptools.exclude-package-data] "*" = ["py.typed", "*.pyi"] )default_pyprojectdont_include_package_dataexclude_type_infofoor )bar.pyipy.typedr4z foo/bar.pyi foo/py.typed)directory_structureexpected_type_filesbar)rzmod.pyizfoo/bar/mod.pyizfoo/bar/py.typedzfoo.pyi) namespace __init__.pyir>foo/__init__.pyifoo/namespace/foo.pyir)simple_namespacenested_inside_namespacenamespace_nested_inside_regular pyprojectrrzpypa/setuptools#4350)r.)marksruci|j|dd|j|i}|j|d}tjj |t }t |}||ksJyNrryr)EXAMPLES PYPROJECTSrArBr(get_finalized_build_pyroselfrrru structurerr rts r#test_type_files_included_by_defaultz5TestTypeInfoFiles.test_type_files_included_by_defaults| mmG$%:; dooi8 #mmG45JK )$)+h'"g---rrci|j|dd|j|i}|j|d}tjj |t }t |}|j|sJyr)rrrArBr(rro isdisjointrs rtest_type_files_can_be_excludedz1TestTypeInfoFiles.test_type_files_can_be_excludeds mmG$%:; dooi8 #mmG45JK )$)+h'"--g666rctddddd}ddh}tjj|t }t |}||ksJy)Nzl [project] name = "foo-stubs" version = "1" r )rr)ryz foo-stubszfoo-stubs/__init__.pyizfoo-stubs/bar.pyi)rrArBr(rro)rrrrr rts rtest_stub_only_packagez(TestTypeInfoFiles.test_stub_only_packages`"+-<   89LM )$)+h'"g---rN)__name__ __module__ __qualname__rrrrFmark parametrizeparamrPkeysrrrrrrrQs!  &*  & "   %JH! "#%$%2>#B  $&#%$%67I#J $ !2"%' " $$, -&HP [[  FLL+kk''/E'F    [[Y 8 .9  . [[[+>*?@ [[Y 8 79A 7.rrctd|i}|j|jd}|j|S)Nrr )rrDrErK)rrr s rrrs>  4 5D##J/H  Orct|j}|jDchc]@}tjj ||j tjdBc}Scc}wrZ)rrMrorrBrelpathr\r])r rRr^s rroros]X''(I%%'   9%--bffc:  sAA0)z%build_py-test%)!rr+r!rIpathlibr unittest.mockr jaraco.pathrArF setuptoolsrsetuptools.distrtextwraprrr$r-rrPrOr3rCrTrJrvr}rrrrorrrrsU  3((46$ :      :    1!H+\MN3O3n  !#! 2    C'TD..Dr