
    )VhQ                    F   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
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlZd dlZd dl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% d dl&m'Z'm(Z( d dl)m*Z* ddl+m,Z,m-Z-  e.ddddddddg      Z/ej`                  jc                  d ejd                  ddd        ejd                  d!dd"        ejd                  d#dd$        ejd                  d%d&d'        ejd                  d(d)d*       f      d+        Z3d, Z4ej`                  jc                  d- e4             d.        Z5d/ Z6ej`                  jc                  d- e6             d0        Z7 G d1 d2      Z8 G d3 d4      Z9d5 Z:d<d6Z;d=d7Z<d>d8Z=d?d9Z>d@dAd:Z?dBd;Z@y)C    )annotationsN)message_from_string)	Generator)EmailMessageMessage)Parser)EmailPolicy)cleandoc)Path)Mock)Metadata)Requirement)_reqssic)rfc822_escaperfc822_unescape)egg_infowrite_requirements)expandsetupcfg)Distribution   )retrieve_fileurls_from_filepackagez0.0.1zFoo Barzfoo@bar.netzLong
descriptionzShort descriptiononetwo)nameversionauthorauthor_emaillong_descriptiondescriptionkeywordscontentresultzJust a single linesingle_line)idz%Multiline
Text
without
extra indents
	multilinez,Multiline
    With

additional
  indentationmultiline_with_indentationz  Leading whitespacezLeading whitespaceremove_leading_whitespacez-  Leading whitespace
In
    Multiline commentz+Leading whitespace
In
    Multiline comment#remove_leading_whitespace_multilinec                >    |xs | t        t        |             k(  sJ y N)r   r   r%   s     S/home/dcms/DCMS/lib/python3.12/site-packages/setuptools/tests/test_core_metadata.pytest_rfc822_unescaper1   '   s!    > g/-2H"IIII    c                 t   t         } t        j                  t        |       }d |       fd |d      fd |g d      fd |d	
      fd |d      ft	        j
                  d |t        d            t        j                  j                  d            d |d      fd |d      fd |d      ft	        j
                  d |ddg       t        j                  j                  d!            d"t        dd#d$%      fd&t        dd#d'(      fd)t        dd#*      fd+t        dt        d,      *      fgS )-NzMetadata version 1.0z,Metadata Version 1.0: Short long descriptionzShort long description)r"   z!Metadata version 1.1: Classifiers)z#Programming Language :: Python :: 3z%Programming Language :: Python :: 3.7z&License :: OSI Approved :: MIT License)classifiersz"Metadata version 1.1: Download URLzhttps://example.com)download_urlz%Metadata Version 1.2: Requires-Pythonz>=3.7)python_requiresz!Metadata Version 1.2: Project-Urlzhttps://example.bar)Foo)project_urlsz"Issue #1578: project_urls not read)reason)marksz3Metadata Version 2.1: Long Description Content Typeztext/x-rst; charset=UTF-8)long_description_content_typeLicenseMIT)licensezLicense multilinez+This is a long license 
over multiple linesz$Metadata Version 2.1: Provides Extrafoobar)provides_extraszprovides_extras not readzMissing authorz1.0.0zsnorri@sturluson.name)r   r   r!   zMissing author e-mailzSnorri Sturluson)r   r   r    zMissing author and e-mail)r   r   zBypass normalized versionz1.0.0a)	EXAMPLE_BASE_INFO	functoolspartialdictpytestparammarkxfailr   )baseparamss     r0   __read_test_casesrL   I   s   DtT*F 
 *:!9	
 0		
 12	
 4 '	
 	/)> ?@++##; $ 	
 B.I	
 	
  F	
 	2E5>2++##+E#F	
 4	
 $)	
 (	
 (H	
gZ Zr2   )r   attrsc                   t        |      }|j                  }|j                  }t        j                         }|j                  |       |j                  d       |j                         }t        |      sJ |j                  d        |       }|j                  |       d|j                  fd|j                  fd|j                  fd|j                  fd|j                  fd|j                  fd|j                   fd	|j"                  fd
|j$                  fd|j&                  fd|j(                  fd|j*                  fd|j,                  fd|j.                  fdd fdd fg}|D ]  \  }	}
 |
|       |
|      k(  rJ  y )Nr   r   r   r    r!   metadata_versionprovidesr#   r"   r5   r$   	platforms	obsoletesrequiresr4   r8   c                    t        | di       S )Nr8   getattrss    r0   <lambda>z$test_read_metadata.<locals>.<lambda>   s    71nb#A r2   rA   c                    t        | di       S )NrA   rU   rW   s    r0   rY   z$test_read_metadata.<locals>.<lambda>   s    ga1BB&G r2   )r   metadata	__class__ioStringIOwrite_pkg_fileseekread_valid_metadataread_pkg_fileget_nameget_versionget_contactget_contact_emailget_metadata_versionget_providesget_descriptionget_long_descriptionget_download_urlget_keywordsget_platformsget_obsoletesget_requiresget_classifiers)r   rM   distmetadata_out
dist_classPKG_INFOpkg_infometadata_intested_attrsattrgetters              r0   test_read_metadatar{      s   D==L''J {{}H)MM!}}H8$$$MM!,Kh' 
$$%	J**+	:))*	556	Z<<=	Z,,-	
223	Z<<=	445	Z,,-	j../	j../	Z,,-	
223	AB	GH!L& % ;fk"f\&::::;r2   c                     dddd} d }d| j                         fd || dd	i      fd
 || d	dd      fd || ddi      fd || ddd      fd || d	dd      fd || d	dddd      fd || ddd      fd || ddi      fd || ddi      fg
S )Nr   z1.0xxx)r   r   r#   c                H    | j                         } | j                  |       | S r/   )copyupdate)d1d2s     r0   merge_dictsz,__maintainer_test_cases.<locals>.merge_dicts   s    WWY
		"	r2   zNo author, no maintainerz!Author (no e-mail), no maintainerr    zAuthor NamezAuthor (e-mail), no maintainerzauthor@name.com)r    r!   z!No author, maintainer (no e-mail)
maintainerzMaintainer NamezNo author, maintainer (e-mail)zmaintainer@name.com)r   maintainer_emailz)Author (no e-mail), Maintainer (no-email))r    r   z$Author (e-mail), Maintainer (e-mail)r    r!   r   r   z*No author (e-mail), no maintainer (e-mail))r!   r   zAuthor unicodeu	   鉄沢寛zMaintainer unicodeu   Jan Łukasiewicz)r   )rM   r   s     r0   __maintainer_test_casesr      s*   5GE 
$UZZ\2/-89	

 --ARS	
 0.?@A	

 -"3(=		
 8-?PQ	
 3+$5"3(=		
 9$5(=		
 
;ux.EFG	{5<AS2TUVo8 8r2   c                   ddddd}t        |      }|j                  d      }t        |      }|j                  j	                  |       t        t        |j                  d            dd	
      5 }|j                         }d d d        t              sJ |j                         }	t        t        d |	d d             }
t        |
      }t        |
      t        |      k(  sJ |j                         D ]D  \  }}|j                  |d       }||
D ]  }|j!                  |dz         sJ  8| d| }||v rDJ  y # 1 sw Y   xY w)NAuthorzAuthor-email
MaintainerzMaintainer-emailr   rv   PKG-INFOrutf-8encoding:z: )r   mkdirstrr[   write_pkg_infoopenjoinra   rb   
splitlineslistfiltersetlenitemsget
startswith)r   rM   tmpdirtested_keysrr   fnfn_sfrv   raw_pkg_lines	pkg_linespkg_lines_setfkeydkeyvallines                   r0   test_maintainer_authorr     sX    &".	K D	j	!Br7DMM  &	c"''*%&g	> !668 8$$$ '')MVD-"456I	NM y>S////!'') )
diid#;! 7??4#:6667 V2cU#D=((() s   0D::Ec                      e Zd Zd Zd Z ee      j                  Zedz  Z	 e
j                  dg ee	            d        Ze
j                  j                  d        Zy)#TestParityWithMetadataFromPyPaWheelc           	     H    t        di t        dddg dd}t        |      S )Nz>=3.8a,  
            packaging==23.2
            more-itertools==8.8.0; extra == "other"
            jaraco.text==3.7.0
            importlib-resources==5.10.2; python_version<"3.8"
            importlib-metadata==6.0.0 ; python_version<"3.8"
            colorama>=0.4.4; sys_platform == "win32"
            a  
                    pytest >= 6
                    pytest-checkdocs >= 2.4
                    tomli ; \
                            # Using stdlib when possible
                            python_version < "3.11"
                    ini2toml[lite]>=0.9
                    )testingother)r6   install_requiresextras_require )rE   rB   r   )selfrM   s     r0   base_examplez0TestParityWithMetadataFromPyPaWheel.base_exampleA  s?     

 $ 

2 E""r2   c                v    | j                         }t        |      }t        |      sJ g d}|D ]  }||v rJ  y )N)zMetadata-Version:zRequires-Python: >=3.8zProvides-Extra: otherzProvides-Extra: testingzDRequires-Dist: tomli; python_version < "3.11" and extra == "testing"z6Requires-Dist: more-itertools==8.8.0; extra == "other"z6Requires-Dist: ini2toml[lite]>=0.9; extra == "testing")r   _get_pkginforb   )r   tmp_pathrr   rv   expectedr   s         r0   test_requires_distz6TestParityWithMetadataFromPyPaWheel.test_requires_dist]  sN      "%x(((
  	$D8###	$r2   zconfig/setupcfg_examples.txtN)rK   c              #    K   |j                  |       |j                  t        dt        d             |j                  t        dt        d             |j                  t        dt        d             |j
                  | j                          yt        |j
                        }t        j                  t	        i       |       yw)z4Example of distribution with arbitrary configuration	read_attrz0.42)return_value
read_fileshello world_finalize_license_filesN)
chdirsetattrr   r   r   rG   r   r   r   apply_configuration)r   requestmonkeypatchr   configs        r0   rr   z(TestParityWithMetadataFromPyPaWheel.distr  s      	(#FK61JKFL$M2RS3Tt5L	
 == ##%% #7==1F..|B/?HHs   CCc                   t        j                  d      }t        |dd      }|t        j                  d       t        |      }|dz  }|j                  d       |dz  j                  |d	
       t        t        |      ||dz          |||dz        }t        |      }t        |      }	t        |	      }
||
k(  sJ t        |       y)zHEnsure output from setuptools is equivalent to the one from `pypa/wheel`zwheel.metadatapkginfo_to_metadataNzjwheel.metadata.pkginfo_to_metadata is undefined, (this is likely to be caused by API changes in pypa/wheelzpkg.egg-infoT)parentsr   r   r   zrequires.txt)	importlibimport_modulerV   rF   rI   r   r   
write_textr   r   _normalize_metadatar   _assert_roundtrip_message)r   r   rr   wheel_metadatar   rv   egg_info_dirmetadata_msgmetadata_strpkg_info_msgpkg_info_strs              r0   test_equivalent_outputz:TestParityWithMetadataFromPyPaWheel.test_equivalent_output  s     #001AB%n6KTR&LLL  %.04(	
	"..x'.J8D><9VW +<
9RS*<8*84*<8 |+++ 	"(+r2   )__name__
__module____qualname__r   r   r   __file__parentHEREEXAMPLES_FILErF   fixturer   rr   rH   uses_networkr   r   r2   r0   r   r   @  ss    #8$$ >  D99MV^^DA>-#@ABI CI [[, ,r2   r   c                     e Zd Z ed       ed      dZej                  j                  dej                               d        Z	ej                  j                  dej                               ej                  j                  dddid	d
iddddgfidddgfiddddgfdg      d               Z
ej                  j                  dddg      d        Zy)
TestPEP643a  
            [metadata]
            name = package
            version = 0.0.1
            author = Foo Bar
            author_email = foo@bar.net
            long_description = Long
                               description
            description = Short description
            keywords = one, two
            platforms = abcd
            [options]
            install_requires = requests
            a  
            [project]
            name = "package"
            version = "0.0.1"
            authors = [
              {name = "Foo Bar", email = "foo@bar.net"}
            ]
            description = "Short description"
            readme = {text = "Long\ndescription", content-type = "text/plain"}
            keywords = ["one", "two"]
            dependencies = ["requests"]
            license = "AGPL-3.0-or-later"
            [tool.setuptools]
            provides = ["abcd"]
            obsoletes = ["abcd"]
            )z	setup.cfgpyproject.tomlfilec                    t        |      j                  | j                  |   d       t               }|j	                  d      J |j	                  d      J y )Nr   r   Dynamicdynamic)r   r   STATIC_CONFIG_get_metadataget_all)r   r   
tmpdir_cwdr[   s       r0   !test_static_config_has_no_dynamicz,TestPEP643.test_static_config_has_no_dynamic  sY    T
d006I ?	*222	*222r2   fieldszrequires-python)r6   z>=3.12zauthor-email)r!   zsnoopy@peanuts.comr$   helloworldplatformrQ   abcd)r#   r   )r"   zbla bla bla blar   zhello-world)summaryr#   zrequires-distc                H   t        |      j                  | j                  |   d       t               }|j	                         D ])  \  }}t        |||       t        |j                  ||       + t        |      }t        |j                  d            t        |      k(  sJ y )Nr   r   r   )
r   r   r   	_makedistvaluesr   r[   r   r   r   )r   r   r   r   rr   ry   valuer[   s           r0   &test_modified_fields_marked_as_dynamicz1TestPEP643.test_modified_fields_marked_as_dynamic  s    & 	T
d006I{ "==? 	0KD% D$&DMM4/	0 !&8##I./3v;>>>r2   
extra_tomlz'# Let setuptools autofill license-filesz2license-files = ['LICENSE*', 'AUTHORS*', 'NOTICE']c                   | j                   d   j                  dd|       dddd}||d   v sJ d|vsJ t        j                  j	                  |       t        d	      }t        |      }t        |j                  d
            ddhk(  sJ |j                  d      dk(  sJ t        |j                  d            h dk(  sJ y )Nr   zlicense = "AGPL-3.0-or-later"zdynamic = ['license']
z--- mock license ---z--- mock notice ---z
--- me ---)r   
LICENSE.mdNOTICEAUTHORS.txtzAGPL-3.0-or-later)license_expressionr   zlicense-filezlicense-expressionzLicense-ExpressionzLicense-File>   r   r   r   )
r   replacejaracopathbuildr   r   r   r   r   )r   r   r   filesrr   r[   s         r0   test_license_files_dynamicz%TestPEP643.test_license_files_dynamic  s     #001ABJJ/)*6 1+'
 U#34444.j@@@% ,?@ &8##I./ 4
 
 	
 
 ||015HHHH8##N34 9
 
 	
 
r2   N)r   r   r   r
   r   rF   rH   parametrizekeysr   r   r  r   r2   r0   r   r     s   
  #
##MJ [[V]%7%7%9:3 ;3 [[V]%7%7%9:[[  =>CD*w&89:+x01 :F"4}o!F	
 ?! ;"?" [[5@	


r2   r   c                 <    t        |       }|j                          |S r/   )r   parse_config_files)rM   rr   s     r0   r   r     s    DKr2   c                J   t        j                  |       5 }t        t              j	                  |      }ddd       t        ddd      }t        j                         5 }t        j                  |d      }t        ||      j                         |j                          |j                         }ddd       t        | d      }d	j                  |j                               }d	j                  j                               }||k(  sJ y# 1 sw Y   xY w# 1 sw Y   gxY w)
zEmulate the way wheel.bdist_wheel parses and regenerates the message,
    then ensures the metadata generated by setuptools is compatible.
    NTFr   )utf8mangle_from_max_line_lengthr   r   )policy   
)r]   r^   r   r   parser	   BytesIOTextIOWrapperr   flattenflushgetvaluebytesr   r   )r[   buffermsgserialization_policyoutregeneratedraw_metadatas          r0   r   r   !  s     
X	 1&\"((01 '
 
 (v8#23;;C@		oo'	( 7+L::l5578L**[3356K,&&&%1 1( (s   DADDD"c                t   | j                  dg       D ci c]  }|j                  dd      | }}t        j                  | j                  dg             D cg c]  }t	        ||       }}| d= | d= t        |      D ]  }|| d<   	 t        |      D ]  }|| d<   	 | d= | j                         S c c}w c c}w )z1Allow equivalent metadata to be compared directlyzProvides-Extra_-zRequires-DistzMetadata-Version)r   r   r   r  _normalize_reqsorted	as_string)r  xextrasreqreqsextras         r0   r   r   :  s     /2kk:JB.OPaiiS!1$PFP ;;s{{?B?@ 	sF#D  	O d| #"O# & %& 	==?# Qs   B0B5c                    t        |       j                  | j                  | j                  j                  dd            }|j                         D ]  \  }}|j                  ||      } |S )z<Allow equivalent requirement objects to be compared directlyr  r  )r   r   r   r   )r!  r   as_strnormorigs        r0   r  r  Z  s[    Xchh(8(8c(BCFlln ,
dd+,Mr2   c                    t        j                         5 }| j                  j                  |       |j	                         cd d d        S # 1 sw Y   y xY wr/   )r]   r^   r[   r_   r  )rr   fps     r0   r   r   b  s=    	 "$$R({{}  s   +A

Ac                B    t        t        | xs
 t                           S r/   )r   r   r   )rr   s    r0   r   r   h  s    |D,?IK@AAr2   c                8    t        j                  | d      }|d uS )NT)validate)r   
from_email)textr[   s     r0   rb   rb   l  s    ""4$7H4r2   )r[   r   returnNone)r  r   r/  r   )r!  r   r   zdict[str, str]r/  r   )rr   r   r/   )rr   zDistribution | None)r.  r   r/  bool)A
__future__r   rC   r   r]   emailr   email.generatorr   email.messager   r   email.parserr   email.policyr	   inspectr
   pathlibr   unittest.mockr   jaraco.pathr   rF   packaging.metadatar   packaging.requirementsr   
setuptoolsr   r   setuptools._core_metadatar   r   setuptools.command.egg_infor   r   setuptools.configr   r   setuptools.distr   config.downloadsr   r   rE   rB   rH   r  rG   r1   rL   r{   r   r   r   r   r   r   r   r  r   r   rb   r   r2   r0   <module>rD     s   "   	 % % /  $      ' . ! D D . ( ;	(#U^   	

 	7	

 	>+	

 	" *	

 	=;4	
+<J=<J_D *,=,?@%; A%;PAH *,C,EF$) G$)N`, `,Fu
 u
p'2@B r2   