
    ip                       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 m!Z! ddl"m#Z#m$Z$ ddl%m&Z&m'Z'  e	e(          j)        Z*dZ+d Z,d Z-ej.        /                    d e'e*e+z                      ej.        0                    d          ej.        j1        d                                     Z2dZ3dZ4dZ5dZ6dZ7de3fdZ8d Z9ej.        /                    d g d!          d"             Z:d# Z;d$ Z<ej.        /                    d% ej=        e3d&d'(           ej=        e4d)ej.        >                    d*d+,          d-.          f          d/             Z?ej.        /                    d0 ej=        e6d1dd2d3d4ej.        0                    d5          g6           ej=        e7dd7d8d9d:(          f          d;             Z@d< ZAd= ZB G d> d?          ZC G d@ dA          ZD G dB dC          ZE G dD dE          ZF G dF dG          ZG G dH dI          ZH G dJ dK          ZI G dL dM          ZJdQdPZKdS )RzMake 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)InvalidConfigErrorRemovedConfigError)InformationOnlySetuptoolsDeprecationWarning   )retrieve_fileurls_from_filezsetupcfg_examples.txtc                (    t          d| i|          S )Nsrc_rootr   )pathattrss     h/srv/django_bis/venv311/lib/python3.11/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.pymakedistr   #   s    T3U3444    c                    d | D             S )z
    Allow comparing the given patterns for 2 dist objects.
    We need to strip special chars to avoid errors when validating.
    c                V    g | ]&}t          j        d d|t           j                  pd'S )z
[^a-z0-9]+ )flagsempty)resubI).0ps     r   
<listcomp>z)_mock_expand_patterns.<locals>.<listcomp>,   s2    QQQ1BF<Qbd333>wQQQr    )patterns___s      r   _mock_expand_patternsr/   '   s    
 RQQQQQr   urlignorec                z   |                     t          dt          d                     |                     t          dt          t                               t          |           }t          |d          }|                    d          }t                      	                    |d	          }|
                    |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                       rbt'          |j                   d |j                                        D             }d |j                                        D             }||k    sJ t!          d ||fD                       rNd |j                                        D             }d |j                                        D             }||k    sJ t!          d ||fD                       r*d |j        D             }d |j        D             }||k    sJ t#          |j                  t#          |j                  k    sJ t!          d ||fD                       rNd |j                                        D             }d |j                                        D             }||k    sJ d S d S )N	read_attrz0.0.1)return_value_expand_patterns)side_effectpyproject.tomlutf-8encodingz	setup.cfgc              3  8   K   | ]}t          |d d          V  dS )license_filesNgetattrr(   ds     r   	<genexpr>z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>D   s.      
