
    ?wg<                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlZddlmZ ddlZddlmc mZ ddlmZmZm Z  ddl!m"Z" dd	lm#Z# dd
l$mZ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0Z1 ejd                  d      d        Z3 G d d      Z4 e/d      Z5 G d d      Z6ejn                  jq                  d       G d d             Z9ejd                  d        Z:ejn                  jw                  d      ejn                  jw                  d       G d d                     Z<ejd                  d!        Z=ejn                  jw                  d"       G d# d$             Z>ejd                  d%        Z? G d& d'      Z@ G d( d)      ZAd* ZBd+ ZCd, ZDd- ZEd.d/eBddd0fd1ZFejn                  j                  e
j                  j                  d2      xr  ej                  e
j                        d34       G d5 d6             ZL G d7 d8      ZM G d9 d:      ZN G d; d<e      ZOd= ZPejn                  j                  e
j                  d>k(  d?4      d@        ZRy)AzEasy install Tests    N)Path)
NamedTuple)mockpath)Distributionnormalize_pathworking_set)sandbox)PthDistributions)r   	run_setup)fail_on_ascii)
MockServerpath_to_url   )contexts)DALST)autousec                 (    | j                  dd       y)z
    Important: Disable the default index for pip to avoid
    querying packages in the index and potentially resolving
    and installing packages there.
    PIP_NO_INDEXtrueN)setenv)monkeypatchs    Y/var/www/horilla/myenv/lib/python3.12/site-packages/setuptools/tests/test_easy_install.pypip_disable_indexr   )   s     ~v.    c                       e Zd Zd Zd Zy)FakeDistc                     |dk7  ri S ddiS )Nconsole_scriptsnameep )selfgroups     r   get_entry_mapzFakeDist.get_entry_map4   s    %%I~r   c                      y)Nspecr$   r%   s    r   as_requirementzFakeDist.as_requirement9   s    r   N)__name__
__module____qualname__r'   r+   r$   r   r   r   r   3   s    
r   r   z3
    from setuptools import setup

    setup()
    c                   0   e Zd Zd Zd Zd Zd Zd Zej                  d        Z
ed        Zej                  d        Zed	        Zej                  d
        Zej                   j#                  ej&                  j)                  d       d      d        Zy)TestEasyInstallTestc                    t         j                  j                         j                         j	                         }t               }t        t         j                  j                  |            }t        j                  |d      \  }}|j                  |      sJ d|v sJ d|v sJ d|v sJ t        j                  d|t        j                        sJ y )N   z'spec'z'console_scripts'z'name'z^# EASY-INSTALL-ENTRY-SCRIPT)flags)eiCommandSpecbestfrom_environment	as_headerr   nextScriptWriterget_args	itertoolsislice
startswithresearch	MULTILINE)r%   headerdistargs_namescripts         r   test_get_script_argsz(TestEasyInstallTest.test_get_script_argsG   s    $$&779CCEzBOO,,T23!((q1v  (((6!!!"f,,,6!!!yy7r||TTTr   c                    t               }t        j                  |      }d |_        d|_        ddg|_        t        j                  j                  t        j                         d      |_        dg|_        |j                          |j                  j                  i k(  sJ t        j                  |      }d |_        ddg|_        t        j                  j                  t        j                         d      |_        dg|_        |j                          t!        |j                  j                  j#                               }|ddgk(  sJ y )Nc                       yNTr$   r$   r   r   <lambda>z8TestEasyInstallTest.test_no_find_links.<locals>.<lambda>W       r   Tlink1link2okc                       yrJ   r$   r$   r   r   rK   z8TestEasyInstallTest.test_no_find_links.<locals>.<lambda>a   rL   r   )r   r4   easy_installcheck_pth_processingno_find_links
find_linksosr   jointempfilemkdtempinstall_dirrD   ensure_finalizedpackage_indexscanned_urlssortedkeys)r%   rC   cmdr^   s       r   test_no_find_linksz&TestEasyInstallTest.test_no_find_linksR   s    ~ood##/  !7+'',,x'7'7'94@6  --333 ood##/ !7+'',,x'7'7'94@6c''4499;<))))r   c                    t               }t        j                  |      }t        j                         |_        t        j                  t        j                  j                        5  |j                          ddd       y# 1 sw Y   yxY w)zS
        Test that `cant_write_to_target` is rendered as a DistutilsError.
        N)r   r4   rQ   rU   getcwdrY   pytestraises	distutilserrorsDistutilsErrorcant_write_to_target)r%   rC   r_   s      r   test_write_exceptionz(TestEasyInstallTest.test_write_exceptioni   s_     ~ood#))+]]9++::; 	'$$&	' 	' 	's   &B  B	c                     t        d      fd}|j                  t        d|d       t        j                         v sJ y)zh
        get_site_dirs should always return site dirs reported by
        site.getsitepackages.
        z/setuptools/test/site-packagesc                  
     gS Nr$   r   s   r   mock_gspz8TestEasyInstallTest.test_all_site_dirs.<locals>.mock_gspz   s
    6Mr   getsitepackagesFraisingN)r	   setattrsiter4   get_site_dirs)r%   r   rm   r   s      @r   test_all_site_dirsz&TestEasyInstallTest.test_all_site_dirss   sF    
 >?	 	D"3XuMr''))))r   c                 `    |j                  t        dd       t        j                         sJ y )Nrn   Fro   )delattrrr   r4   rs   )r%   r   s     r   0test_all_site_dirs_works_without_getsitepackageszDTestEasyInstallTest.test_all_site_dirs_works_without_getsitepackages   s*    D"3UC!!!r   c                     dt        d      fddg}d}||z  }t        j                  t        |      d      }|D ]  \  }}|j	                  ||        |j                          t        |      S )Nsetup.pya5  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-unicode",
                        version="1.0",
                        packages=["mypkg"],
                        include_package_data=True,
                    )
                    zmypkg/__init__.py )u   mypkg/☃.txtr{   zsetuptools-test-unicode-1.0.zipw)r   zipfileZipFilestrwritestrcloser%   tmpdirfiles
sdist_namesdist	sdist_zipfilenamecontents           r   sdist_unicodez!TestEasyInstallTest.sdist_unicode   s     
'
0 7
# OOCJ4	!& 	2Hgx1	25zr   c                     t        ddgi      }|dz  j                         }t        j                  |t	        |      dg      }|j                  t        j                  dt	        |             |j                          |j                  |       y)zq
        The install command should execute correctly even if
        the package has unicode filenames.
        script_argsrQ   targetxrY   rD   
