o
    5‘ðiÊ.  ã                   @  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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d„ Zd_dd„Zd`dd„Z d`dd„Z!dad d!„Z"dbd"d#„Z#d$d%„ Z$d&d'„ Z%d(d)„ Z&d*d+„ Z'd,d-„ Z(dcd2d3„Z)d4d5„ Z*d6d7„ Z+ddd:d;„Z,d<d=„ Z-i d>d>“d?d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdK“dLdL“dMdN“dOdP“dQdQ“dRdS“dTdT“dUdV“dWdX“dYdY“dZd[d\d]dCd^œ¥Z.dS )ez›
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                 C  s&   t | dd ƒ}|d u rtdƒ}|| _|S )NÚmetadata_versionz2.4)Úgetattrr
   r   )ÚselfÚmv© r   úX/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_core_metadata.pyÚget_metadata_version   s
   r   ÚcontentÚstrÚreturnc              
   C  sJ   |   ¡ }t|ƒdkr|d  ¡ S d |d  ¡ t d |dd… ¡¡f¡S )zFReverse RFC-822 escaping by removing leading whitespaces from content.r   r   Ú
N)Ú
splitlinesÚlenÚlstripÚjoinÚtextwrapÚdedent)r   Úlinesr   r   r   Úrfc822_unescape$   s   *r#   Úmsgr   Úfieldú
str | Nonec                 C  s   | | }|dkr
dS |S )zRead Message header field.ÚUNKNOWNNr   ©r$   r%   Úvaluer   r   r   Ú_read_field_from_msg,   s   r*   c                 C  s   t | |ƒ}|du r|S t|ƒS )z4Read Message header field and apply rfc822_unescape.N)r*   r#   r(   r   r   r   Ú_read_field_unescaped_from_msg4   s   
r+   úlist[str] | Nonec                 C  s   |   |d¡}|g krdS |S )z9Read Message header field and return all results as list.N)Úget_all)r$   r%   Úvaluesr   r   r   Ú_read_list_from_msg<   s   r/   c                 C  s$   t |  ¡ ƒ ¡ }|dks|sd S |S )Nr'   )r   Úget_payloadÚstrip)r$   r)   r   r   r   Ú_read_payload_from_msgD   s   r2   c                 C  sP  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du r^| jtdƒkr^t|ƒ| _t|dƒ| _d|v rqt|dƒ d¡| _t|dƒ| _t|dƒ| _| jtdƒkr—t|dƒ| _t|dƒ| _t|dƒ| _n	d| _d| _d| _t|dƒ| _dS )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*   r3   r4   r<   r6   Ú
maintainerÚauthor_emailÚmaintainer_emailÚurlÚdownload_urlr+   r:   Úlicense_expressionÚlong_descriptionr2   Úsplitr=   r/   Ú	platformsÚclassifiersrA   rB   rC   Úlicense_files)r   Úfiler$   r   r   r   Úread_pkg_fileK   s:   
rQ   c                 C  s.   d| v rd}t  d|¡ |  ¡  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   Úemitr1   rL   )Úvalr$   r   r   r   Úsingle_lineu   s
   rT   c              	   C  sÒ   d}t j |d¡}zOtdd|dd��}|j}|  |¡ W d  ƒ n1 s%w   Y  t t  |¡j	¡}t  
||tjB tjB ¡ t  ||¡ W |rUt j |¡rWt  |¡ dS dS dS |rgt j |¡rht  |¡ w w w )z.Write the PKG-INFO file into the release tree.Ú zPKG-INFOÚwzutf-8F)ÚencodingÚdirÚdeleteN)ÚosÚpathr   r   r3   Úwrite_pkg_fileÚstatÚS_IMODEÚlstatÚst_modeÚchmodÚS_IRGRPÚS_IROTHÚreplaceÚexistsÚremove)r   Úbase_dirÚtempÚfinalÚfÚpermissionsr   r   r   Úwrite_pkg_infoƒ   s   þÿÿrl   c                   s(  |   ¡ }‡ fdd„}|dt|ƒƒ |d|  ¡ ƒ |d|  ¡ ƒ |  ¡ }|r,|dt|ƒƒ d}|D ]\}}t| |dƒ}|durC|||ƒ q0| j }	rO|d	|	ƒ n|  ¡  }
r\|d
t	|
ƒƒ | j
 ¡ D ]\}}|d|› d|› �ƒ qad |  ¡ ¡}|r~|d|ƒ |  ¡ pƒg }|D ]}|d|ƒ q†|  ˆ d|  ¡ ¡ |  ˆ d|  ¡ ¡ |  ˆ d|  ¡ ¡ |  ˆ d|  ¡ ¡ t| dƒr½|d| jƒ | jrÆ|d| jƒ tt| jpÌg ƒ}|  ˆ d|¡ t| ˆ ƒ t ¡ D ]\}}t| |dƒ }rót|ƒsó|d|ƒ qÞ|  ¡ }|�rˆ  d|› �¡ | d¡�sˆ  d¡ dS dS dS )z0Write the PKG-INFO format data to a file object.c                   s   ˆ   | › d|› d�¡ d S )Nz: r   )Úwrite)Úkeyr)   ©rP   r   r   Úwrite_fieldš   s   z#write_pkg_file.<locals>.write_fieldzMetadata-VersionÚNamer
   ÚSummary))z	Home-pagerH   )zDownload-URLrI   )ÚAuthorr6   )zAuthor-emailrF   )Ú