L
L71ot,,
L
L
L
L
L
Lr   c              3  8   K   | ]}t          |d d          V  dS )entry_pointsNr=   r?   s     r   rA   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>G   .      
K
K71nd++
K
K
K
K
K
Kr   c                N    h | ]"\  }}|gt          d  |D                       R #S )c              3  B   K   | ]}|                     d d          V  dS  r"   Nreplacer(   is     r   rA   zHtest_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>.<genexpr>J   0      66q		#r**666666r   sortedr(   kvs      r   	<setcomp>z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>I   sN     
 
 
1 766A6666677
 
 
r   c                N    h | ]"\  }}|gt          d  |D                       R #S )c              3  B   K   | ]}|                     d d          V  dS rG   rI   rK   s     r   rA   zHtest_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>.<genexpr>N   rM   r   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>M   sN     
 
 
1 766A6666677
 
 
r   c              3  8   K   | ]}t          |d d          V  dS )package_dataNr=   r?   s     r   rA   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>S   rD   r   c                :    h | ]\  }}|gt          |          R S r+   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>T   s*    TTTTQ!fQiiTTTr   c                :    h | ]\  }}|gt          |          R S r+   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>U   s*    RRRDAqVAYYRRRr   c              3  8   K   | ]}t          |d d          V  dS )
data_filesNr=   r?   s     r   rA   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>X   s.      
I
Ia71lD))
I
I
I
I
I
Ir   c                :    h | ]\  }}|gt          |          R S r+   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>Y   s*    LLLtq!A?q		??LLLr   c                :    h | ]\  }}|gt          |          R S r+   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>Z   s*    JJJda1/vayy//JJJr   c              3  8   K   | ]}t          |d d          V  dS )extras_requireNr=   r?   s     r   rA   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>^   s/      
M
M!71&--
M
M
M
M
M
Mr   c                :    h | ]\  }}|gt          |          R S r+   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>_   s*    WWWda1/vayy//WWWr   c                :    h | ]\  }}|gt          |          R S r+   rN   rP   s      r   rS   z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>`   s*    UUUTQ!fQiiUUUr   )setattrr   r   r   r/   r   r   	read_textr   	translate
write_textr   apply_configurationr   r   core_metadataanysetr<   printrC   itemsrW   r[   install_requiresr_   )r0   monkeypatchtmp_pathsetupcfg_examplepyproject_examplesetupcfg_texttoml_config	dist_tomldist_cfgpkg_info_tomlpkg_info_cfg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_setupcfgr   /   s    Tw-G-G-GHHH($;P*Q*Q*Q   %S))X'788$...@@M "",,]KHHK  w ???1(82D2DFWXXI+HX,>,>@PQQH!),,M **LL((((

L
Ly(6K
L
L
LLL K9*++s83I/J/JJJJJ

K
Ki5J
K
K
KKK 
!h#$$$
 
!.4466
 
 

 
 -3355
 
 
 &    

K
Ki5J
K
K
KKK -TTY5K5Q5Q5S5STTTRRH4I4O4O4Q4QRRR,,,,

I
IIx3H
I
I
III 1LLy7KLLLJJh6IJJJ.0000y)**c(2K.L.LLLLL

M
M	87L
M
M
MMM /WWi6N6T6T6V6VWWWUUX5L5R5R5T5TUUU..../ / /.r   u  [project]
name = "spam"
version = "2020.0.0"
description = "Lovely Spam! Wonderful Spam!"
readme = "README.rst"
requires-python = ">=3.8"
license-files = ["LICENSE.txt"]  # Updated to be PEP 639 compliant
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[project]
name = "spam"
version = "2020.0.0"
authors = [
  {email = "hi@pradyunsg.me"},
  {name = "Tzu-Ping Chung"}
]
license = {text = "MIT"}
a#  [project]
name = "spam"
version = "2020.0.0"
authors = [
  {email = "hi@pradyunsg.me"},
  {name = "Tzu-Ping Chung"}
]
license = "mit or apache-2.0"  # should be normalized in metadata
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Programming Language :: Python",
]
z
README.rstc                X   | dz  }|}dd| di}|                                 D ]\  }}|                    ||          }|                    |d           | |z                      dd           | dz                      d	d           | d
z                      t          d           |S )Nr7   zreadme = "README.rst"z
readme = ""r8   r9   zhello worldLICENSE.txt--- LICENSE stub ---zspam.py)rk   rJ   re   PEP621_EXAMPLE_SCRIPT)rn   readmepyproject_text	pyprojecttextreplacementsorigsubsts           r   _pep621_example_projectr      s    
 ++ID+-C&-C-C-CDL#))++ ) )e||D%((000""=7"CCC))*@7)SSS	%%&;g%NNNr   c                    t          |           }t          j        t          |           |          }t	          |j        j                  dhk    sJ dS )z&Make sure the example in PEP 621 worksr   N)r   r   rf   r   ri   metadatar<   rn   r   dists      r   test_pep621_exampler      sO    '11I,Xh-?-?KKDt}*++>>>>>>r   )r   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 d S Nr   r   rf   r   r   long_description_content_type)rn   r   r   r   r   s        r   test_readme_content_typer      sI     (&99I,Xh-?-?KKD=6%??????r   c                    t          | d          }t          j        t          d          5  t	          j        t          |           |           d d d            d S # 1 swxY w Y   d S )Nz