PYTHONPATHN	r   
ensure_dirr4   rQ   r   setitemrU   environrZ   )r%   r   r   r   rC   r   r_   s          r   test_unicode_filename_in_sdistz2TestEasyInstallTest.test_unicode_filename_in_sdist   s|     ]^,<=>8#//1ooF

 	BJJc&kB'r   c                    dt        d      fddt        d      fg}d}||z  }t        j                  t        |      d      }|D ]&  \  }}|j	                  ||j                  d             ( |j                          t        |      S )	Nry   ar  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-unicode",
                        version="1.0",
                        packages=["mypkg"],
                        include_package_data=True,
                        scripts=['mypkg/unicode_in_script'],
                    )
                    rz   zmypkg/unicode_in_scriptu   
                    #!/bin/sh
                    # á

                    non_python_fn() {
                    }
                z&setuptools-test-unicode-script-1.0.zipr|   utf-8)r   r}   r~   r   r   encoder   r   s           r   sdist_unicode_in_scriptz+TestEasyInstallTest.sdist_unicode_in_script   s     	 &)#
< >
# OOCJ4	!& 	BHgx)@A	B5zr   c                     t        ddgi      }|dz  j                         }t        j                  |t	        |      dg      }|j                  t        j                  dt	        |             |j                          |j                  |       y)zr
        The install command should execute correctly even if
        the package has unicode in scripts.
        r   rQ   r   r   r   r   Nr   )r%   r   r   r   rC   r   r_   s          r   test_unicode_content_in_sdistz1TestEasyInstallTest.test_unicode_content_in_sdist   sv     ]^,<=>8#//1oodF3%HBJJc&kB01r   c                 r    dt        d      fdt        d      fg}d}t        ||z        }t        ||       |S )Nry   a  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-script",
                        version="1.0",
                        scripts=["mypkg_script"],
                    )
                    mypkg_scriptzg
                     #/usr/bin/python
                     print('mypkg_script')
                     zsetuptools-test-script-1.0.zip)r   r   
make_sdist)r%   r   r   r   r   s        r   sdist_scriptz TestEasyInstallTest.sdist_script   s\     	 
0 6
FZ'(5% r   linuxzTest can only be run on Linuxreasonc                 J   t        ddgi      }|dz  j                         }t        j                  |t	        |      dg      }|j                  t        j                  dt	        |             |j                          |j                  |       |dz  j                         sJ y)	z.
        Check scripts are installed.
        r   rQ   r   r   r   r   r   N)
r   r   r4   rQ   r   r   rU   r   rZ   exists)r%   r   r   r   rC   r   r_   s          r   test_script_installz'TestEasyInstallTest.test_script_install  s     ]^,<=>8#//1ooF

 	BJJc&kB&'//111r   N)r,   r-   r.   rG   r`   ri   rt   rw   rc   fixturer   r   r   r   r   r   markskipifsysplatformr>   r   r$   r   r   r0   r0   F   s    	U*.'*" ^^! !F ( (  ^^' 'R 2 2 ^^ < [[LL##G,,5T  22r   r0   zignore:Unbuilt eggc                       e Zd Zd Zd Zd Zy)TestPTHFileWriterc                     t        dt        j                         g      }|j                  rJ |j	                  t        t        j                                      |j                  sJ y)zba pth file manager should set dirty
        if a distribution is in site but also the cwd
        does-not_existN)r   rU   rb   dirtyaddPRDistribution)r%   pths     r   !test_add_from_cwd_site_sets_dirtyz3TestPTHFileWriter.test_add_from_cwd_site_sets_dirty'  sH     /"))+?99}ryy{+,yyyr   c                     d}t        j                  |      }t        d|g      }|j                  rJ |j	                  t        |             |j                  rJ y )Nz%/test/location/does-not-have-to-existr   )pkg_resourcesr	   r   r   r   r   )r%   locationr   s      r   test_add_from_site_is_ignoredz/TestPTHFileWriter.test_add_from_site_is_ignored0  sY    : //9
 99}x()99}9r   c                    |j                  d      }|j                          t        |j                  d            }t        |      }t        |      }|j                  |j                  cxk(  rg k(  sJ d        J d       |j                  d      }|j                          t        |      }|j                  j                  |       |j                          |j                  sJ d       ||j                  vsJ d       |j                          ||j                  v sJ d       |j                  d   |k(  sJ d	       t        |      j                  |j                  k(  sJ d
       y)z
        If the pth file is modified under the hood, then PthDistribution
        will refresh its content before saving, merging contents when
        necessary.
        
pth_subdirz	file1.pthz6unless there would be some default added at some point
src_subdirzEthe new_src_path added must still be present/valid in pth1 after savez:right before we save the entry should still not be presentzJthe new_src_path entry should have been added by pth2 with its save() callzVand it should match exactly on the last entry actually given we append to it in save()zXand we should have the exact same list at the end with a fresh PthDistributions instanceN)rV   mkdirr   r   pathsappendsave)r%   r   r   pth_pathpth1pth2new_src_pathnew_src_path_strs           r   *test_many_pth_distributions_merge_togetherz<TestPTHFileWriter.test_many_pth_distributions_merge_together>  sg    [[.
z{34))zzTZZ-2- 	
D	
- 	
D	
-
 {{<0|,

*+		zz 	
S	
z  tzz1 	
H	
1 			4::- 	
X	
- zz"~- 	
.	
-
  )//4::= 	
5	
=r   N)r,   r-   r.   r   r   r   r$   r   r   r   r   %  s    )
r   r   c              #      K   | dz  j                  dd      5 }|j                  t               d d d        | j                         5  |  d d d        y # 1 sw Y   'xY w# 1 sw Y   y xY ww)Nry   r|   r   encoding)openwriteSETUP_PYas_cwd)r   fs     r   setup_contextr   j  sh     
:
	#	#C'	#	: a		    s3   A-AA-A!	A-AA-!A*&A-user_overrider   c                      e Zd Z ej                  d ej
                               Z ej                  dej                         ej                  dd      ed                      Z	 ej                  dd      ed               Z
