
    ʨsg`K                       d Z ddlm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mZ ddlZdd	lmZ dd
lmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlm Z m!Z!  e	e"      jF                  Z$dZ%d Z&ejN                  jQ                  d e!e$e%z              ejN                  jS                  d      ejN                  jT                  d                      Z+dZ,dZ-dZ.de,fdZ/d Z0ejN                  jQ                  dg d      d        Z1d Z2d Z3ejN                  jQ                  d  ejh                  e,d!d"#       ejh                  e-d$ejN                  jk                  d%d&'      d()      f      d*        Z6 G d+ d,      Z7 G d- d.      Z8 G d/ d0      Z9 G d1 d2      Z: G d3 d4      Z; G d5 d6      Z< G d7 d8      Z=d:d9Z>y);zMake sure that applying the configuration from pyproject.toml is equivalent to
applying a similar configuration from setup.cfg

To run these tests offline, please have a look on ``./downloads/preload.py``
    )annotationsN)cleandoc)Path)Mock)LiteTranslator)Metadata)write_requirements)expandpyprojecttomlsetupcfg)_MissingDynamic_some_attrgetterDistribution)RemovedConfigError   )retrieve_fileurls_from_filezsetupcfg_examples.txtc                     t        d| i|      S )Nsrc_rootr   )pathattrss     c/var/www/html/venv/lib/python3.12/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.pymakedistr   !   s    T3U344    urlignorec           	     \   |j                  t        dt        d             t        |       }t	        |d      }|j                  d      }t               j                  |d      }|j                  |d       t        j                  t        |      |      }t        j                  t        |      |      }t        |      }	t        |      }
|	|
k(  sJ t        d ||fD              r-t        |j                         t        |j                         k(  sJ t        d	 ||fD              rt#        |j$                         |j$                  j'                         D ch c]  \  }}|gt)        d
 |D               }}}|j$                  j'                         D ch c]  \  }}|gt)        d |D               }}}||k(  sJ t        d ||fD              ry|j*                  j'                         D ch c]  \  }}|gt)        |       }}}|j*                  j'                         D ch c]  \  }}|gt)        |       }}}||k(  sJ t        d ||fD              r]|j,                  D ch c]  \  }}|gt)        |       }}}|j,                  D ch c]  \  }}|gt)        |       }}}||k(  sJ t        |j.                        t        |j.                        k(  sJ t        d ||fD              rz|j0                  j'                         D ch c]  \  }}|gt)        |       }}}|j0                  j'                         D ch c]  \  }}|gt)        |       }}}||k(  sJ y y c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w c c}}w )N	read_attrz0.0.1)return_valuepyproject.tomlutf-8encodingz	setup.cfgc              3  6   K   | ]  }t        |d d        yw)license_filesNgetattr.0ds     r   	<genexpr>z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>7   s     
L71ot,
L   c              3  6   K   | ]  }t        |d d        yw)entry_pointsNr'   r)   s     r   r,   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>:        
K71nd+
Kr-   c              3  @   K   | ]  }|j                  d d        yw  Nreplacer*   is     r   r,   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>=        6q		#r*6   c              3  @   K   | ]  }|j                  d d        ywr2   r5   r7   s     r   r,   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>A   r9   r:   c              3  6   K   | ]  }t        |d d        yw)package_dataNr'   r)   s     r   r,   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>F   r0   r-   c              3  6   K   | ]  }t        |d d        yw)
data_filesNr'   r)   s     r   r,   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>K   s     
Ia71lD)
Ir-   c              3  6   K   | ]  }t        |d d        yw)extras_requireNr'   r)   s     r   r,   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>Q   s     
M!71&-
Mr-   )setattrr
   r   r   r   	read_textr   	translate
write_textr   apply_configurationr   r   core_metadataanysetr&   printr/   itemssortedr=   r?   install_requiresrA   )r   monkeypatchtmp_pathsetupcfg_examplepyproject_examplesetupcfg_texttoml_config	dist_tomldist_cfgpkg_info_tomlpkg_info_cfgkvep_tomlep_cfgpkg_data_tomlpkg_data_cfgdata_files_tomldata_files_cfgextra_req_tomlextra_req_cfgs                        r   +test_apply_pyproject_equivalent_to_setupcfgrb   %   ss    Tw-GH$S)X'78$...@M ",,]KHK  w ?11(82DFWXI++HX,>@PQH!),M *LL(((

Ly(6K
LL9**+s83I3I/JJJJ

Ki5J
KKh##$ "..446
1 76A667
 
 !--335
1 76A667
 
 &   

Ki5J
KK5>5K5K5Q5Q5STTQ!fQiTT4<4I4I4O4O4QRDAqVAYRR,,,

IIx3H
II7@7K7KLtq!A?q	?LL6>6I6IJda1/vay/JJ.000y))*c(2K2K.LLLL

M	87L
MM6?6N6N6T6T6VWda1/vay/WW5=5L5L5R5R5TUTQ!fQiUU... N+

 UR MJ
 XUs0    M> N5N
.N4NN N"N(u  [project]
name = "spam"
version = "2020.0.0"
description = "Lovely Spam! Wonderful Spam!"
readme = "README.rst"
requires-python = ">=3.8"
license = {file = "LICENSE.txt"}
keywords = ["egg", "bacon", "sausage", "tomatoes", "Lobster Thermidor"]
authors = [
  {email = "hi@pradyunsg.me"},
  {name = "Tzu-Ping Chung"}
]
maintainers = [
  {name = "Brett Cannon", email = "brett@python.org"},
  {name = "John X. Ãørçeč", email = "john@utf8.org"},
  {name = "Γαμα קּ 東", email = "gama@utf8.org"},
]
classifiers = [
  "Development Status :: 4 - Beta",
  "Programming Language :: Python"
]

dependencies = [
  "httpx",
  "gidgethub[httpx]>4.0.0",
  "django>2.1; os_name != 'nt'",
  "django>2.0; os_name == 'nt'"
]

[project.optional-dependencies]
test = [
  "pytest < 5.0.0",
  "pytest-cov[all]"
]

[project.urls]
homepage = "http://example.com"
documentation = "http://readthedocs.org"
repository = "http://github.com"
changelog = "http://github.com/me/spam/blob/master/CHANGELOG.md"

[project.scripts]
spam-cli = "spam:main_cli"

[project.gui-scripts]
spam-gui = "spam:main_gui"

[project.entry-points."spam.magical"]
tomatoes = "spam:main_tomatoes"
u   [project]
name = "spam"
version = "2020.0.0"
authors = [
  {email = "hi@pradyunsg.me"},
  {name = "Tzu-Ping Chung"}
]
maintainers = [
  {name = "Степан Бандера", email = "криївка@оун-упа.укр"},
]
zE
def main_cli(): pass
def main_gui(): pass
def main_tomatoes(): pass
z
README.rstc                *   | dz  }|}dd| di}|j                         D ]  \  }}|j                  ||      } |j                  |d       | |z  j                  dd       | dz  j                  d	d       | d
z  j                  t        d       |S )Nr!   zreadme = "README.rst"z
readme = ""r"   r#   zhello worldLICENSE.txt--- LICENSE stub ---zspam.py)rK   r6   rE   PEP621_EXAMPLE_SCRIPT)rO   readmepyproject_text	pyprojecttextreplacementsorigsubsts           r   _pep621_example_projectro      s    
 ++ID+z&-CDL#))+ )e||D%()0""=7"C))*@7)S	%%&;g%Nr   c                    t        |       }t        j                  t        |       |      }|j                  j
                  dk(  sJ t        |j                  j                        dhk(  sJ y)z&Make sure the example in PEP 621 worksrf   re   N)ro   r   rF   r   metadatalicenserI   r&   rO   rj   dists      r   test_pep621_exampleru      s[    '1I,,Xh-?KD==  $::::t}}**+>>>r   )rh   ctype))z
Readme.txtz
text/plain)z	readme.mdztext/markdown)ztext.rstz
text/x-rstc                    t        | |      }t        j                  t        |       |      }|j                  j
                  |k(  sJ y Nro   r   rF   r   rq   long_description_content_type)rO   rh   rv   rj   rt   s        r   test_readme_content_typer{      s?     (&9I,,Xh-?KD==66%???r   c                    t        | d      }t        j                  t        d      5  t	        j
                  t        |       |       d d d        y # 1 sw Y   y xY w)Nz
README.texz%Undefined content type for README.texmatch)ro   pytestraises
ValueErrorr   rF   r   )rO   rj   s     r   test_undefined_content_typer      sK    ',?I	z)P	Q I))(8*<iHI I Is    AAc                    t        | d      }t        j                  t        |       |      }|j                  j
                  J y )NREADMEry   rs   s      r   3test_no_explicit_content_type_for_missing_extensionr      s;    '(;I,,Xh-?KD==66>>>r   )ri   expected_maintainers_meta_valueug   Brett Cannon <brett@python.org>, "John X. Ãørçeč" <john@utf8.org>, Γαμα קּ 東 <gama@utf8.org>znon-international-emails)iduA   Степан Бандера <криївка@оун-упа.укр>zlCPython's `email.headerregistry.Address` only supports RFC 5322, as of Nov 10, 2022 and latest Python 3.11.0T)reasonstrictzinternational-email)marksr   c                P   t        |d|      }t        j                  t        |      |      }|j                  j
                  | k(  sJ |dz  }t        |dd      5 }|j                  j                  |       d d d        |j                  d      }d|  |v sJ y # 1 sw Y   %xY w)Nr   )ri   zPKG-FILEwr"   r#   zMaintainer-email: )	ro   r   rF   r   rq   maintainer_emailopenwrite_pkg_filerC   )r   ri   rO   rj   rt   pkg_filefhcontents           r    test_utf8_maintainer_in_metadatar      s    8 (%I
 ,,Xh-?KD==))-LLLL*$H	hg	. )"$$R()  ' 2G ?@AWLLL) )s   BB%c                      e Zd Zd Zd Zd Zy)TestLicenseFilesc                    t        |d      }|j                  d      }d|v sJ d|vsJ | d| d}|j                  |d       |S )Nr   r"   r#   z license = {file = "LICENSE.txt"}z[tool.setuptools]
)ro   rC   rE   )selfrO   additional_textrj   rk   s        r   base_pyprojectzTestLicenseFiles.base_pyproject  sk    +Hh?	""G"4 2T999"$...r/*"-TG4r   c                h   d}| j                  ||      }|dz  j                          |dz  j                          |dz  }|j                  dd       t        j                  t        |      |      }t        |j                  j                        ddhk(  sJ |j                  j                  dk(  sJ y )Nz,[tool.setuptools]
license-files = ["_FILE*"]z	_FILE.txtz	_FILE.rstre   zLicenseRef-Proprietary
r"   r#   )
r   touchrE   r   rF   r   rI   rq   r&   rr   )r   rO   setuptools_configrj   rr   rt   s         r   +test_both_license_and_license_files_definedz<TestLicenseFiles.test_both_license_and_license_files_defined  s    K''2CD		K	&&(	K	&&( ]*5H00(1CYO4==../K3MMMM}}$$(BBBBr   c                D   d}| j                  ||      }dj                         }|D ]  }||z  j                  | dd        t        j                  t        |      |      }|dz  j                         sJ t        |j                  j                        h |dk(  sJ y )Nz"[tool.setuptools]
zip-safe = falsez5LICENCE-a.html COPYING-abc.txt AUTHORS-xyz NOTICE,defr   r"   r#   re   )
r   splitrE   r   rF   r   existsrI   rq   r&   )r   rO   r   rj   r&   fnamert   s          r   test_default_patternsz&TestLicenseFiles.test_default_patterns  s    A''2CD	OUUW" 	JE))UG2,)I	J 00(1CYO=(002224==../3R]3RM3RRRRr   N)__name__
__module____qualname__r   r   r    r   r   r   r      s    
C Sr   r   c                      e Zd Zd Zej
                  j                  dddg      d        Zej
                  j                  dg d      d        Zy)	TestPyModulesc                    d|d}t        d      }|j                  t        |      d       t        j                  t        i       |      S )Nzr
        [project]
        name = "test"
        version = "42.0"
        [tool.setuptools]
        py-modules = [z
]
        r!   r"   r#   )r   rE   r   r   rF   r   )r   namerS   rj   s       r   rt   zTestPyModules.dist/  sW    
 h 	 )*	Xk2WE00b1A9MMr   modulezpip-runu   abc-d.λ-xyz-ec                d    |j                  |       || j                  |      j                  v sJ y rx   )chdirrt   
py_modulesr   rO   rN   r   s       r   test_valid_module_namez$TestPyModules.test_valid_module_name;  s-    (#6*55555r   )zpip runz-pip-runzpip-run-stubsc                    |j                  |       t        j                  t        d      5  | j	                  |      j
                   d d d        y # 1 sw Y   y xY w)Nz
py-modulesr}   )r   r   r   r   rt   r   r   s       r   test_invalid_module_namez&TestPyModules.test_invalid_module_name@  sE    (#]]:\: 	)IIf((	) 	) 	)s   AAN)	r   r   r   rt   r   markparametrizer   r   r   r   r   r   r   ,  s[    
N [[X	3C'DE6 F6 [[X'OP) Q)r   r   c                      e Zd Zd Zy)TestExtModulesc                   |j                  |       t        d      }d}|j                  t        |      d       t	        j
                  t        j                        5  t        j                  t        i       |      }d d d        t        j                        dk(  sJ |j                  d   j                  dk(  sJ t        |j                  d   j                        dd	hk(  sJ y # 1 sw Y   kxY w)
Nr!   z
        [project]
        name = "test"
        version = "42.0"
        [tool.setuptools]
        ext-modules = [
          {name = "my.ext", sources = ["hello.c", "world.c"]}
        ]
        r"   r#   r   r   zmy.extzhello.czworld.c)r   r   rE   r   r   warnsr   _ExperimentalConfigurationrF   r   lenext_modulesr   rI   sources)r   rO   rN   rj   rS   rt   s         r   test_pyproject_sets_attributez,TestExtModules.test_pyproject_sets_attributeH  s    (#)*	 	Xk2WE\\-BBC 	R 44\"5EyQD	R4##$)))"''83334##A&../Iy3IIII		R 	Rs    C((C1N)r   r   r   r   r   r   r   r   r   G  s    Jr   r   c                      e Zd Zd Zy)TestDeprecatedFieldsc                    |dz  }d}|j                  t        |      d       t        j                  t        d      5  t        j                  t        |      |       d d d        y # 1 sw Y   y xY w)Nr!   z
        [project]
        name = "myproj"
        version = "42"
        [tool.setuptools]
        namespace-packages = ["myproj.pkg"]
        r"   r#   znamespace-packagesr}   )rE   r   r   r   r   r   rF   r   )r   rO   rj   configs       r   test_namespace_packagesz,TestDeprecatedFields.test_namespace_packages]  sl    //	 	Xf-@]]-5IJ 	M--hx.@)L	M 	M 	Ms    A((A1N)r   r   r   r   r   r   r   r   r   \  s    Mr   r   c                     e Zd ZddZej
                  j                  ddddgfddddgifdd	d
dgif ej                  dddgfdej
                  j                  d      gig      d        Z	ej
                  j                  dddg fddi fdddgfdddgfg      d        Z
d Zd Zej
                  j                  dddg      ej
                  j                  d      d               Zy)TestPresetFieldc                Z    d|d}d|vr|dz  }|dz  }|j                  ||z   d       |S )Nz"[project]
name = 'proj'
dynamic = r   versionzversion = '42'
r!   r"   r#   )rE   )r   rO   dynamicextra_contentr   files         r   rj   zTestPresetField.pyprojectl  sH    82FG#))G**-/'Br   )attrfieldvalueclassifierszPrivate :: Classifierr/   scriptsconsole_scriptsfoobar=foobar:maingui-scriptsgui_scriptszbazquux=bazquux:mainrM   dependenciessixr   z&ignore:.*install_requires. overwrittenc                P   | j                  |g       }t        |fi ||i}t        j                  d| t        j                        }t        j                  t        |      5  t        j                  ||      }ddd        t        d| |      |      }|rJ y# 1 sw Y   #xY w)z:Setuptools cannot set a field if not listed in ``dynamic``z&defined outside of `pyproject.toml`:.*r}   N	metadata.)rj   r   recompileSr   r   r   r   rF   r   )	r   rO   r   r   r   rj   rt   msg
dist_values	            r   test_not_listed_in_dynamicz*TestPresetField.test_not_listed_in_dynamict  s      NN8R0	2T5M2jjA%I244P\\/5 	F 44T9ED	F @%	$&8$?E
~:		F 	Fs   #BB%rA   zoptional-dependenciesc                    | j                  ||g      }t        |fi ||i}t        j                  ||      } t	        d| |      |      }||k(  sJ y )Nr   )rj   r   r   rF   r   )r   rO   r   r   r   rj   rt   r   s           r   test_listed_in_dynamicz&TestPresetField.test_listed_in_dynamic  sd     NN8eW5	2T5M200yA?%	$&8$?E
U"""r   c                    d}|dz  }|j                  |d       t        |dg      }t        j                  d      5  t	        j
                  ||      }d d d        d|j                  vsJ y # 1 sw Y   xY w)	Nz:[project]
name='pkg'
version='0.1'
dependencies=['click']
r!   r"   r#   wheelrM   z`install_requires` overwrittenr}   )rE   r   r   r   r   rF   rM   )r   rO   srcrj   rt   s        r   %test_warning_overwritten_dependenciesz5TestPresetField.test_warning_overwritten_dependencies  s    N//	S73G9=\\ @A 	F 44T9ED	Fd33333	F 	Fs   A//A8c                ,   d}| j                  |dg|      }dg}t        ||      }t        j                  ||      }d|j                  v sJ |j                  d      }t        |||dz         |dz  j                  d	      }d
|v sJ d|v sJ d|v sJ y)a#  
        Internally setuptools converts dependencies with markers to "extras".
        If ``install_requires`` is given by ``setup.py``, we have to ensure that
        applying ``optional-dependencies`` does not overwrite the mandatory
        dependencies with markers (see #3204).
        z1
[project.optional-dependencies]
foo = ['bar>1']
r   z6importlib-resources (>=3.0.0) ; python_version < "3.7"r   fooegg_infozrequires.txtr"   r#   zimportlib-resourcesbarz:python_version < "3.7"N)rj   r   r   rF   rA   get_command_objr	   rC   )r   rO   extrarj   install_reqrt   r   reqss           r   2test_optional_dependencies_dont_remove_env_markerszBTestPresetField.test_optional_dependencies_dont_remove_env_markers  s     GNN8n-=uE	OP;?00yA+++++''
38Xx./HI>)44g4F$,,,}}(D000r   )r   group)r   r   )r   r   errorc                    | j                  ||g      }t        ||dgi      }t        j                  ||      }||j                  v sJ y )Nr   )r/   )rj   r   r   rF   r/   )r   rO   r   r   rj   rt   s         r   .test_scripts_dont_require_dynamic_entry_pointsz>TestPresetField.test_scripts_dont_require_dynamic_entry_points  sQ     NN8eW5	8L7M/NO00yA)))))r   N)r4   )r   r   r   rj   r   r   r   paramfilterwarningsr   r   r   r   r   r   r   r   r   r   k  sL    [["M,C+DEY):=Q<R(ST]]=S<T,UVFLL$nug> KK../WX	
	
		 [["46;%9M,C+DE		
##41, [[	')GH [[(* )	
*r   r   c                      e Zd Zd Zy)TestMetac                    t        j                  |      5 }t        d |j                         D              sJ 	 ddd       y# 1 sw Y   yxY w)z,Meta test to ensure tests can run from sdistc              3  F   K   | ]  }|j                  t                y wrx   )endswithEXAMPLES_FILE)r*   r   s     r   r,   z6TestMeta.test_example_file_in_sdist.<locals>.<genexpr>  s     Ot}}]3Os   !N)tarfiler   rH   getnames)r   setuptools_sdisttars      r   test_example_file_in_sdistz#TestMeta.test_example_file_in_sdist  sD    \\*+ 	PsOOOOO	P 	P 	Ps   #AAN)r   r   r   r   r   r   r   r   r     s    Pr   r   c                      e Zd Zd Zy)TestInteropCommandLineParsingc                "   |j                  |       d}t        |d      }|j                  t        |      d       ddgi}t	        j
                  t        |      |      }|j                          |j                         }d|j                  v sJ y )NzJ
        [project]
        name = "test"
        version = "42.0"
        r!   r"   r#   script_argsz	--versionz42.0)
r   r   rE   r   r   rF   r   parse_command_line
readouterrout)	r   rO   rN   capsysrS   rj   optsrt   captureds	            r   test_versionz*TestInteropCommandLineParsing.test_version  s     	(#
 #34	Xk2WE}-00d1CYO!$$&%%%r   N)r   r   r   r	  r   r   r   r   r     s    &r   r   c                   t        j                         5 }| j                  j                  |       |j	                         }d d d        t        j                  d       d}t               }|dz  }|dz  }|dz  }|j                  d       g }|j                         D ],  }|j                  |      s||v r|j                  |dz          . dj                  |      S # 1 sw Y   xY w)	NT)validater   )zAuthor:zAuthor-email:zMaintainer:zMaintainer-email:)zProject-URL: Homepage,z
Home-page:)zDescription-Content-Type:r4   r   )ioStringIOrq   r   getvaluer   
from_emailrI   add
splitlines
startswithappendjoin)rt   bufferpkg_file_txtskip_prefixes
skip_linesresultlines          r   rG   rG     s    	 )&$$V,()
 t4%'MJ UUM==M33MNN2F'') #??=)TZ-?dTk"#
 776?3) )s   ,CC')returnstr)?__doc__
__future__r   r  r   r   inspectr   pathlibr   unittest.mockr   r   ini2toml.apir   packaging.metadatar   
setuptoolssetuptools.command.egg_infor	   setuptools.configr
   r   r   &setuptools.config._apply_pyprojecttomlr   r   setuptools.distr   setuptools.errorsr   	downloadsr   r   __file__parentHEREr   r   r   r   r   uses_networkrb   PEP621_EXAMPLE"PEP621_INTERNATIONAL_EMAIL_EXAMPLErg   ro   ru   r{   r   r   r   xfailr   r   r   r   r   r   r   r   rG   r   r   r   <module>r2     s   # 	 	      ' '  : = = T ( 0 4H~'5 tm/C DEH%,/  & F,/^2h& "  !$? @@I? 93 *	
 	.O++##H $ 
 %		
.M/.M&,S ,S^) )6J J*M M[* [*|P P& &,r   