MaintainerrE   )zMaintainer-emailrG   NzLicense-ExpressionÚLicensezProject-URLz, r>   ÚKeywordsÚPlatformÚ
ClassifierÚRequiresÚProvidesÚ	ObsoletesÚpython_requireszRequires-PythonzDescription-Content-TypezLicense-FileÚDynamicr   ) r   r   Úget_nameÚget_versionÚget_descriptionrT   r   rJ   Ú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_filerO   Ú_write_requirementsÚ_POSSIBLE_DYNAMIC_FIELDSr   Úget_long_descriptionrm   Úendswith)r   rP   r4   rp   r5   Úoptional_fieldsr%   ÚattrÚattr_valrJ   r:   ÚlabelrH   r=   rM   r?   Úsafe_license_filesrS   rK   r   ro   r   r\   –   s`   	
€




€ýr\   c                 C  s¦   t  | j¡D ]}| d|› d�¡ qi }| j ¡ D ]7\}}| d¡\}}}| ¡ }t 	|¡}	|	r7t
|||	|ƒ t  |¡D ]}t||	| ¡ ƒ}
| d|
› d�¡ q<q|S )NzRequires-Dist: r   ú:)r   ÚparseÚinstall_requiresrm   Úextras_requirerƒ   Ú	partitionr1   r   Ú
safe_extraÚ_write_provides_extraÚparse_stringsÚ_include_extra)r   rP   ÚreqÚprocessed_extrasÚaugmented_extraÚreqsÚunsafe_extraÚ_Ú	conditionÚextraÚrr   r   r   r�   á   s   
þr�   r¡   r¨   r§   r   c                 C  sb   t | ƒ}|jrd|j› d�nd |rd|› d�nd |rd|›�nd f}td dd„ |D ƒ¡ƒ|_|S )Nú(ú)z	extra == ú and c                 s  s   � | ]}|r|V  qd S ©Nr   )Ú.0Úxr   r   r   Ú	<genexpr>ü   s   € z!_include_extra.<locals>.<genexpr>)r   Úmarkerr   r   )r¡   r¨   r§   r©   Úpartsr   r   r   r    õ   s   ýr    c              	   C  sX   |  |¡}||krtjdd|›d|›d|›d�dd� d S |||< |  d|› d	�¡ d S )
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   rR   rm   )rP   r¢   ÚsafeÚunsafeÚpreviousr   r   r   rž      s   
ÿÿþ
ù
rž   c                 C  s   t |  ¡ |  ¡ ƒS r­   )Ú_distribution_fullnamer~   r   )r   r   r   r   Úget_fullname  s   r¹   r3   r4   c                 C  s    d  t| ƒ dd¡t|d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   rd   r	   )r3   r4   r   r   r   r¸     s   
þr¸   c                 C  s.   t j | ¡ t jd¡}d|v rt j |¡S |S )Nú/z../)rZ   r[   Únormpathrd   ÚsepÚbasename)rP   Ú
normalizedr   r   r   rŽ   )  s   rŽ   r6   r7   rF   r@   rN   r<   rK   zdescription-content-typerŒ   r9   rI   r8   rH   r=   r:   rD   rO   r;   rJ   rE   zmaintainer-emailrG   rC   r?   rM   zproject-urlr‚   rB   r›   rA   rš   r|   )zprovides-extrarA   zrequires-distzrequires-pythonr5   )r   r   r   r   )r$   r   r%   r   r   r&   )r$   r   r%   r   r   r,   )r$   r   r   r&   )r¡   r   r¨   r   r§   r   r   r   )r3   r   r4   r   r   r   )/Ú__doc__Ú
__future__r   rZ   r]   r    Úemailr   Úemail.messager   Útempfiler   Úpackaging.markersr   Úpackaging.requirementsr   Úpackaging.utilsr   r	   Úpackaging.versionr
   rU   r   r   Ú_staticr   Úwarningsr   Údistutils.utilr   r   r#   r*   r+   r/   r2   rQ   rT   rl   r\   r�   r    rž   r¹   r¸   rŽ   r�   r   r   r   r   Ú<module>   s’    




*K

þýüûúùø	÷
öñðïîíëêéâ