ed        Zd	 Zej                  d
        Zej                  d        Zd Zej(                  d        Zd Zy)TestUserInstallTestz;setuptools.command.easy_install.easy_install.check_site_dirz(setuptools.command.easy_install.__file__site.ENABLE_USER_SITETc                 $    | j                          y rl   assert_not_user_siter*   s    r   /test_user_install_not_implied_user_site_enabledzCTestUserInstallTest.test_user_install_not_implied_user_site_enabled~  s     	!!#r   Fc                 $    | j                          y rl   r   r*   s    r   0test_user_install_not_implied_user_site_disabledzDTestUserInstallTest.test_user_install_not_implied_user_site_disabled  s     	!!#r   c                      t               } d| _        t        j                  |       }dg|_        |j                          |j                  rJ d       y )Nry   pyzuser should not be implied)r   script_namer4   rQ   rD   rZ   user)rC   r_   s     r   r   z(TestUserInstallTest.assert_not_user_site  sJ     ~%ood#688999|8r   c                     t        j                  d       t        j                  d      }t        j                  t        j
                  t        j                         |j                  d       y )Nmultiprocessingtest_easy_install)levelstreamzthis should not break)	rc   importorskiplogging	getLoggerbasicConfigINFOr   stderrinfo)r%   logs     r   test_multiproc_atexitz)TestUserInstallTest.test_multiproc_atexit  sG    -. 34',,szzB()r   c                     |dz  }|j                  d      5 }|j                  d       d d d        t        |      S # 1 sw Y   t        |      S xY w)Nzfoo-1.0.egg-infor|   z
Name: foo
)r   r   r   )r%   r   egg_filer   s       r   foo_packagezTestUserInstallTest.foo_package  sK    ..]]3 	#1GGM"	#6{	#6{s	   <Ac              #     K   t        |      }t        j                  dt        j                  |gz         5  t
        j                  j                  j                  t        j                        }t        j                  j                  t
        j                  |      5  | d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nzsys.pathr   )
r   r   patchr   r   rU   pathseprV   dictr   )r%   r   r   python_paths       r   install_targetz"TestUserInstallTest.install_target  s     VZZ
CHHx$78 	''//..sxx8KD 	 	 	 	s5   4CA'B?B3"B?*	C3B<	8B??CCc                    t               }d|_        t        j                  |      }||_        dg|_        |j                          |j                  j                  |g       |j                  d      }t        j                  j                  t        j                  j                  |j                              }t        j                  j                  t        j                  j                  |            }||k(  sJ y)zd
        The local index must be used when easy_install locates installed
        packages.
        ry   fooN)r   r   r4   rQ   rY   rD   rZ   local_indexscanrU   r   normcaserealpathr   )r%   r   r   rC   r_   resactualexpecteds           r   test_local_indexz$TestUserInstallTest.test_local_index  s    
 ~%ood#(7k]+u%!!"''"2"23<<"@A77##BGG$4$4[$AB!!!r   c              /      K    | j                   |i |5  ddlmc m} t        j
                  |_        d ddd       y# 1 sw Y   yxY ww)zw
        Wrap sandbox.setup_context to patch easy_install in that context to
        appear as user-installed.
        r   N)orig_contextsetuptools.command.easy_installcommandrQ   rr   	USER_SITE__file__)r%   rD   kwargsr4   s       r   user_install_setup_contextz.TestUserInstallTest.user_install_setup_context  sE      T// 	88..BK		 	 	s   A#A	AA
Ac                 l    t         j                  | _        t        j                  d| j
                        S )Nz setuptools.sandbox.setup_context)r   r   r   r   r   r  r*   s    r   patched_setup_contextz)TestUserInstallTest.patched_setup_context  s-    #11zz.++
 	
r   N)r,   r-   r.   r   r   Mockprev_sp_writerr   r  r   r   staticmethodr   r   rc   r   r   r   r   
contextlibcontextmanagerr  r  r$   r   r   r   r   r  s     DJJE		M TZZ:DNNKTZZ'.$  / L$ TZZ'/$  0$ : :* ^^  ^^ "" 	 	
r   r   c               #     K   t         j                  dd      } t        j                  t        j
                        5  t        ddd      5 }|j                  |        d d d        d  d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nzfrom setuptools import setupz from distutils.core import setup)cdry   r|   r   r   )r   replacer   tempdirrU   chdirr   r   )distutils_setup_pyr   s     r   distutils_packager    s}     !))&* 
		RXX	& *cG4 	(GG&'	( 	( 	( s4   ;BA?A3A?*	B3A<	8A??BBr  c                       e Zd Zd Zy)TestDistutilsPackagec                     t        ddg       y )Nry   	bdist_eggr   r*   s    r   )test_bdist_egg_available_on_distutils_pkgz>TestDistutilsPackage.test_bdist_egg_available_on_distutils_pkg  s    *{m,r   N)r,   r-   r.   r  r$   r   r   r  r    s    -r   r  c                      t               } | j                  dk(  rt        j                  d       | j	                          | S )Nr   zcould not find a valid port)r   server_portrc   skipstart)p_indexs    r   
mock_indexr    s6     lGa 	12MMONr   c                       e Zd Zd Zd Zy)TestInstallRequiresc                 x   |dz  }|j                  d       |dz  }|j                  d       | j                  |       t        j                  ddddt	        |      dt	        |      d	t	        |      d
t	        |      dt	        |      dt	        |      dt	        |      g}i t
        j                  d|j                  i}t        j                  |t	        |      |t        j                  t        j                  dd      }|j                  dk7  sJ 	 d|j                  D ch c]  }|j                   c}v sJ t        d |j                   j#                         D              sJ yc c}w # t$        $ rB d|j                   v r2t'        j(                  t        j*                   d|j                            w xY w)z~
        When ``python setup.py install`` is called directly, it will use easy_install
        to fetch dependencies.
        projectT)exist_okinstall-c __import__("setuptools").setup()z--install-basez--install-libz--install-headersz--install-scriptsz--install-dataz--install-purelibz--install-platlib__EASYINSTALL_INDEXr   )cwdenvstdoutr   textr   r   /does-not-exist/c              3   0   K   | ]  }d |v rd|v r|  yw)z"not find suitable distribution forzdoes-not-existNr$   ).0lines     r   	<genexpr>zOTestInstallRequires.test_setup_install_includes_dependencies.<locals>.<genexpr>  s(      74?$, s   zfailed to get random numbersz failure - N)r   create_projectr   
executabler   rU   r   url
subprocessrunPIPESTDOUT
returncoderequestsr   r9   r+  
splitlines	Exceptionrc   xfailr   )	r%   tmp_pathr  project_rootinstall_rootr_   r*  cprs	            r   (test_setup_install_includes_dependenciesz<TestInstallRequires.test_setup_install_includes_dependencies  s     )+D))+D)L)NN.%
( DC2JNNC^^L!??$$
 }}!!!	%*:M:M)NQ!&&)NNNN II002    *O  	-:~[DE	s   E. #E)62E. )E. .AF9c                 l    d}|dz  j                  t        |      d       |dz  j                          y )Nz
        [metadata]
        name = project
        version = 42

        [options]
        install_requires = does-not-exist
        py_modules = mod
        	setup.cfgr   r   zmod.py)