README.texz%Undefined content type for README.texmatch)r   pytestraises
ValueErrorr   rf   r   )rn   r   s     r   test_undefined_content_typer      s    ',??I	z)P	Q	Q	Q I I)(8*<*<iHHHI I I I I I I I I I I I I I I I I Is   #AA #A c                    t          | d          }t          j        t          |           |          }|j        j        J d S )NREADMEr   r   s      r   3test_no_explicit_content_type_for_missing_extensionr      sB    '(;;I,Xh-?-?KKD=6>>>>>r   )r   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                b   t          |d|          }t          j        t          |          |          }|j        j        | k    sJ |dz  }t          |dd          5 }|j                            |           d d d            n# 1 swxY w Y   |                    d          }d|  |v sJ d S )Nr   r   PKG-FILEwr8   r9   zMaintainer-email: )	r   r   rf   r   r   maintainer_emailopenwrite_pkg_filerc   )r   r   rn   r   r   pkg_filefhcontents           r    test_utf8_maintainer_in_metadatar      s   8 (%  I
 ,Xh-?-?KKD=)-LLLLL*$H	hg	.	.	. )"$$R((() ) ) ) ) ) ) ) ) ) ) ) ) ) )  ' 22GA ?AAWLLLLLLs   BB	B	)r   licenselicense_expressioncontent_strnot_content_strMITzLicense: MITzLicense-Expression: zlicense-textz6ignore:.project.license. as a TOML table is deprecated)r   r   zMIT OR Apache-2.0z%License-Expression: MIT OR Apache-2.0z	License: zlicense-expressionc                   t          |d|          }t          j        t          |          |          }|j        j        | k    sJ |j        j        |k    sJ |dz  }t          |dd          5 }	|j                            |	           d d d            n# 1 swxY w Y   |	                    d          }
d|
v sJ ||
v sJ ||
vsJ d S )Nr   r   r   r   r8   r9   zMetadata-Version: 2.4)
r   r   rf   r   r   r   r   r   r   rc   )r   r   r   r   r   rn   r   r   r   r   r   s              r   test_license_in_metadatar   #  sA   P (%  I
 ,Xh-?-?KKD= G++++=+/AAAAA*$H	hg	.	.	. )"$$R((() ) ) ) ) ) ) ) ) ) ) ) ) ) )  ' 22G"g----'!!!!'))))))s   0BBBc                N   t                               dd          d         }t          | d| d          }d}t          j        t
          |          5 }t          j        t          |           |           d d d            n# 1 swxY w Y   dt          |j
                  v sJ d S )	N
   r   r   z/
    "License :: OSI Approved :: MIT License"
]z?License classifiers have been superseded by license expressionsr   &License :: OSI Approved :: MIT License)PEP639_LICENSE_EXPRESSIONrsplitr   r   r   r   r   rf   r   strvalue)rn   r   r   msgexcs        r   /test_license_classifier_with_license_expressionr   \  s    $++D!44Q7D'DDD I
 LC	)	5	5	5 I)(8*<*<iHHHI I I I I I I I I I I I I I I 4s39~~EEEEEEs   #BB	Bc                   d}t          | d|          }d}d}t          j        t          |          5  t          j        t          |          5  t	          j        t          |           |          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j                                        dgk    sJ d S )Nz    [project]
    name = "spam"
    version = "2020.0.0"
    license = {text = "mit or apache-2.0"}
    classifiers = ["License :: OSI Approved :: MIT License"]
    r   z5License classifiers are deprecated(?:.|
)*MIT License/.project.license. as a TOML table is deprecatedr   r   )	r   r   warnsr   r   rf   r   r   get_classifiers)rn   r   r   msg1msg2r   s         r   2test_license_classifier_without_license_expressionr   j  se   D ((DAAICD<D1>>>P P1>>>P P 0(1C1CYOO	P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P =((**/W.XXXXXXXs5   B#A>2B>B	BB	BBBc                  F    e Zd Z	 	 ddZddZd Zd Zd Zd Zd	 Z	d
 Z
dS )TestLicenseFilesr"   !license = {file = "LICENSE.txt"}
c                    t           }d|v sJ d|vsJ d|vsJ t          j        d||d          }||v sJ | d| d}t          |d|	          }|S )
Nzlicense = "mit or apache-2.0"zlicense-filesz[tool.setuptools]z(license = .*)\nr   )countr   r   r   )r   r%   r&   r   )selfrn   additional_textlicense_tomlr   r   s         r   base_pyprojectzTestLicenseFiles.base_pyproject  s     ) /$6666d****"$....v	
 
 
 t####--/---+HhtTTT	r   c                2    |                      ||d          S )Nz>license = "licenseref-Proprietary"
