
    ʨsgC&                       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 ZddZddZddZd dZ d!dZ!d Z"d Z#d Z$d Z%d Z&d"dZ'd Z(d Z)d#dZ*y)$z
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)SetuptoolsDeprecationWarning)rfc822_escapec                H    t        | dd       }|t        d      }|| _        |S )Nmetadata_version2.1)getattrr   r   )selfmvs     L/var/www/html/venv/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.   3   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   C   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      | _        | 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authorNzauthor-emailz	home-pagezdownload-urllicensedescriptionr   keywords,platform
classifierz1.1requiresprovides	obsoleteszlicense-file)r   r   r   r,   r9   r:   r>   r<   
maintainerauthor_emailmaintainer_emailurldownload_urlr.   r=   long_descriptionr7   splitr?   r2   	platformsclassifiersrC   rD   rE   license_files)r   filer)   s      r   read_pkg_filerQ   J   s   
D
!C#C(:$;<D$S&1DI'Y7DL+C;D&sH5DKDO,S.AD D#C5DH,S.AD1#yADL: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   rL   )valr)   s     r   single_linerU   s   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_inforn      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                         }	|	r |dt        |	             | j                  j                         D ]  }
 |d	d
|
z          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*                         | j                  d| j,                  xs g        t/        |        | j1                         }|r8j3                  d|z         |j5                  d      sj3                  d       yyy)z0Write the PKG-INFO format data to a file object.c                4    j                  | d|d       y )Nz: r   )write)keyr+   rP   s     r   write_fieldz#write_pkg_file.<locals>.write_field   s    

e,-r   zMetadata-VersionNamer   Summary))z	Home-pagerI   )zDownload-URLrJ   )Authorr<   )zAuthor-emailrG   )
MaintainerrF   )zMaintainer-emailrH   NLicensezProject-URLz%s, %sr@   KeywordsPlatform
ClassifierRequiresProvides	Obsoletespython_requireszRequires-PythonzDescription-Content-TypezLicense-Filez
%sr   )r   r4   get_nameget_versionget_descriptionrU   r   get_licenser   project_urlsitemsr   get_keywordsget_platforms_write_listget_classifiersget_requiresget_providesget_obsoleteshasattrr   long_description_content_typerO   _write_requirementsget_long_descriptionrq   endswith)r   rP   r:   rs   r;   optional_fieldsr*   attrattr_valr=   project_urlr?   rM   rA   rK   s    `             r   r^   r^      s^   '')G. "CL1(	4++-.""$GI{734O ' )t4t,x()
  GI}W56((..0 ;M8k#9:; xx))+,HJ)""$*I *J)* 	T<)=)=)?@ 	T:t'8'8':;T:t'8'8':;T;(:(:(<= t&'%t';';< )).0R0RST>4+=+=+CDd#002

6,,-((.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_requiresrq   extras_requirer   	partitionr6   r   
safe_extra_write_provides_extraparse_strings_include_extra)r   rP   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   rS   rq   )rP   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	   rf   r
   )r9   r:   s     r   r   r     s4     >>$''S1W%@ r   )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   r\   r_   r    emailr   email.messager   tempfiler   packaging.markersr   packaging.requirementsr   packaging.utilsr	   r
   packaging.versionr   rW   r   r   warningsr   distutils.utilr   r   r$   r,   r.   r2   r7   rQ   rU   rn   r^   r   r   r   r   r   r'   r   r   <module>r      s    # 	   # ! ' $ . C % # 2 (Q"&BR&BJ(0$Gr   