write_textr   touch)r%   rootconfigs      r   r2  z"TestInstallRequires.create_project&  s7     
	''Vw'G	!r   N)r,   r-   r.   rC  r2  r$   r   r   r!  r!    s    6p"r   r!  c                   x   e Zd Zd Zeej                  d               ZdZe	j                  j                  de      d        Ze	j                  j                  de      d        Ze	j                  j                  de      d        Zd Zd	 Zd
 Zd Ze	j                  j                  dd      d        Zd Zd Zy)TestSetupRequiresc                    |j                  dd       |j                  dd       |j                  dd       t        j                         5  t        j	                         5 }t        j
                         5 }t        j                  |      5  t        j                  ddd	d
|j                  dd||g
}t        j                  |      j                          ddd       ddd       ddd       ddd       |j                  D cg c]  }|j                   c}dgk(  sJ y# 1 sw Y   LxY w# 1 sw Y   PxY w# 1 sw Y   TxY w# 1 sw Y   XxY wc c}w )z
        When easy_install installs a source distribution which specifies
        setup_requires, it should honor the fetch parameters (such as
        index-url, and find-links).
        PIP_RETRIES0PIP_TIMEOUTr   falser   r&  r'  rQ   z--index-urlz--exclude-scriptsz--install-dirNr-  )r   r   quietrK  create_sdistr  environmentr   r3  r4  r5  Popenwaitr:  r   )r%   r  r   	dist_filetemp_install_dirr_   rB  s          r   'test_setup_requires_honors_fetch_paramsz9TestSetupRequires.test_setup_requires_honors_fetch_params5  s1    	=#.=#.>73^^ 	5"//1 5Y%%' 5+;!--9IJ 5NN >*)&NN/+,% #((-224555	5& !+ 3 34149K8LLLL5 55 55 5	5 	5& 5s[   E D75D+AD	D+D7$EED($D++D40D77E 	<EEc               #      K   t        j                         5 } t        j                  j	                  | d      }t        |dt        d      fdg       | ddd       y# 1 sw Y   yxY ww)zl
        Return an sdist with a setup_requires dependency (of something that
        doesn't exist)
        z"setuptools-test-fetcher-1.0.tar.gzry   a  
                    import setuptools
                    setuptools.setup(
                        name="setuptools-test-fetcher",
                        version="1.0",
                        setup_requires = ['does-not-exist'],
                    )
                rE  r{   N)r   r  rU   r   rV   r   r   )dir	dist_paths     r   rR  zTestSetupRequires.create_sdistS  sr       	3S*NOI #	 && O+	 	 	s   A*>A	A*A'#A*)r$   dependency_linkssetup_requires)r^  r`  use_setup_cfgc                 ,   t        ddd      }t        j                  |       t        j                         5  t        j
                         5 }t        ||      }t        j                  j                  |d      }t        j                         5 \  }}t        |dg       ddd       j                         }t        |      d	kD  sJ |d
   j                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   yxY w)a<  
        Regression test for distribution issue 323:
        https://bitbucket.org/tarek/distribute/issues/323

        Ensures that a distribution's setup_requires requirements can still be
        installed and used locally even if a conflicting version of that
        requirement is already on the path.
        zdoes-not-matterfoobar0.0project_nameversionra  ry   --nameNr   r   test_pkg)r   r
   r   r   save_pkg_resources_stater  create_setup_requires_packagerU   r   rV   rQ  r   	readlineslenstrip)	r%   ra  	fake_disttemp_dirrj  test_setup_pyr+  _stderrliness	            r   .test_setup_requires_overrides_version_conflictz@TestSetupRequires.test_setup_requires_overrides_version_conflictx  s     #He
	 		"..0 	7!!# 7x8M !#Xz B^^% 9):&' mhZ89
 ((*5zA~%~Ry(J6667	7 	79 97 7	7 	7s=   D
AC>C2 A C>!D
2C;7C>>D	D

Dc           
      \   t        j                         5  t        j                         5 }t        j                  j                  |d      }t        |dd       t        j                  j                  |d      }t        j                  |       t        j                  |      5 }d |_
        |j                  |       ddd       t        j                  j                  d|       t        |dd      }t        j                   |       t#        d	      }t%        |dd
t        ||      }t        j                  j                  |d      }	t        j&                         5 \  }
}	 t)        |	dg       ddd       d
j1                         vsJ |
j3                         }t5        |      dkD  sJ |d   j7                         dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# t*        j,                  $ r | j/                  d       Y w xY w# 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   yxY w)z
        Like ``test_setup_requires_overrides_version_conflict`` but where the
        ``setup_requires`` package is part of a namespace package that has
        *already* been imported.
        zfoo.bar-0.1.tar.gzzfoo.bar0.1zfoo.bar-0.1c                     | S rl   r$   )memberr   s     r   rK   zFTestSetupRequires.test_setup_requires_override_nspkg.<locals>.<lambda>  s     r   Nr   re  a                      import foo  # Even with foo imported first the
                                # setup_requires package should override
                    import setuptools
                    setuptools.setup(**%r)

                    if not (hasattr(foo, '__path__') and
                            len(foo.__path__) == 2):
                        print('FAIL')

                    if 'foo.bar-0.2' not in foo.__path__[0]:
                        print('FAIL')
                z0.2rh  ry   ri  z9Installing setup.py requirements caused a VersionConflictFAILr   r   rj  )r   rk  r  rU   r   rV   make_nspkg_sdistr   tarfiler   extraction_filter
extractallr   insertr   r
   r   r   rl  rQ  r   r   VersionConflictfailgetvaluerm  rn  ro  )r%   ra  rq  foobar_1_archivefoobar_1_dirtfrC   templaterj  rr  r+  rs  rt  s                r   "test_setup_requires_override_nspkgz4TestSetupRequires.test_setup_requires_override_nspkg  s    ..0 :	7!!# 97x#%77<<:N#O  !19eD  "ww||HmD&\\"23 0r+FB(MM,/0 <0% y% %  9$"/ !#Xz B^^% ):&' "-(<	 V__%6666((*5zA~%~Ry(J666s97:	7 :	70 0T )88 		W Y97 97:	7 :	7ss   H"A8H"G<BHH
 G -AHH"GH $H	H
H	H

