o
    !g>+                     @  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dZddZd[ddZ d[d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^d2d3Z)d4d5 Z*d6d7 Z+d_d:d;Z,i d<d<d=d>d?d@dAdBdCdDdEdFdGdHdIdIdJdJdKdKdLdMdNdNdOdPdQdRdSdSdTdUdVdVdWdXdAdYZ-dS )`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)	is_static)SetuptoolsDeprecationWarning)rfc822_escapec                 C  s&   t | dd }|d u rtd}|| _|S )Nmetadata_versionz2.2)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  sD  t |}t|d | _t|d| _t|d| _t|d| _t|d| _d| _t|d| _	d| _
t|d| _t|d	| _t|d
| _t|d| _| jdu rX| jtdkrXt|| _t|d| _d|v rkt|dd| _t|d| _t|d| _| jtdkrt|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descriptionz2.1keywords,platform
classifierz1.1requiresprovides	obsoleteszlicense-file)r   r
   r   r*   r3   r4   r;   r6   
maintainerauthor_emailmaintainer_emailurldownload_urlr+   r:   long_descriptionr2   splitr<   r/   	platformsclassifiersr@   rA   rB   license_files)r   filer$   r   r   r   read_pkg_fileK   s8   
rN   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   rI   )valr$   r   r   r   single_linet   s
   rQ   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   ri   c                   s  |   } fdd}|dt| |d|   |d|   |  }|r,|dt| d}|D ]\}}t| |d}|durC||| q0|  }	|	rQ|d	t|	 | j	
 D ]\}
}|d
|
 d|  qVd|  }|rs|d| |  pxg }|D ]}|d| q{|  d|   |  d|   |  d|   |  d|   t| dr|d| j | jr|d| j |  d| jpg  t|   t
 D ]\}}t| |d }rt|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)   rM   r   r   write_field   s   z#write_pkg_file.<locals>.write_fieldzMetadata-VersionNamer
   Summary))z	Home-pagerF   )zDownload-URLrG   )Authorr6   )zAuthor-emailrD   )
MaintainerrC   )zMaintainer-emailrE   N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_descriptionrQ   r   get_licenser   project_urlsitemsr   get_keywordsget_platforms_write_listget_classifiersget_requiresget_providesget_obsoleteshasattrry   long_description_content_typerL   _write_requirements_POSSIBLE_DYNAMIC_FIELDSr   get_long_descriptionrj   endswith)r   rM   r4   rm   r5   optional_fieldsr%   attrattr_valr:   labelrF   r<   rJ   r>   rP   rH   r   rl   r   rY      s\   	




rY   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_requiresrj   extras_requirer   	partitionr1   r   
safe_extra_write_provides_extraparse_strings_include_extra)r   rM   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   rO   rj   )rM   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   ra   r	   )r3   r4   r   r   r   r     s   
r   r6   r7   rD   r?   rK   r;   rH   zdescription-content-typer   r9   rG   r8   rF   r<   r:   rC   zmaintainer-emailrE   rB   r>   rJ   zproject-urlr   rA   zprovides-extrar   r@   r   ry   )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   rW   rZ   r    emailr   email.messager   tempfiler   packaging.markersr   packaging.requirementsr   packaging.utilsr   r	   packaging.versionr
   rR   r   r   _staticr   warningsr   distutils.utilr   r   r#   r*   r+   r/   r2   rN   rQ   ri   rY   r   r   r   r   r   r   r   r   r   r   <module>   s    




)I

	