license-files = ["_FILE*"]
)r   r   )r   )r   rn   r   s      r   base_pyproject_license_pep639z.TestLicenseFiles.base_pyproject_license_pep639  s*    ""+- # 
 
 	
r   c                H   d}|                      ||          }|dz                                   |dz                                   |dz  }|                    dd           d}d	}t          j        t
          |
          5  t          j        t
          |
          5  t          j        t          |          |          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |j
        j                  ddhk    sJ |j
        j        dk    sJ d S )N,[tool.setuptools]
license-files = ["_FILE*"]	_FILE.txt	_FILE.rstr   zLicenseRef-Proprietary
r8   r9   zQ'tool.setuptools.license-files' is deprecated in favor of 'project.license-files'r   r   )r   touchre   r   r   r   r   rf   r   ri   r   r<   r   )r   rn   setuptools_configr   r   r   r   r   s           r   +test_both_license_and_license_files_definedz<TestLicenseFiles.test_both_license_and_license_files_defined  s   K''2CDD		K	&&(((	K	&&((( ]*5HHHb@L5TBBB	T 	TL5TBBB	T 	T !4Xh5G5GSSD		T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T
 4=.//K3MMMMM}$(BBBBBBBs6   C$#CC$C	C$C	C$$C(+C(c                   |                      |          }|dz                                   |dz                                   d}t          j        t          |          5  t          j        t          |          |          }d d d            n# 1 swxY w Y   t          |j	        j
                  ddhk    sJ |j	        j        J |j	        j        dk    sJ d S )Nr   r   zNormalizing.*LicenseRefr   zLicenseRef-Proprietary)r   r   r   r   r   r   rf   r   ri   r   r<   r   r   )r   rn   r   r   r   s        r   2test_both_license_and_license_files_defined_pep639zCTestLicenseFiles.test_both_license_and_license_files_defined_pep639  s0   66x@@		K	&&(((	K	&&((('\/555 	T 	T 4Xh5G5GSSD	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 4=.//K3MMMMM}$,,,}/3KKKKKKKs   !#BBBc                    d}|                      ||          }d}t          j        t          |          5  t	          j        t          |          |           d d d            d S # 1 swxY w Y   d S )Nr   zR'project.license-files' is defined already. Remove 'tool.setuptools.license-files'r   )r   r   r   r   r   rf   r   )r   rn   r   r   r   s        r    test_license_files_defined_twicez1TestLicenseFiles.test_license_files_defined_twice  s    K66xARSS	b]-S999 	M 	M-hx.@.@)LLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   #A&&A*-A*c                b   d}|                      ||d          }d                                }|D ]}||z                      | dd            t          j        t          |          |          }|dz                                  sJ t          |j        j	                  h |dk    sJ d S )	Nz"[tool.setuptools]
zip-safe = falser"   )r   z5LICENCE-a.html COPYING-abc.txt AUTHORS-xyz NOTICE,defr   r8   r9   r   )
r   splitre   r   rf   r   existsri   r   r<   )r   rn   r   r   r<   fnamer   s          r   test_default_patternsz&TestLicenseFiles.test_default_patterns  s    A''2CRT'UU	OUUWW" 	J 	JE))U,,,)IIII0(1C1CYOO=(00222224=.//3R]3RM3RRRRRRRr   c                   |                      |          }t          |                    d                    g k    sJ d}d}t          j        t
          |          5  t          j        t          |          5  t          j        t          |          |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz_FILE*z-Cannot find any files for the given pattern.*z@Normalizing 'licenseref-Proprietary' to 'LicenseRef-Proprietary'r   )
r   listglobr   r   r   r   r   rf   r   )r   rn   r   r   r   s        r   test_missing_patternsz&TestLicenseFiles.test_missing_patterns  sj   66x@@	HMM(++,,2222>QL5TBBB	M 	ML555	M 	M -hx.@.@)LLL		M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms6   C 9#B(C (B,	,C /B,	0C  CCc                   dt           v sJ t                               dd          }t          ||          }d}t          j        t
          |          5  t          j        t          |          |          }ddd           n# 1 swxY w Y   |j	        j
        dk    sJ t          |j	        j                  dhk    sJ dS )	z?Make sure the old example with ``license = {text = ...}`` workszlicense-files = ["LICENSE.txt"]z license = {file = "LICENSE.txt"}r   r   r   Nr   r   )PEP621_EXAMPLErJ   r   r   r   r   r   rf   r   r   r   ri   r<   )r   rn   r   r   r   r   s         r   $test_deprecated_file_expands_to_textz5TestLicenseFiles.test_deprecated_file_expands_to_text  s    1NBBBB%%-.
 
 ,HTJJJ	?\6cBBB 	T 	T 4Xh5G5GSSD	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T }$(>>>>>4=.//M?BBBBBBs   #BBBN)r"   r   r"   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r+   r   r   r   r     s         9	   0
 
 
 
C C C,L L LM M MS S S
M 
M 
MC C C C Cr   r   c                      e Zd Zd Zej                            dddg          d             Zej                            dg d          d             ZdS )	TestPyModulesc                    d|d}t          d          }|                    t          |          d           t          j        t          i           |          S )Nzr
        [project]
        name = "test"
        version = "42.0"
        [tool.setuptools]
        py-modules = [z
]
        r7   r8   r9   )r   re   r   r   rf   r   )r   namerr   r   s       r   r   zTestPyModules.dist  si    
    )**	Xk22WEEE0b1A1A9MMMr   modulezpip-runu   abc-d.λ-xyz-ec                l    |                     |           ||                     |          j        v sJ d S r   )chdirr   