HHH	H""H+c           	      
   d }t        j                         5  t        j                         5 }t        |t	        d      ||dz         }t
        j                  j                  |d      }t        j                         5 \  }}t        |dg       d d d        j                         }t        |      dkD  sJ |d   j                         d	k(  sJ 	 d d d        d d d        y # 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nc           
      j    dt        d|d|d|d      f|dz   t        d      fg}t        | |       y )Nry   zj
                    import setuptools
                    setuptools.setup(
                        name=z",
                        version=z&,
                        py_modules=[z-],
                    )
                    z.pyz6
                    version = 42
                    )r   r   )r\  distnamerg  r   s       r   make_dependency_sdistzVTestSetupRequires.test_setup_requires_with_attr_version.<locals>.make_dependency_sdist  sm      '\ *!!( ,%%-L 1	 u$E. y%(r   zattr: foobar.version)rg  )setup_attrsmake_packagera  ry   	--versionr   r   42)r   rk  r  rl  r   rU   r   rV   rQ  r   rm  rn  ro  )	r%   ra  r  rq  rj  rr  r+  rs  rt  s	            r   %test_setup_requires_with_attr_versionz7TestSetupRequires.test_setup_requires_with_attr_version  s    	)4 ..0 	1!!# 1x8 $-C D!6"/,">	 !#Xz B^^% <):&'mk];<((*5zA~%~Ry(D0001	1 	1< <1 1	1 	1s<   C9AC->C!A C-C9!C*&C--C6	2C99Dc           
         |j                  dd       |j                  dd       |j                  dd       |j                  d|j                         t        j                         5  t        j                         5 }t        |ddt        g 	      
      }t        j                  j                  |d      }t        |dd      5 }|j                  t        d             d d d        t        j                  j                  |d      }t        j                  t        j                   j"                        5  t%        |dg       d d d        d d d        d d d        t'        |j(                        dk(  sJ |j(                  d   j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   bxY w# 1 sw Y   fxY w)NrM  rN  rO  r   rP  PIP_INDEX_URLpython-xlib0.19r]  r  rE  r|   r   r   z}
                        [easy_install]
                        index_url = https://pypi.org/legacy/
                        ry   r  r   r   z/python-xlib/)r   r4  r   rk  r  rl  r   rU   r   rV   r   r   r   rc   rd   re   rf   rg   r   rn  r:  )r%   r  r   rq  rj  test_setup_cfgfprr  s           r   "test_setup_requires_honors_pip_envz4TestSetupRequires.test_setup_requires_honors_pip_env  s   =#.=#.>73?JNN;..0 	<!!# <x8! $b 9	 "$h!D.#@ BHH !#Xz B]]9#3#3#B#BC <mk];<%<	<* :&&'1,,,""1%**o=== < <%< <	< 	<sV   'F7<AF+FAF+4FF+
F7FF+F($F++F4	0F77G c                 b   |j                  dd       |j                  dd       |j                  d|j                         t        j                         5  t        j                         5 }t
        j                  j                  |d      }t        |dd       t        |d	      }t        |d
dt        d|             }t
        j                  j                  |d      }t        |dg       d d d        d d d        t        |j                        dk(  sJ y # 1 sw Y   ,xY w# 1 sw Y   0xY w)NrM  rN  rO  r  z
dep.tar.gz
dependencyr  	localhost)	authorityr  r  zdependency @ r_  r  ry   r  r   )r   r4  r   rk  r  rU   r   rV   make_trivial_sdistr   rl  r   r   rn  r:  )r%   r  r   rq  	dep_sdistdep_urlrj  rr  s           r   #test_setup_requires_with_pep508_urlz5TestSetupRequires.test_setup_requires_with_pep508_url#  s   =#.=#.?JNN;..0 	8!!# 8xGGLL<@	"9lDA%i;G8! $mG94M N !#Xz B-+78	8 :&&'1,,,8 8	8 	8s%   D%*BD.D%D"	D%%D.c           	         dt        d      t        d      di}t        j                         5  t        j                         5 }t	        j
                  ||       t        t        j                  |dd            }t        j                  t        j                  j                        5  t        |dg       ddd       ddd       ddd       t        |j                         d	k(  sJ y# 1 sw Y   4xY w# 1 sw Y   8xY w# 1 sw Y   <xY w)
z2The `allow-hosts` option in not supported anymore.rj  z~
                    from setuptools import setup
                    setup(setup_requires='python-xlib')
                    z\
                    [easy_install]
                    allow_hosts = *
                    ry   rE  prefixry   r  Nr   )r   r   rk  r  r   buildr   pathlibr   rc   rd   re   rf   rg   r   rn  r:  )r%   r  r   rq  setup_pys        r   $test_setup_requires_with_allow_hostsz6TestSetupRequires.test_setup_requires_with_allow_hosts7  s       "
  ..0 	7!!# 7x

52w||Hj*MN]]9#3#3#B#BC 7h677	7 :&&'1,,,7 77 7	7 	7s<   DA%C5(C)6C5>D)C2.C55C>	:DD
c                     |j                  dd       |j                  dd       |j                  dd       |j                  dd       d}t        t        ||z              }d}t        t        ||z        d	d
|       d}t        t        ||z              }dt        j
                  j                   dt        j
                  j                   d}t        t        ||z        d	d|       |dz  }	|	j                  t        d      j                  ||||||      d       t        t        |	            }
