o
    LK&hp                     @  s  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d Z,dd Z-ej./de'e*e+ ej.0dej.j1dd Z2dZ3dZ4dZ5dZ6dZ7d e3fd!d"Z8d#d$ Z9ej./d%g d&d'd( Z:d)d* Z;d+d, Z<ej./d-ej=e3d.d/d0ej=e4d1ej.j>d2d3d4d5d6fd7d8 Z?ej./d9ej=e6d:dd;d<d=ej.0d>gd?ej=e7dd@dAdBdCd0fdDdE Z@dFdG ZAdHdI ZBG dJdK dKZCG dLdM dMZDG dNdO dOZEG dPdQ dQZFG dRdS dSZGG dTdU dUZHG dVdW dWZIG dXdY dYZJd^d\d]ZKdS )_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)InvalidConfigErrorRemovedConfigError)InformationOnlySetuptoolsDeprecationWarning   )retrieve_fileurls_from_filezsetupcfg_examples.txtc                 K  s   t d| i|S )Nsrc_rootr   )pathattrs r   c/var/www/html/venv/lib/python3.10/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.pymakedist#   s   r   c                 O  s   d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                 S  s$   g | ]}t jd d|t jdpdqS )z
[^a-z0-9]+ )flagsempty)resubI).0pr   r   r   
<listcomp>,   s   $ z)_mock_expand_patterns.<locals>.<listcomp>r   )patterns___r   r   r   _mock_expand_patterns'   s   r*   urlignorec                 C  s  | tdtdd | tdttd t| }t|d}|jdd}t 	|d	}|j
|dd tt||}tt||}t|}	t|}
|	|
ksOJ td
d ||fD rft|jt|jksfJ tdd ||fD rt|j dd |j D }dd |j D }||ksJ tdd ||fD rdd |j D }dd |j D }||ksJ tdd ||fD rdd |jD }dd |jD }||ksJ t|jt|jksJ tdd ||fD r	dd |j D }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                 s      | ]	}t |d dV  qdS )license_filesNgetattrr$   dr   r   r   	<genexpr>D       z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<genexpr>c                 s  r5   )entry_pointsNr7   r9   r   r   r   r;   G   r<   c                 S  *   h | ]\}}|gt d d |D R qS )c                 s      | ]	}| d dV  qdS  r   Nreplacer$   ir   r   r   r;   J   r<   Htest_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>.<genexpr>sortedr$   kvr   r   r   	<setcomp>I       z>test_apply_pyproject_equivalent_to_setupcfg.<locals>.<setcomp>c                 S  r>   )c                 s  r?   r@   rB   rD   r   r   r   r;   N   r<   rF   rG   rI   r   r   r   rL   M   rM   c                 s  r5   )package_dataNr7   r9   r   r   r   r;   S   r<   c                 S      h | ]\}}|gt |R qS r   rG   rI   r   r   r   rL   T        c                 S  rO   r   rG   rI   r   r   r   rL   U   rP   c                 s  r5   )
data_filesNr7   r9   r   r   r   r;   X   r<   c                 S  rO   r   rG   rI   r   r   r   rL   Y   rP   c                 S  rO   r   rG   rI   r   r   r   rL   Z   rP   c                 s  r5   )extras_requireNr7   r9   r   r   r   r;   ^   r<   c                 S  rO   r   rG   rI   r   r   r   rL   _   rP   c                 S  rO   r   rG   rI   r   r   r   rL   `   rP   )setattrr
   r   r   r*   r   r   	read_textr   	translate
write_textr   apply_configurationr   r   core_metadataanysetr6   printr=   itemsrN   rQ   install_requiresrR   )r+   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_cfgr   r   r   +test_apply_pyproject_equivalent_to_setupcfg/   sP   

rp   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                 C  s   | d }|}dd| di}|  D ]
\}}|||}q|j|dd | | jddd | d jd	dd | d
 jtdd |S )Nr1   zreadme = "README.rst"z
readme = ""r2   r3   zhello worldLICENSE.txt--- LICENSE stub ---zspam.py)r\   rC   rV   PEP621_EXAMPLE_SCRIPT)r_   readmepyproject_text	pyprojecttextreplacementsorigsubstr   r   r   _pep621_example_project   s   r|   c                 C  s2   t | }tt| |}t|jjdhksJ dS )z&Make sure the example in PEP 621 worksrr   N)r|   r   rW   r   rZ   metadatar6   r_   rw   distr   r   r   test_pep621_example   s   r   )ru   ctype))z
Readme.txtz
text/plain)z	readme.mdztext/markdown)ztext.rstz
text/x-rstc                 C  s.   t | |}tt| |}|jj|ksJ d S Nr|   r   rW   r   r}   long_description_content_type)r_   ru   r   rw   r   r   r   r   test_readme_content_type   s   
	r   c                 C  sN   t | d}tjtdd tt| | W d    d S 1 s w   Y  d S )Nz
README.texz%Undefined content type for README.texmatch)r|   pytestraises
ValueErrorr   rW   r   )r_   rw   r   r   r   test_undefined_content_type   s   
"r   c                 C  s.   t | d}tt| |}|jjd u sJ d S )NREADMEr   r~   r   r   r   3test_no_explicit_content_type_for_missing_extension   s   
r   )rv   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                 C  s   t |d|d}tt||}|jj| ksJ |d }t|ddd}|j| W d    n1 s3w   Y  |jdd}d|  |v sGJ d S )Nr   rv   PKG-FILEwr2   r3   zMaintainer-email: )	r|   r   rW   r   r}   maintainer_emailopenwrite_pkg_filerT   )r   rv   r_   rw   r   pkg_filefhcontentr   r   r    test_utf8_maintainer_in_metadata   s   r   )rv   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                 C  s   t |d|d}tt||}|jj| ksJ |jj|ksJ |d }t|ddd}	|j|	 W d    n1 s;w   Y  |j	dd}
d|
v sLJ ||
v sRJ ||
vsXJ d S )Nr   r   r   r   r2   r3   zMetadata-Version: 2.4)
r|   r   rW   r   r}   r   r   r   r   rT   )r   r   r   r   rv   r_   rw   r   r   r   r   r   r   r   test_license_in_metadata#  s    (r   c                 C  sz   t ddd }t| d| d}d}tjt|d}tt| | W d    n1 s-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   rW   r   strvalue)r_   rx   rw   msgexcr   r   r   /test_license_classifier_with_license_expression\  s   r   c              	   C  s   d}t | d|}d}d}tjt|d' tjt|d tt| |}W d    n1 s.w   Y  W d    n1 s=w   Y  |j dgksLJ 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   rW   r   r}   get_classifiers)r_   rx   rw   msg1msg2r   r   r   r   2test_license_classifier_without_license_expressionj  s    r   c                   @  sT   e Zd Z		dddZdddZdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dS )TestLicenseFilesr   !license = {file = "LICENSE.txt"}
c                 C  sh   t }d|v sJ d|vsJ d|vsJ tjd||dd}||v s#J | d| d}t|d|d	}|S )
Nzlicense = "mit or apache-2.0"zlicense-filesz[tool.setuptools]z(license = .*)\nr   )countr   r   r   )r   r!   r"   r|   )selfr_   additional_textlicense_tomlrx   rw   r   r   r   base_pyproject  s   zTestLicenseFiles.base_pyprojectc                 C  s   | j ||ddS )Nz>license = "licenseref-Proprietary"
license-files = ["_FILE*"]
)r   r   )r   )r   r_   r   r   r   r   base_pyproject_license_pep639  s
   z.TestLicenseFiles.base_pyproject_license_pep639c              	   C  s   d}|  ||}|d   |d   |d }|jddd d}d	}tjt|d
' tjt|d
 tt||}W d    n1 sEw   Y  W d    n1 sTw   Y  t	|j
jddhkseJ |j
jdksmJ d S )N,[tool.setuptools]
license-files = ["_FILE*"]	_FILE.txt	_FILE.rstrr   zLicenseRef-Proprietary
r2   r3   zQ'tool.setuptools.license-files' is deprecated in favor of 'project.license-files'r   r   )r   touchrV   r   r   r   r   rW   r   rZ   r}   r6   r   )r   r_   setuptools_configrw   r   r   r   r   r   r   r   +test_both_license_and_license_files_defined  s$    z<TestLicenseFiles.test_both_license_and_license_files_definedc                 C  s   |  |}|d   |d   d}tjt|d tt||}W d    n1 s-w   Y  t|j	j
ddhks>J |j	jd u sFJ |j	jdksNJ d S )Nr   r   zNormalizing.*LicenseRefr   zLicenseRef-Proprietary)r   r   r   r   r   r   rW   r   rZ   r}   r6   r   r   )r   r_   rw   r   r   r   r   r   2test_both_license_and_license_files_defined_pep639  s   
zCTestLicenseFiles.test_both_license_and_license_files_defined_pep639c                 C  sX   d}|  ||}d}tjt|d tt|| W d    d S 1 s%w   Y  d S )Nr   zR'project.license-files' is defined already. Remove 'tool.setuptools.license-files'r   )r   r   r   r   r   rW   r   )r   r_   r   rw   r   r   r   r    test_license_files_defined_twice  s   "z1TestLicenseFiles.test_license_files_defined_twicec                 C  s~   d}| j ||dd}d }|D ]}|| j| ddd qtt||}|d  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   r2   r3   rr   )
r   splitrV   r   rW   r   existsrZ   r}   r6   )r   r_   r   rw   r6   fnamer   r   r   r   test_default_patterns  s    z&TestLicenseFiles.test_default_patternsc              	   C  s   |  |}t|dg ksJ d}d}tjt|d0 tjt|d tt	|| W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   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   rW   r   )r   r_   rw   r   r   r   r   r   test_missing_patterns  s   
Pz&TestLicenseFiles.test_missing_patternsc                 C  s   dt v sJ t dd}t||d}d}tjt|d tt||}W d   n1 s.w   Y  |j	j
dks;J t|j	jdhksFJ dS )	z?Make sure the old example with ``license = {text = ...}`` workszlicense-files = ["LICENSE.txt"]z license = {file = "LICENSE.txt"}r   r   r   Nrs   rr   )PEP621_EXAMPLErC   r|   r   r   r   r   rW   r   r}   r   rZ   r6   )r   r_   rx   rw   r   r   r   r   r   $test_deprecated_file_expands_to_text  s   z5TestLicenseFiles.test_deprecated_file_expands_to_textN)r   r   r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r     s    

	r   c                   @  sH   e Zd Zdd Zejdddgdd Zejdg dd	d
 ZdS )TestPyModulesc                 C  s6   d|d}t d}|jt|dd tti |S )Nzr
        [project]
        name = "test"
        version = "42.0"
        [tool.setuptools]
        py-modules = [z
]
        r1   r2   r3   )r   rV   r   r   rW   r   )r   namerc   rw   r   r   r   r     s   zTestPyModules.distmodulezpip-runu   abc-d.λ-xyz-ec                 C  s"   | | || |jv sJ d S r   )chdirr   
py_modulesr   r_   r^   r   r   r   r   test_valid_module_name  s   
z$TestPyModules.test_valid_module_name)zpip runz-pip-runzpip-run-stubsc                 C  sJ   | | tjtdd | |j W d    d S 1 sw   Y  d S )Nz
py-modulesr   )r   r   r   r   r   r   r   r   r   r   test_invalid_module_name  s   
"z&TestPyModules.test_invalid_module_nameN)	r   r   r   r   r   markparametrizer   r   r   r   r   r   r     s    
r   c                   @     e Zd Zdd ZdS )TestExtModulesc                 C  s   | | td}d}|jt|dd ttj tt	i |}W d    n1 s-w   Y  t
|jdks;J |jd jdksEJ t|jd jdd	hksSJ d S )
Nr1   z
        [project]
        name = "test"
        version = "42.0"
        [tool.setuptools]
        ext-modules = [
          {name = "my.ext", sources = ["hello.c", "world.c"]}
        ]
        r2   r3   r   r   zmy.extzhello.czworld.c)r   r   rV   r   r   r   r   _ExperimentalConfigurationrW   r   lenext_modulesr   rZ   sources)r   r_   r^   rw   rc   r   r   r   r   test_pyproject_sets_attribute  s   
	 z,TestExtModules.test_pyproject_sets_attributeN)r   r   r   r   r   r   r   r   r         r   c                   @  r   )TestDeprecatedFieldsc                 C  sb   |d }d}|j t|dd tjtdd tt|| W d    d S 1 s*w   Y  d S )Nr1   z
        [project]
        name = "myproj"
        version = "42"
        [tool.setuptools]
        namespace-packages = ["myproj.pkg"]
        r2   r3   znamespace-packagesr   )rV   r   r   r   r   r   rW   r   )r   r_   rw   configr   r   r   test_namespace_packages-  s   "z,TestDeprecatedFields.test_namespace_packagesN)r   r   r   r   r   r   r   r   r   ,  r   r   c                   @  s  e Zd Zd)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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d Z
dd Zdd Zd d! Zejd"d#d$gejd%d&d' Zd(S )*TestPresetFieldr   c                 C  s:   d|d}d|vr|d7 }|d }|j || dd |S )Nz"[project]
name = 'proj'
dynamic = r   versionzversion = '42'
r1   r2   r3   )rV   )r   r_   dynamicextra_contentr   filer   r   r   rw   <  s   zTestPresetField.pyproject)attrfieldr   )r   r   r   )r   r   zNot SPDXr   zignore:.*license. overwrittenclassifierszPrivate :: Classifierr=   scriptsconsole_scriptsfoobar=foobar:maingui-scriptsgui_scriptszbazquux=bazquux:mainr]   dependenciessixz&ignore:.*install_requires. overwrittenc           	      C  s   |  |g }t|fi ||i}td| tj}tjt|d t	||}W d   n1 s2w   Y  t
d| ||}|rEJ dS )z:Setuptools cannot set a field if not listed in ``dynamic``z&defined outside of `pyproject.toml`:.*r   N	metadata.)rw   r   r!   compileSr   r   r   r   rW   r   )	r   r_   r   r   r   rw   r   r   
dist_valuer   r   r   test_not_listed_in_dynamicD  s   z*TestPresetField.test_not_listed_in_dynamicrR   zoptional-dependenciesc                 C  sR   |  ||g}t|fi ||i}t||}td| ||}||ks'J d S )Nr   )rw   r   r   rW   r   )r   r_   r   r   r   rw   r   r   r   r   r   test_listed_in_dynamicb  s
   z&TestPresetField.test_listed_in_dynamicc                 C  sX   | | | |g }t|dgd}|d jddd t||}|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*)r6   LIC142r2   r3   N)r   rw   r   rV   r   rW   r}   r6   )r   r^   r_   rw   r   r   r   r   &test_license_files_exempt_from_dynamics  s   
z6TestPresetField.test_license_files_exempt_from_dynamicc                 C  sr   d}|d }|j |dd t|dgd}tjdd t||}W d    n1 s+w   Y  d|jvs7J d S )	Nz:[project]
name='pkg'
version='0.1'
dependencies=['click']
r1   r2   r3   wheelr]   z`install_requires` overwrittenr   )rV   r   r   r   r   rW   r]   )r   r_   srcrw   r   r   r   r   %test_warning_overwritten_dependencies  s   z5TestPresetField.test_warning_overwritten_dependenciesc                 C  s   d}|  |dg|}dg}t||d}t||}d|jv s J |d}t|||d  |d jdd	}d
|v s;J d|v sAJ d|v sGJ 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.txtr2   r3   zimportlib-resourcesbarz:python_version < "3.7"N)rw   r   r   rW   rR   get_command_objr	   rT   )r   r_   extrarw   install_reqr   r  reqsr   r   r   2test_optional_dependencies_dont_remove_env_markers  s   	
zBTestPresetField.test_optional_dependencies_dont_remove_env_markers)r   group)r   r   )r   r   errorc                 C  s>   |  ||g}t||dgid}t||}||jv sJ d S )Nr   )r=   )rw   r   r   rW   r=   )r   r_   r   r	  rw   r   r   r   r   .test_scripts_dont_require_dynamic_entry_points  s   z>TestPresetField.test_scripts_dont_require_dynamic_entry_pointsNr   )r   r   r   rw   r   r   r   paramfilterwarningsr   r   r   r   r  r  r   r   r   r   r   ;  sR    








	
r   c                   @  r   )TestMetac                 C  sJ   t |}tdd | D sJ W d   dS 1 sw   Y  dS )z,Meta test to ensure tests can run from sdistc                 s  s    | ]}| tV  qd S r   )endswithEXAMPLES_FILE)r$   r   r   r   r   r;     s    z6TestMeta.test_example_file_in_sdist.<locals>.<genexpr>N)tarfiler   rY   getnames)r   setuptools_sdisttarr   r   r   test_example_file_in_sdist  s   "z#TestMeta.test_example_file_in_sdistN)r   r   r   r  r   r   r   r   r    r   r  c                   @  r   )TestInteropCommandLineParsingc           	      C  sf   | | d}t|d}|jt|dd ddgi}tt||}|  | }d|j	v s1J d S )NzJ
        [project]
        name = "test"
        version = "42.0"
        r1   r2   r3   script_argsz	--versionz42.0)
r   r   rV   r   r   rW   r   parse_command_line
readouterrout)	r   r_   r^   capsysrc   rw   optsr   capturedr   r   r   test_version  s   


z*TestInteropCommandLineParsing.test_versionN)r   r   r   r  r   r   r   r   r    r   r  c                   @  r   )TestStaticConfigc                 C  s   | | d}t|d}|jt|dd tti |}t|js$J t|j	j
s,J t|j	js4J t|j	js<J t|j	jsDJ t|j	jsLJ 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"]
        r1   r2   r3   )r   r   rV   r   r   rW   r   r   r]   r}   keywordsr   	obsoletesprovides	platforms)r   r_   r^   rc   rw   r   r   r   r   test_mark_static_fields  s   

z(TestStaticConfig.test_mark_static_fieldsN)r   r   r   r$  r   r   r   r   r    r   r  returnr   c                 C  s   t  }| j| | }W d    n1 sw   Y  tj|dd d}t }|d7 }|d7 }|d7 }|d g }|	 D ]}|
|sL||v rMqA||d  qAd|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_emailrZ   add
splitlines
startswithappendjoin)r   bufferpkg_file_txtskip_prefixes
skip_linesresultliner   r   r   rX     s"   



rX   )r%  r   )L__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   r   setuptools.warningsr   r   	downloadsr   r   __file__parentHEREr  r   r*   r   r   r  uses_networkrp   r   "PEP621_INTERNATIONAL_EMAIL_EXAMPLErt   PEP639_LICENSE_TEXTr   r|   r   r   r   r   r  xfailr   r   r   r   r   r   r   r   r   r  r  r  rX   r   r   r   r   <module>   s    

24



 |x