py_modulesr   rn   rm   r   s       r   test_valid_module_namez$TestPyModules.test_valid_module_name  s<    (###6**5555555r   )zpip runz-pip-runzpip-run-stubsc                    |                     |           t          j        t          d          5  |                     |          j         d d d            d S # 1 swxY w Y   d S )Nz
py-modulesr   )r   r   r   r   r   r   r   s       r   test_invalid_module_namez&TestPyModules.test_invalid_module_name  s    (###]:\::: 	) 	)IIf((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AA AN)	r   r   r   r   r   markparametrizer   r   r+   r   r   r   r     s        
N 
N 
N [X	3C'DEE6 6 FE6 [X'O'O'OPP) ) QP) ) )r   r   c                      e Zd Zd ZdS )TestExtModulesc                   |                     |           t          d          }d}|                    t          |          d           t	          j        t          j                  5  t          j        t          i           |          }d d d            n# 1 swxY w Y   t          |j                  dk    sJ |j        d         j        dk    sJ t          |j        d         j                  dd	hk    sJ d S )
Nr7   z
        [project]
        name = "test"
        version = "42.0"
        [tool.setuptools]
        ext-modules = [
          {name = "my.ext", sources = ["hello.c", "world.c"]}
        ]
        r8   r9   r   r   zmy.extzhello.czworld.c)r   r   re   r   r   r   r   _ExperimentalConfigurationrf   r   lenext_modulesr   ri   sources)r   rn   rm   r   rr   r   s         r   test_pyproject_sets_attributez,TestExtModules.test_pyproject_sets_attribute  sH   (###)**	 	Xk22WEEE\-BCC 	R 	R 4\"5E5EyQQD	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R4#$$))))"'833334#A&.//Iy3IIIIIIIs   )#BBBN)r   r   r   r  r+   r   r   r   r     s(        J J J J Jr   r   c                      e Zd Zd ZdS )TestDeprecatedFieldsc                   |dz  }d}|                     t          |          d           t          j        t          d          5  t          j        t          |          |           d d d            d S # 1 swxY w Y   d S )Nr7   z
        [project]
        name = "myproj"
        version = "42"
        [tool.setuptools]
        namespace-packages = ["myproj.pkg"]
        r8   r9   znamespace-packagesr   )re   r   r   r   r   r   rf   r   )r   rn   r   configs       r   test_namespace_packagesz,TestDeprecatedFields.test_namespace_packages-  s    //	 	Xf--@@@]-5IJJJ 	M 	M-hx.@.@)LLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   #A77A;>A;N)r   r   r   r  r+   r   r   r  r  ,  s(        M M M M Mr   r  c                  .   e Zd Zd"dZej                            dd ej        ddej                            d          gi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                            d          gig          d             Z	ej                            d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d Zej                            dddg          ej                            d          d                          Zd!S )#TestPresetFieldr"   c                b    d|d}d|vr|dz  }|dz  }|                     ||z   d           |S )Nz"[project]
