
    ?wg>O                       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 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$      jJ                  Z&dZ'd Z(ejR                  jU                  d e#e&e'z              ejR                  jW                  d      ejR                  jX                  d                      Z-dZ.dZ/dZ0de.fdZ1d Z2ejR                  jU                  dg d      d        Z3d Z4d  Z5ejR                  jU                  d! ejl                  e.d"d#$       ejl                  e/d%ejR                  jo                  d&d'(      d)*      f      d+        Z8 G d, d-      Z9 G d. d/      Z: G d0 d1      Z; G d2 d3      Z< G d4 d5      Z= G d6 d7      Z> G d8 d9      Z? G d: d;      Z@d=d<ZAy)>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)	is_static)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     g/var/www/horilla/myenv/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>8   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r3   r6   r8   s     r   r-   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>B   r:   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>G   r1   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>L   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>R   s     
M!71&-
Mr.   )setattrr   r   r   r   	read_textr   	translate
write_textr   apply_configurationr   r   core_metadataanysetr'   printr0   itemssortedr>   r@   install_requiresrB   )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_setupcfgrc   &   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)rL   r7   rF   PEP621_EXAMPLE_SCRIPT)rP   readmepyproject_text	pyprojecttextreplacementsorigsubsts           r   _pep621_example_projectrp      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 worksrg   rf   N)rp   r   rG   r   metadatalicenserJ   r'   rP   rk   dists      r   test_pep621_examplerv      s[    '1I,,Xh-?KD==  $::::t}}**+>>>r   )ri   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rp   r   rG   r   rr   long_description_content_type)rP   ri   rw   rk   ru   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)rp   pytestraises
ValueErrorr   rG   r   )rP   rk   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READMErz   rt   s      r   3test_no_explicit_content_type_for_missing_extensionr      s;    '(;I,,Xh-?KD==66>>>r   )rj   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   )rj   zPKG-FILEwr#   r$   zMaintainer-email: )	rp   r   rG   r   rr   maintainer_emailopenwrite_pkg_filerD   )r   rj   rP   rk   ru   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]
)rp   rD   rF   )selfrP   additional_textrk   rl   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.rstrf   zLicenseRef-Proprietary
r#   r$   )
r   touchrF   r   rG   r   rJ   rr   r'   rs   )r   rP   setuptools_configrk   rs   ru   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$   rf   )
r   splitrF   r   rG   r   existsrJ   rr   r'   )r   rP   r   rk   r'   fnameru   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   rF   r   r   rG   r   )r   namerT   rk   s       r   ru   zTestPyModules.dist0  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 ry   )chdirru   
py_modulesr   rP   rO   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   ru   r   r   s       r   test_invalid_module_namez&TestPyModules.test_invalid_module_nameA  sE    (#]]:\: 	)IIf((	) 	) 	)s   AAN)	r   r   r   ru   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   rF   r   r   warnsr   _ExperimentalConfigurationrG   r   lenext_modulesr   rJ   sources)r   rP   rO   rk   rT   ru   s         r   test_pyproject_sets_attributez,TestExtModules.test_pyproject_sets_attributeI  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   H  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~   )rF   r   r   r   r   r   rG   r   )r   rP   rk   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$   )rF   )r   rP   dynamicextra_contentr   files         r   rk   zTestPresetField.pyprojectm  sH    82FG#))G**-/'Br   )attrfieldvalueclassifierszPrivate :: Classifierr0   scriptsconsole_scriptsfoobar=foobar:maingui-scriptsgui_scriptszbazquux=bazquux:mainrN   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.)rk   r   recompileSr   r   r   r   rG   r   )	r   rP   r   r   r   rk   ru   msg
dist_values	            r   test_not_listed_in_dynamicz*TestPresetField.test_not_listed_in_dynamicu  s      NN8R0	2T5M2jjA%I244P\\/5 	F 44T9ED	F @%	$&8$?E
~:		F 	Fs   #BB%rB   zoptional-dependenciesc                    | j                  ||g      }t        |fi ||i}t        j                  ||      } t	        d| |      |      }||k(  sJ y )Nr   )rk   r   r   rG   r   )r   rP   r   r   r   rk   ru   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rN   z`install_requires` overwrittenr~   )rF   r   r   r   r   rG   rN   )r   rP   srcrk   ru   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)rk   r   r   rG   rB   get_command_objr
   rD   )r   rP   extrark   install_reqru   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   )r0   )rk   r   r   rG   r0   )r   rP   r   r   rk   ru   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)r5   )r   r   r   rk   r   r   r   paramfilterwarningsr   r   r   r   r   r   r   r   r   r   l  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ry   )endswithEXAMPLES_FILE)r+   r   s     r   r-   z6TestMeta.test_example_file_in_sdist.<locals>.<genexpr>  s     Ot}}]3Os   !N)tarfiler   rI   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   rF   r   r   rG   r   parse_command_line
readouterrout)	r   rP   rO   capsysrT   rk   optsru   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                      e Zd Zd Zy)TestStaticConfigc                0   |j                  |       d}t        |d      }|j                  t        |      d       t	        j
                  t        i       |      }t        |j                        sJ t        |j                  j                        sJ t        |j                  j                        sJ t        |j                  j                        sJ t        |j                  j                        sJ t        |j                  j                        sJ y )Na)  
        [project]
        name = "test"
        version = "42.0"
        dependencies = ["hello"]
        keywords = ["world"]
        classifiers = ["private :: hello world"]
        [tool.setuptools]
        obsoletes = ["abcd"]
        provides = ["abcd"]
        platforms = ["abcd"]
        r"   r#   r$   )r   r   rF   r   r   rG   r   r	   rN   rr   keywordsr   	obsoletesprovides	platforms)r   rP   rO   rT   rk   ru   s         r   test_mark_static_fieldsz(TestStaticConfig.test_mark_static_fields  s    (# #34	Xk2WE00b1A9M../////0002233300111//00000111r   N)r   r   r   r  r   r   r   r  r    s    2r   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:r5   r   )ioStringIOrr   r   getvaluer   
from_emailrJ   add
splitlines
startswithappendjoin)ru   bufferpkg_file_txtskip_prefixes
skip_linesresultlines          r   rH   rH     s    	 )&$$V,()
 t4%'MJ UUM==M33MNN2F'') #??=)TZ-?dTk"#
 776?3) )s   ,CC')returnstr)B__doc__
__future__r   r  r   r   inspectr   pathlibr   unittest.mockr   r   ini2toml.apir   packaging.metadatar   
setuptoolssetuptools._staticr	   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_networkrc   PEP621_EXAMPLE"PEP621_INTERNATIONAL_EMAIL_EXAMPLErh   rp   rv   r|   r   r   r   xfailr   r   r   r   r   r   r   r  r  rH   r   r   r   <module>r<     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& &&2 2:r   