t        j                         5  t        t        |      ddt        d	|
g            }t        j                   j#                  |d      }t%        |dg       ddd       t'        t)        t        t+        j,                  t        j                   j#                  d                        }|dgk(  sJ y# 1 sw Y   \xY w)z#Check `python_requires` is honored.rM  rN  rO  r   1PIP_VERBOSEzdep-1.0.tar.gzz>=2.7dep1.0zdep-2.0.tar.gzz!=.z.*z2.0z
index.htmla  
            <!DOCTYPE html>
            <html><head><title>Links for dep</title></head>
            <body>
                <h1>Links for dep</h1>
                <a href="{dep_1_0_url}"data-requires-python="{dep_1_0_python_requires}">{dep_1_0_sdist}</a><br/>
                <a href="{dep_2_0_url}"data-requires-python="{dep_2_0_python_requires}">{dep_2_0_sdist}</a><br/>
            </body>
            </html>
            )dep_1_0_urldep_1_0_sdistdep_1_0_python_requiresdep_2_0_urldep_2_0_sdistdep_2_0_python_requiresr   r  r  )r`  r^  r  ry   r  Nz.eggszdep 1.0)r   r   r   make_python_requires_sdistr   version_infomajorminorrF  r   formatr   rk  rl  r   rU   r   rV   r   listmapr   find_distributions)r%   r   r   r  r  r  r  r  r  index	index_urlrj  rr  eggss                 r   (test_setup_requires_with_python_requiresz:TestSetupRequires.test_setup_requires_with_python_requiresQ  s   =#.=#.>3/=#.(!#f}&<"=>")"&'7N	
 )!#f}&<"=>!!''(#*:*:*@*@)AD 	  	#&'7N	
 % f'+(?'+(?   -	
0  E
+	..0 	44F T	H GGLL:>Mmk]3	4 ]55bggll8W6UVW
 	{"""	4 	4s   AG44G=!with_dependency_links_in_setup_py)FTc                    |j                  dd       |j                  dd       t        j                         5  t        j                         5 }t	        t
        j                  j                  |d      dd       t
        j                  j                  |d      }t
        j                  j                  |d      }t
        j                  j                  |d	      }t        j                  |       t        |d
d      5 }|r"t
        j                  j                  |d      g}ng }|j                  t        d      j                  |             d d d        t        |d
d      5 }|j                  t        d      j                  t
        j                  j                  |d      |             d d d        t        |dg       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   3xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)NrM  rN  rO  zpython-xlib-42.tar.gzr  r  rj  ry   rE  r|   r   r   linksz
                        from setuptools import installer, setup
                        setup(setup_requires='python-xlib==42',
                        dependency_links={dependency_links!r})
                        r]  z
                        [easy_install]
                        index_url = {index_url}
                        find_links = {find_links}
                        r  )r  rT   r  )r   r   rk  r  r  rU   r   rV   r   r   r   r   r  r   )	r%   r   r  rq  rj  rr  r  r  r^  s	            r   0test_setup_requires_with_find_links_in_setup_cfgzBTestSetupRequires.test_setup_requires_with_find_links_in_setup_cfg  s    	=#.=#...0 $	8!!# #8x"GGLL+BC]TX 77<<*= "Xz B!#h!D"-w? 28,.GGLL7,K+L(+-(HH !&2B&C .#@ BHH !&&(ggll8W&E'/ !  -+7G#8$	8 $	8  -#8 #8$	8 $	8sV   G8B/G,=AGG,$A
G .G,G8GG, G)%G,,G5	1G88Hc                    t        j                         5  t        j                         5 }t        t        j
                  j                  |d      dd       t        j
                  j                  |d      }t	        j                  |       t        j                  t        d      dd|       t        t        j
                  j                  |d	      d
g       t        j                  |       t        j
                  j                  |d      }t        j
                  j                  |d	      }t	        j                  |       t        |dd      5 }|j                  t        d             ddd       |j                  dt!        |             |j                  dd       |j                  dd       |j                  dd       t        |dg       ddd       ddd       y# 1 sw Y   xxY w# 1 sw Y   xY w# 1 sw Y   yxY w)z
        Use case: installing a package with a build dependency on
        an already installed `dep[extra]`, which in turn depends
        on `extra_dep` (whose is not already installed).
        extra_dep-1.0.tar.gz	extra_depr  r  a  
                          import setuptools
                          setuptools.setup(
                              name='dep', version='2.0',
                              extras_require={'extra': ['extra_dep']},
                          )
                         r{   r  r  ry   	dist_inforj  r|   r   r   
                        from setuptools import installer, setup
                        setup(setup_requires='dep[extra]')
                        NPIP_FIND_LINKSr   r  rM  rN  rO  r  )r   rk  r  r  rU   r   rV   r   r  r   r   r
   	add_entryr   r   r   r   r%   r   rq  dep_pkgrj  rr  r  s          r   4test_setup_requires_with_transitive_extra_dependencyzFTestSetupRequires.test_setup_requires_with_transitive_extra_dependency  s    ..0 -	8!!# ,8x"GGLL+ABKQV '',,x7!

$(% &( #  "'',,w
;k]K%%g.77<<*= "Xz B"-w? 2HH ""#3S]C"">37""=#6""=#6-+7Y,8-	8 -	8> =,8 ,8-	8 -	8s<   G;D'G/G#,A&G/G;#G,(G//G8	4G;;Hc           	      <   t        j                         5  t        j                         5 }t        t        j
                  j                  |d      dt        d      fddg       t        j
                  j                  |d      }t	        j                  |       t        j                  t        d      dt        d	      d
|       t        t        j
                  j                  |d      dg       t        j                  |       t        j
                  j                  |d      }t        j
                  j                  |d      }t	        j                  |       t        |dd      5 }|j                  t        d             ddd       |j                  dt!        |             |j                  dd       |j                  dd       |j                  dd       t        |dg       ddd       ddd       y# 1 sw Y   xxY w# 1 sw Y   xY w# 1 sw Y   yxY w)zk
        Use case: ensure build requirements' extras
        are properly installed and activated.
        r  ry   a$  
                          import setuptools
                          setuptools.setup(
                              name='extra_dep',
                              version='1.0',
                              py_modules=['extra_dep'],
                          )
                          rZ  )zextra_dep.pyr{   epdepa(  
                          import setuptools
                          setuptools.setup(
                              name='dep', version='2.0',
                              py_modules=['epcmd'],
                              extras_require={'extra': ['extra_dep']},
                              entry_points='''
                                           [distutils.commands]
                                           epcmd = epcmd:epcmd [extra]
                                           ''',
                          )
                         r{   a  
                                     from distutils.command.build_py import build_py

                                     import extra_dep

                                     class epcmd(build_py):
                                         pass
                                     )ry   rE  zepcmd.pyr  r  rj  r|   r   r   r  Nr  r   r  rM  rN  rO  epcmd)r   rk  r  r   rU   r   rV   r   r   r  r   r
   r  r   r   r   r   r  s          r   .test_setup_requires_with_distutils_command_depz@TestSetupRequires.test_setup_requires_with_distutils_command_dep  s   
 ..0 M	4!!# L4xGGLL+AB ' !	 *,* '',,x9!

$(% &($()	%!6 #9> "'',,w
;k]K%%g.77<<*= "Xz B"-w? 2HH ""#3S]C"">37""=#6""=#6-'3YL4M	4 M	4~ }L4 L4M	4 M	4s<   HD>H(G:A&H)H:H?HH	HHN)r,   r-   r.   rX  r  r  r  rR  ra  rc   r   parametrizeru  r  r  r  r  r  r  r  r  r  r$   r   r   rK  rK  4  s    M<   8M [[_m<7 =7< [[_m<A7 =A7F [[_m<(1 =(1T>:-(-4:#x [[@-P)8 Q)8V38jR4r   rK  c                 D    t        | dt        d|d|d      fdg       y)z\
    Create a simple sdist tarball at dist_path, containing just a simple
    setup.py.
    ry   zT             import setuptools
             setuptools.setup(
                 name=z,
                 version=z
             )
         rZ  N)r   r   )r\  r  rg  s      r   r  r  C  sK        l #! %
	 	
r   c                    |j                  d      }|d   }t        dt        |      dz         D cg c]  }dj                  |d|        }}t	        d|d|d|d|d		      }d
}d|ft
        j                  j                  |d      |fg}	|dd D ]D  }
t        j                  j                  |
j                  d      dgz    }|	j                  |df       F t        | |	       yc c}w )z
    Make an sdist tarball with distname and version which also contains one
    package with the same name as distname.  The top-level package is
    designated a namespace package).
    r  r   r   NzE        import setuptools
        setuptools.setup(
            name=z,
            version=z,
            packages=z",
            namespace_packages=[z]
        )
    z7__import__('pkg_resources').declare_namespace(__name__)ry   z__init__.pyr{   )	splitrangern  rV   r   rU   r   r   r   )r\  r  rg  parts	nspackageidxpackagesr  initr   packager   s               r   r{  r{  ]  s    NN3EaI16q#e*q.1IJ#t%JHJ  K  \ "!!* .	
H ED(#bggll9m&Ld%STEAB< %77<<'--"4"FHh^$% y% + Ks   C'c           	      Z    t        | dt        d      j                  |||      fdg       y )Nry   z                import setuptools
                setuptools.setup(
                  name={name!r},
                  version={version!r},
                  python_requires={python_requires!r},
                )
                )r"   rg  python_requiresrZ  )r   r   r  )r\  r  rg  r  s       r   r  r    sF     	 &!7O   !	
r   c                    t        |      dkD  sJ t        j                  | d      5 }|D ]  \  }}t        j                  |j                  d            }t        j                  |      }t        |j                               |_        t        t        j                               |_        |j                  ||        	 ddd       y# 1 sw Y   yxY w)z
    Create a simple sdist tarball at dist_path, containing the files
    listed in ``files`` as ``(filename, content)`` tuples.
    r   zw:gzr   )r"   )fileobjN)rn  r|  r   ioBytesIOr   TarInfor  sizeinttimemtimeaddfile)r\  r   rC   r   r   
file_bytes	file_infos          r   r   r     s     u:>>	i	( 8D!& 	8HgGNN7$;<JX6I !4!4!67IN!$))+.IOLLJL7	88 8 8s   BC		Crc  rw  r$   c                    dd| d| gt         j                  j                  |       gd}|r|j                  |       t         j                  j	                  | d      }t        j
                  |       |rg }	g }
|D ]g  }|j                  |      }|dj                         v r|
}n|	}t        |t        t        f      rdj	                  |      }|j                  | d|        i t        d      j                  d	j	                  |	      d	j	                  |
      
      }nd}t        t         j                  j	                  |d      dd      5 }|j                  |       ddd       |t        d      }t        t         j                  j	                  |d      dd      5 }|j                  ||z         ddd       t         j                  j	                  | | d| d      } ||||       |S # 1 sw Y   xY w# 1 sw Y   GxY w)a  Creates a source tree under path for a trivial test package that has a
    single requirement in setup_requires--a tarball for that requirement is
    also created and added to the dependency_links argument.

    ``distname`` and ``version`` refer to the name/version of the package that
    the test package requires via ``setup_requires``.  The name of the test
    package itself is just 'test_pkg'.
    rj  rd  z==)r"   rg  r`  r^  zname version;z: zg
            [metadata]
            {metadata}
            [options]
            {options}
            
)optionsmetadatar{   rE  r|   r   r   NzI            import setuptools
            setuptools.setup(**%r)
        ry   -z.tar.gz)rU   r   abspathupdaterV   r   popr  
