
    )Vh.                       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mZ ddl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 ddlmZ ddlmZ d ZdAdZdBdZ dBdZ!dCdZ"dDdZ#d Z$d Z%d Z&d Z'd Z(dEdZ)d Z*d Z+dFdZ,d Z-i d d d!d"d#d$d%d&d'd(d)d*d+d,d-d-d.d.d/d0d1d2d3d3d4d5d6d6d7d8d9d:d;d;d<d=d>d?d%d@Z.y)Gz
Handling of Core Metadata for Python packages (including reading and writing).

See: https://packaging.python.org/en/latest/specifications/core-metadata/
    )annotationsN)message_from_file)Message)NamedTemporaryFile)Marker)Requirement)canonicalize_namecanonicalize_version)Version   )_normalization_reqs)	is_static)SetuptoolsDeprecationWarning)rfc822_escapec                H    t        | dd       }|t        d      }|| _        |S )Nmetadata_versionz2.4)getattrr   r   )selfmvs     I/home/dcms/DCMS/lib/python3.12/site-packages/setuptools/_core_metadata.pyget_metadata_versionr      s,    	)4	0B	zU^ "I    c           
         | j                         }t        |      dk(  r|d   j                         S dj                  |d   j                         t	        j
                  dj                  |dd             f      S )zFReverse RFC-822 escaping by removing leading whitespaces from content.r   r   
N)
splitlineslenlstripjointextwrapdedent)contentliness     r   rfc822_unescaper$   $   sc     E
5zQQx  99eAhoo'599M)NOPPr   c                    | |   }|dk(  ry|S )zRead Message header field.UNKNOWNN msgfieldvalues      r   _read_field_from_msgr,   ,   s    JE	Lr   c                8    t        | |      }||S t        |      S )z4Read Message header field and apply rfc822_unescape.)r,   r$   r(   s      r   _read_field_unescaped_from_msgr.   4   s#     e,E}5!!r   c                6    | j                  |d      }|g k(  ry|S )z9Read Message header field and return all results as list.N)get_all)r)   r*   valuess      r   _read_list_from_msgr2   <   s!    [[%F|Mr   c                d    t        | j                               j                         }|dk(  s|sy |S )Nr&   )strget_payloadstrip)r)   r+   s     r   _read_payload_from_msgr7   D   s.    !"((*E	Lr   c                   t        |      }t        |d         | _        t        |d      | _        t        |d      | _        t        |d      | _        t        |d      | _        d| _        t        |d      | _	        d| _
        t        |d      | _        t        |d	      | _        t        |d
      | _        t        |d      | _        t        |d      | _        | j                   (| j                  t        d      k\  rt#        |      | _        t        |d      | _        d|v r t        |d      j%                  d      | _        t)        |d      | _        t)        |d      | _        | j                  t        d      k(  r4t)        |d      | _        t)        |d      | _        t)        |d      | _        nd| _        d| _        d| _        t)        |d      | _        y)z-Reads the metadata values from a file object.zmetadata-versionnameversionsummaryauthorNauthor-email	home-pagedownload-urllicenselicense-expressiondescriptionz2.1keywords,platform
classifierz1.1requiresprovides	obsoleteslicense-file)r   r   r   r,   r9   r:   rB   r<   
maintainerauthor_emailmaintainer_emailurldownload_urlr.   r@   license_expressionlong_descriptionr7   splitrC   r2   	platformsclassifiersrG   rH   rI   license_files)r   filer)   s      r   read_pkg_filerW   K   s   
D
!C#C(:$;<D$S&1DI'Y7DL+C;D&sH5DKDO,S.AD D#C5DH,S.AD1#yADL<SBVWD:3ND$)>)>'%.)P 6s ;+C;DS,S*=CCCH(j9DN*3=D .+C<+C<,S+>,S.ADr   c                    d| v r:d}t        j                  d|       | j                         j                  d      d   } | S )zF
    Quick and dirty validation for Summary pypa/setuptools#1390.
    r   zBnewlines are not allowed in `summary` and will break in the futurezInvalid config.r   )r   emitr6   rR   )valr)   s     r   single_liner[   u   sD     s{ S$))*;SAiik%a(Jr   c                   d}t         j                  j                  |d      }	 t        dd|d      5 }|j                  }| j                  |       ddd       t        j                  t        j                  |      j                        }t        j                  ||t        j                  z  t        j                  z         t        j                  ||       |r6t         j                  j                  |      rt        j                  |       yyy# 1 sw Y   xY w# |r6t         j                  j                  |      rt        j                  |       w w w xY w)z.Write the PKG-INFO file into the release tree. zPKG-INFOwzutf-8F)encodingdirdeleteN)ospathr   r   r9   write_pkg_filestatS_IMODElstatst_modechmodS_IRGRPS_IROTHreplaceexistsremove)r   base_dirtempfinalfpermissionss         r   write_pkg_infort      s    DGGLL:.E  g8ER 	#VW66D"	# ll288D>#9#9:
{T\\1DLL@A


4BGGNN4(IIdO )4	# 	# BGGNN4(IIdO )4s#   D DBD DD :Ec                   | j                         }fd} |dt        |              |d| j                                 |d| j                                | j	                         }|r |dt        |             d}|D ]  \  }}t        | |d      }| |||         | j                  x}	r
 |d|	       n$| j                         x}