name = 'proj'
dynamic = r   versionzversion = '42'
r7   r8   r9   )re   )r   rn   dynamicextra_contentr   files         r   r   zTestPresetField.pyproject<  sS    FFFFG##))G**-/'BBBr   )attrfieldr   )r   r   r   )r   r   zNot SPDXr   zignore:.*license. overwrittenclassifierszPrivate :: ClassifierrC   scriptsconsole_scriptsfoobar=foobar:maingui-scriptsgui_scriptszbazquux=bazquux:mainrl   dependenciessixz&ignore:.*install_requires. overwrittenc                d   |                      |g           }t          |fi ||i}t          j        d| t          j                  }t          j        t          |          5  t          j	        ||          }ddd           n# 1 swxY w Y    t          d| |          |          }|rJ dS )z:Setuptools cannot set a field if not listed in ``dynamic``z&defined outside of `pyproject.toml`:.*r   N	metadata.)r   r   r%   compileSr   r   r   r   rf   r   )	r   rn   r  r  r   r   r   r   
dist_values	            r   test_not_listed_in_dynamicz*TestPresetField.test_not_listed_in_dynamicD  s   * NN8R00	22T5M22jI%II24PP\/555 	F 	F 4T9EED	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F @%&8$&8&8$??EE
~s   #BB	B	r_   zoptional-dependenciesc                    |                      ||g          }t          |fi ||i}t          j        ||          } t	          d| |          |          }||k    sJ d S )Nr  )r   r   r   rf   r   )r   rn   r  r  r   r   r   r!  s           r   test_listed_in_dynamicz&TestPresetField.test_listed_in_dynamicb  s~     NN8eW55	22T5M220yAA?%&8$&8&8$??EE
U""""""r   c                   |                     |           |                     |g           }t          |dg          }|dz                      dd           t	          j        ||          }|j        j        dgk    sJ dS )ap  
        license-file is currently not considered in the context of dynamic.
        As per 2025-02-19, https://packaging.python.org/en/latest/specifications/pyproject-toml/#license-files
        allows setuptools to fill-in `license-files` the way it sees fit:

        > If the license-files key is not defined, tools can decide how to handle license files.
        > For example they can choose not to include any files or use their own
        > logic to discover the appropriate files in the distribution.

        Using license_files from setup.py to fill-in the value is in accordance
        with this rule.
        zLIC*)r<   LIC142r8   r9   N)r   r   r   re   r   rf   r   r<   )r   rm   rn   r   r   s        r   &test_license_files_exempt_from_dynamicz6TestPresetField.test_license_files_exempt_from_dynamics  s     	(###NN8R00	999	F	&&tg&>>>0yAA}*vh666666r   c                    d}|dz  }|                     |d           t          |dg          }t          j        d          5  t	          j        ||          }d d d            n# 1 swxY w Y   d|j        vsJ d S )	Nz:[project]
name='pkg'
version='0.1'
dependencies=['click']
r7   r8   r9   wheelrl   z`install_requires` overwrittenr   )re   r   r   r   r   rf   rl   )r   rn   srcr   r   s        r   %test_warning_overwritten_dependenciesz5TestPresetField.test_warning_overwritten_dependencies  s    N//	S7333G9===\ @AAA 	F 	F 4T9EED	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fd3333333s   A((A,/A,c                J   d}|                      |dg|          }dg}t          ||          }t          j        ||          }d|j        v sJ |                    d          }t          |||dz             |dz                      d	          }d
|v sJ d|v sJ d|v sJ dS )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.txtr8   r9   zimportlib-resourcesbarz:python_version < "3.7"N)r   r   r   rf   r_   get_command_objr
   rc   )r   rn   extrar   install_reqr   r0  reqss           r   2test_optional_dependencies_dont_remove_env_markerszBTestPresetField.test_optional_dependencies_dont_remove_env_markers  s     GNN8n-=uEE	OP;???0yAA+++++''