isinstancetupler  r   r   r  r   r   )r   r  rg  r  setup_py_templater  ra  test_setup_attrsrj  r  r  r"   valuesectiontest_setup_cfg_contentsr   foobar_paths                    r   rl  rl    s   & &Zr'34WW__T23	 ,ww||D*-HHHX ! 	/D$((.E~++--"!%%/NNdV2eW-.	/ #'#
 &IIg&YYx(  
 	  #%	bggll8[13	I )Q	'()   
 
bggll8Z0#	H 6A	!$4456 '',,tz7)7%CDKh0O#) )6 6s   G1"G=1G:=Hjavaz0Test cannot run under java when executable is shr   c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)TestScriptHeaderu   /Users/José/bin/pythonz$C:\Program Files\Python36\python.exec                     dt        j                  t        j                  j	                  t
        j                               d}t         j                  j                  d      }||k(  sJ y )N#!r  z#!/usr/local/bin/python	r4   nt_quote_argrU   r   normpathr   r3  r:   
get_headerr%   r   r   s      r   test_get_script_headerz'TestScriptHeader.test_get_script_header  sP    (8(8(HIJ"M++,EF!!!r   c                     dt        j                  t        j                  j	                  t
        j                               d}t         j                  j                  d      }||k(  sJ y )Nr   -x
z#!/usr/bin/python -xr  r  s      r   test_get_script_header_argsz,TestScriptHeader.test_get_script_header_args  sP    (8(8(HIJ%P++,BC!!!r   c                     t         j                  j                  d| j                        }d| j                   d}||k(  sJ y )N#!/usr/bin/pythonr3  r  r	  )r4   r:   r  non_ascii_exer%   r   r   s      r   $test_get_script_header_non_ascii_exez5TestScriptHeader.test_get_script_header_non_ascii_exe  sK    ++D,>,> , 
 **+51!!!r   c                     t         j                  j                  dd| j                  z   dz         }d| j                   d}||k(  sJ y )Nr  "r  #!"z"
)r4   r:   r  exe_with_spacesr  s      r   &test_get_script_header_exe_with_spacesz7TestScriptHeader.test_get_script_header_exe_with_spaces  sU    ++C$2F2F,F,L , 
 --.c2!!!r   N)	r,   r-   r.   r  r  r  r
  r  r  r$   r   r   r  r    s"    
 .M=O"
"
""r   r  c                       e Zd Zd Zd Z ej                  dej                        ej                  j                  e
j                        d               Zd ZddZy)	TestCommandSpecc                 \    t        j                  ddg      }|j                         dk(  sJ y)zx
        Show how a custom CommandSpec could be used to specify a #! executable
        which takes parameters.
        z/usr/bin/envpython3z#!/usr/bin/env python3
N)r4   r5   r8   r%   r_   s     r   test_custom_launch_commandz*TestCommandSpec.test_custom_launch_command  s,    
 nnni89}}"<<<<r   c                 z    t        j                  dg      }t         j                  j                  |      }||u sJ y)zG
        from_param should return an instance of a CommandSpec
        pythonN)r4   r5   