r |d	t        |
             | j                  j                         D ]  \  }} |d
| d|         dj                  | j                               }|r	 |d|       | j                         xs g }|D ]  } |d|        | j                  d| j!                                | j                  d| j#                                | j                  d| j%                                | j                  d| j'                                t)        | d      r |d| j*                         | j,                  r |d| j,                         t/        t0        | j2                  xs g       }| j                  d|       t5        |        t6        j                         D ]*  \  }}t        | |d      x}st9        |      r" |d|       , | j;                         }|r8j=                  d|        |j?                  d      sj=                  d       yyy)z0Write the PKG-INFO format data to a file object.c                4    j                  |  d| d       y )Nz: r   )write)keyr+   rV   s     r   write_fieldz#write_pkg_file.<locals>.write_field   s    

cU"UG2&'r   zMetadata-VersionNamer   Summary))z	Home-pagerN   )zDownload-URLrO   )Authorr<   )zAuthor-emailrL   )
MaintainerrK   )zMaintainer-emailrM   NzLicense-ExpressionLicensezProject-URLz, rD   KeywordsPlatform
ClassifierRequiresProvides	Obsoletespython_requireszRequires-PythonzDescription-Content-TypezLicense-FileDynamicr   ) r   r4   get_nameget_versionget_descriptionr[   r   rP   get_licenser   project_urlsitemsr   get_keywordsget_platforms_write_listget_classifiersget_requiresget_providesget_obsoleteshasattrr   long_description_content_typemap_safe_license_filerU   _write_requirements_POSSIBLE_DYNAMIC_FIELDSr   get_long_descriptionrw   endswith)r   rV   r:   ry   r;   optional_fieldsr*   attrattr_valrP   r@   labelrN   rC   rS   rE   safe_license_filesrZ   rQ   s    `                 r   rd   rd      s   '')G( "CL1(	4++-.""$GI{734O ' )t4t,x()
 "4444(*<=$$&	&	&I}W56''--/ 6
sMeWBse#456 xx))+,HJ)""$*I *J)* 	T<)=)=)?@ 	T:t'8'8':;T:t'8'8':;T;(:(:(<= t&'%t';';< )).0R0RS/1C1C1IrJT>+=>d#/557 *t4t,,C,in	5)* 002

R()*+((.JJt / r   c                   t        j                  | j                        D ]  }|j                  d| d        i }| j                  j                         D ]  \  }}|j                  d      \  }}}|j                         }t        j                  |      }	|	rt        |||	|       t        j                  |      D ]2  }t        ||	|j                               }
|j                  d|
 d       4  |S )NzRequires-Dist: r   :)r   parseinstall_requiresrw   extras_requirer   	partitionr6   r   
safe_extra_write_provides_extraparse_strings_include_extra)r   rV   reqprocessed_extrasaugmented_extrareqsunsafe_extra_	conditionextrars              r   r   r      s    {{4001 .

_SE,-. !%!4!4!:!:!< 
0%4%>%>s%C"a#))+)),7!$(8%N&&t, 	0CsE9??+<=AJJ2./	0
0 r   c                    t        |       }|j                  rd|j                   dnd |rd| dnd |rd|nd f}t        dj                  d |D                    |_        |S )N()z	extra ==  and c              3  &   K   | ]	  }|s|  y wNr'   ).0xs     r   	<genexpr>z!_include_extra.<locals>.<genexpr>   s     "9q1"9s   )r   markerr   r   )r   r   r   r   partss        r   r   r      sj    CA88!AHH:Q%!I;a4!&)E9DE
 gll"9e"99:AHHr   c           
         |j                  |      }||k(  r#t        j                  dd|d|d|dd       y |||<   | j                  d| d	       y )
Nz8Ambiguity during "extra" normalization for dependencies.z
            r   z/ normalize to the same value:

                zW

            In future versions, setuptools might halt the build process.
            z!https://peps.python.org/pep-0685/)see_urlzProvides-Extra: r   )getr   rY   rw   )rV   r   safeunsafepreviouss        r   r   r      sw    ##D)H6$))FLfZ ( 
 8	
 "(

%dV2./r   c                R    t        | j                         | j                               S r   )_distribution_fullnamer   r   )r   s    r   get_fullnamer     s    !$--/43C3C3EFFr   c                n    dj                  t        |       j                  dd      t        |d            S )a  
    >>> _distribution_fullname('setup.tools', '1.0-2')
    'setup_tools-1.0.post2'
    >>> _distribution_fullname('setup-tools', '1.2post2')
    'setup_tools-1.2.post2'
    >>> _distribution_fullname('setup-tools', '1.0-r2')
    'setup_tools-1.0.post2'
    >>> _distribution_fullname('setup.tools', '1.0.post')
    'setup_tools-1.0.post0'
    >>> _distribution_fullname('setup.tools', '1.0+ubuntu-1')
    'setup_tools-1.0+ubuntu.1'
    z{}-{}-r   F)strip_trailing_zero)formatr	   rl   r
   )r9   r:   s     r   r   r     s4     >>$''S1W%@ r   c                    t         j                  j                  |       j                  t         j                  d      }d|v rt         j                  j                  |      S |S )N/z../)rb   rc   normpathrl   sepbasename)rV   
normalizeds     r   r   r   )  sJ    !!$'//<J
ww
++r   r<   r=   rL   rF   rT   rB   rQ   zdescription-content-typer   r?   rO   r>   rN   rC   r@   rJ   rU   rA   rP   rK   zmaintainer-emailrM   rI   rE   rS   zproject-urlr   rH   r   rG   r   r   )zprovides-extrarG   zrequires-distzrequires-pythonr;   )r"   r4   returnr4   )r)   r   r*   r4   r   
str | None)r)   r   r*   r4   r   zlist[str] | None)r)   r   r   r   )r   r4   r   r4   r   r4   r   r   )r9   r4   r:   r4   r   r4   )/__doc__
__future__r   rb   re   r    emailr   email.messager   tempfiler   packaging.markersr   packaging.requirementsr   packaging.utilsr	   r
   packaging.versionr   r]   r   r   _staticr   warningsr   distutils.utilr   r   r$   r,   r.   r2   r7   rW   r[   rt   rd   r   r   r   r   r   r   r   r'   r   r   <module>r      s{   # 	   # ! ' $ . C % #  2 (Q"'BT&HV(0$G& h  N  -	 
 %   ?  N    
  y  O   .! " ,# $ *% & ' * + , >- . 
/ 2 ''(=  r   