338Xx./HIII>)44g4FF$,,,,}}}}(D000000r   )r  group)r  r  )r  r  errorc                    |                      ||g          }t          ||dgi          }t          j        ||          }||j        v sJ d S )Nr  )rC   )r   r   r   rf   rC   )r   rn   r  r7  r   r   s         r   .test_scripts_dont_require_dynamic_entry_pointsz>TestPresetField.test_scripts_dont_require_dynamic_entry_points  s`     NN8eW55	8L7M/NOOO0yAA)))))))r   Nr   )r   r   r   r   r   r   r   paramfilterwarningsr"  r$  r(  r-  r6  r:  r+   r   r   r  r  ;  s           ["4FL3{112QRRS  M,C+DEY):=Q<R(ST]]=S<T,UVFL$nug> K../WXX 	
 &	 	' &	 ["446;%9M,C+DE	
	 	# #	 	#7 7 7(4 4 41 1 1, [	')GH  [((* * )(	 
* * *r   r  c                      e Zd Zd ZdS )TestMetac                    t          j        |          5 }t          d |                                D                       sJ 	 ddd           dS # 1 swxY w Y   dS )z,Meta test to ensure tests can run from sdistc              3  J   K   | ]}|                     t                    V  d S r   )endswithEXAMPLES_FILE)r(   r   s     r   rA   z6TestMeta.test_example_file_in_sdist.<locals>.<genexpr>  s.      OOt}}]33OOOOOOr   N)tarfiler   rh   getnames)r   setuptools_sdisttars      r   test_example_file_in_sdistz#TestMeta.test_example_file_in_sdist  s    \*++ 	PsOOOOOOOOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   .AAAN)r   r   r   rG  r+   r   r   r>  r>    s(        P P P P Pr   r>  c                      e Zd Zd ZdS )TestInteropCommandLineParsingc                P   |                     |           d}t          |d          }|                    t          |          d           ddgi}t	          j        t          |          |          }|                                 |                                }d|j	        v sJ d S )NzJ
        [project]
        name = "test"
        version = "42.0"
        r7   r8   r9   script_argsz	--versionz42.0)
r   r   re   r   r   rf   r   parse_command_line
readouterrout)	r   rn   rm   capsysrr   r   optsr   captureds	            r   test_versionz*TestInteropCommandLineParsing.test_version  s     	(###
 #344	Xk22WEEE}-0d1C1CYOO!!!$$&&%%%%%%r   N)r   r   r   rR  r+   r   r   rI  rI    s#        & & & & &r   rI  c                      e Zd Zd ZdS )TestStaticConfigc                   |                     |           d}t          |d          }|                    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 d S )Na)  
        [project]
        name = "test"
        version = "42.0"
        dependencies = ["hello"]
        keywords = ["world"]
        classifiers = ["private :: hello world"]
        [tool.setuptools]
        obsoletes = ["abcd"]
        provides = ["abcd"]
        platforms = ["abcd"]
        r7   r8   r9   )r   r   re   r   r   rf   r   r	   rl   r   keywordsr  	obsoletesprovides	platforms)r   rn   rm   rr   r   r   s         r   test_mark_static_fieldsz(TestStaticConfig.test_mark_static_fields  s   (### #344	Xk22WEEE0b1A1A9MM.//////00000233333011111/0000001111111r   N)r   r   r   rZ  r+   r   r   rT  rT    s#        2 2 2 2 2r   rT  returnr   c                   t          j                    5 }| j                            |           |                                }d d d            n# 1 swxY w Y   t          j        |d           d}t                      }|dz  }|dz  }|dz  }|                    d           g }|	                                D ]4}|
                    |          s||v r|                    |dz              5d                    |          S )	NT)validater+   )zAuthor:zAuthor-email:zMaintainer:zMaintainer-email:)zProject-URL: Homepage,z
Home-page:)zDescription-Content-Type:r"   r   )ioStringIOr   r   getvaluer   
from_emailri   add
splitlines
startswithappendjoin)r   bufferpkg_file_txtskip_prefixes
skip_linesresultlines          r   rg   rg     sJ   	 )&$$V,,,(() ) ) ) ) ) ) ) ) ) ) ) ) ) )
 t4444%'MJ UUM==M33MNN2F'')) # #??=)) 	TZ-?-?dTk""""776??s   /AAA)r[  r   )L__doc__
__future__r   r^  r%   rC  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   r   setuptools.warningsr   r   	downloadsr   r   __file__parentHERErB  r   r/   r   r   r<  uses_networkr   r   "PEP621_INTERNATIONAL_EMAIL_EXAMPLEr   PEP639_LICENSE_TEXTr   r   r   r   r   r   r;  xfailr   r   r   r   r   r   r   r  r  r>  rI  rT  rg   r+   r   r   <module>r     s    # " " " " " 				 				                     ' ' ' ' ' ' ' ' ' ' ' '     ( ( ( ( ( ( : : : : : : = = = = = = = = = = T T T T T T T T ( ( ( ( ( ( D D D D D D D D M M M M M M M M 4 4 4 4 4 4 4 4tH~~'5 5 5R R R tm/C D DEEH%%// //  &% FE//d2h& " 	  $ !   $? ? ?    @ @ @I I I? ? ? 93 *	
 	
 	
 	.O+##H $  
 %		
 		
 		
 .M M/ .M&  	"**L 	
 	
 	
 	%3#	
 	
 	
 @* *A @*2F F FY Y Y,yC yC yC yC yC yC yC yCx) ) ) ) ) ) ) )6J J J J J J J J*M M M M M M M Mu* u* u* u* u* u* u* u*pP P P P P P P P& & & & & & & &&2 2 2 2 2 2 2 2:     r   