from_param)r%   r_   cmd_news      r   .test_from_param_for_CommandSpec_is_passthroughz>TestCommandSpec.test_from_param_for_CommandSpec_is_passthrough  s4     nnhZ(..++C0g~~r   zsys.executablec                     t         j                  j                  dd        t        j                  j                         }t        |      dk(  sJ |j                         j                  d      sJ y )N__PYVENV_LAUNCHER__r   r  )	rU   r   r  r4   r5   r7   rn  r8   r>   r  s     r   /test_from_environment_with_spaces_in_executablez?TestCommandSpec.test_from_environment_with_spaces_in_executable&  sS     	

,d3nn--/3x1}}}}))%000r   c                     t         j                  j                  d      }t        |      dk(  sJ d|j	                         vsJ y)z
        In order to support `executable = /usr/bin/env my-python`, make sure
        from_param invokes shlex on that input.
        z/usr/bin/env my-pythonr2   r  N)r4   r5   r  rn  r8   r  s     r   "test_from_simple_string_uses_shlexz2TestCommandSpec.test_from_simple_string_uses_shlex.  s=    
 nn''(@A3x1}}#--/)))r   Nc                     t        j                  t              5 }t        j                  j                  t                      ddd       t        j                        dk(  sJ |j                         y# 1 sw Y   3xY w)zc
        from_param should raise its own TypeError when the argument's type is unsupported
        Nz1Argument has an unsupported type <class 'object'>)	rc   rd   	TypeErrorr4   r5   r  objectr   r  )r%   exc_infos     r   %test_from_param_raises_expected_errorz5TestCommandSpec.test_from_param_raises_expected_error7  sc     ]]9% 	0NN%%fh/	0 #VV	>>	V	0 	0s   (A44A=)returnN)r,   r-   r.   r  r   r   r   r  r  r   rU   r   r#  r%  r*  r$   r   r   r  r    sY    = TZZ "2"B"BC	ZZ__RZZ 1 ! D1*r   r  c                       e Zd Zd Zy)TestWindowsScriptWriterc                     t         j                  j                  d      }|j                  d      sJ |j	                  d      sJ |j                  d      }|j                  d      }|j                  d      rJ y )Nr{   r  r  z\")r4   WindowsScriptWriterr  r>   endswithlstriprstrip)r%   hdrs     r   test_headerz#TestWindowsScriptWriter.test_headerC  sm    $$//3~~d###||D!!!jjjj>>%((((r   N)r,   r-   r.   r4  r$   r   r   r-  r-  B  s    )r   r-  c                   @    e Zd ZU eed<   eed<   eed<   eed<   eed<   y)VersionStubr  r  microreleaselevelserialN)r,   r-   r.   r  __annotations__r   r$   r   r   r6  r6  M  s    JJJKr   r6  c           	         t               }|j                  d      }dg|_        d|_        d|_        t        |       |_        d |_        |j                  d      }t        |       |_        d |_        |j                         5 }t        j                         5  t        j                  d       d}t        dd	d
dd      }|j                  dd       |j                  d|       |j                  d|       |j                  |dt        j                                |j!                          d d d        d d d        t#        t$        d      rdnd}	|j&                  j)                         }
t+        j,                  |	dz   |
      rt+        j,                  |	dz   |
      sJ |j.                  d   dk(  sJ |j.                  d   dk(  sJ |j.                  d   dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)NrQ   rO   r   Tr%  ignorez:3.10.1 (main, Dec 21 2021, 09:17:12) [GCC 10.2.1 20210110]   
   r   finalr   zsys.versionzsys.version_infocreate_home_pathpypy_version_infopypyr  z3\.?1z3\.?1\d
py_versionz3.10.1py_version_shortz3.10py_version_nodot310)r   get_command_objrD   optimizer   r   install_userbaseinstall_usersitecontextwarningscatch_warningssimplefilterr6  rq   r   r	  finalize_optionshasattrr   rY   lowerr?   r@   config_vars)r   
tmpdir_cwdr   rC   r_   install_cmdr   rg  r   r"   rY   s              r   &test_use_correct_python_version_stringrU  U  s    >D


~
.CvCHCLCHv;CC&&y1K#&v;K #'K 				 %)@)@)B h'N1b!Wa0-t4mW-($/c-tyy{;  S"566HD//'')K 
yy+.yy
*K888
 ??<(H444??-.&888??-.%7779   s%   G#BG(G#G 	G##G,darwinzDhttps://github.com/pypa/setuptools/pull/4716#issuecomment-2447624418c                 f   |j                  dd       |j                  dt        |dz               |j                  dt        |dz               |j                  dt        |dz               |j                  dd       |j                  d	d       t        t	        j
                               }|j                  d
d
       |dz  }|j                  d
d
       |j                  dt        |             d}|dz  j                  |d       t        |j                  d            g k(  sJ t        |j                  d            g k(  sJ t        dddg       t        |j                  d            g k(  sJ |j                  d      D ch c]  }|j                   }}|dhz
  }|dhk(  sJ yc c}w )zC`setup.py develop` should honor `--user` even under build isolationr   FHOMEz.homeUSERPROFILEAPPDATAzsite.USER_BASENzsite.USER_SITET)parentsr$  z.sys_prefixz
sys.prefixzF__import__('setuptools').setup(name='aproj', version=42, packages=[])
ry   r   r   *developz--userzeasy-install.pthzaproj.egg-link)rq   r   r   r   rr   getusersitepackagesr   rF  r  globr   r"   )r   r   r>  	user_site
sys_prefixsetup_scriptr   	installeds           r   &test_editable_user_and_build_isolationrd    s    /7( vs8g#567}c(W*<&=>y#h&8"9:($/($/T--/0IOOD4O0M)JTD1c*o6 	R  
&&|g&F 
$%+++	s#$*** j9h/0 
$%+++!*!45A5I5/00I)**** 6s   
F.)S__doc__r  r  r<   r   rU   r  r?   rr   r5  r   r|  rW   r  rL  r}   r   typingr   unittestr   rc   jaracor   r   r  r  rQ   r4   r   r   r	   r
   
setuptoolsr   r   setuptools.distsetuptools.sandboxr   setuptools.testsr   setuptools.tests.serverr   r   r{   r   textwrapr   distutils.errorsre   r   r   r   r   r0   r   filterwarningsr   r   usefixturesr   r  r  r  r!  rK  r  r{  r  r   rl  r   r   r>   is_shr3  r  r  r-  r6  rU  r=  rd  r$   r   r   <module>rs     s     	   	  	   
            , , U U  < ( ( * ;    / /  \2 \2~ 01A
 A
 2A
H   ))X
 X
 * *X
v   ,-- - .-
  D" D"NL4 L4^4!D08& #IX LLF#@(@=  " "	":* *Z) )* +8\ LLHQ  9+	9+r   