o
     zqf#                     @   s  d 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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 ZdedefddZdededee fddZdededee fddZ dededeee  fddZ!dedee fddZ"dd  Z#d!d" Z$d#d$ Z%d%d& Z&d'd( Z'd)ed*ed+edefd,d-Z(d.d/ Z)d0d1 Z*dS )2z
Handling of Core Metadata for Python packages (including reading and writing).

See: https://packaging.python.org/en/latest/specifications/core-metadata/
    N)message_from_file)Message)NamedTemporaryFile)OptionalList)rfc822_escape   )_normalization_reqs)Marker)Requirement)canonicalize_name)Version)SetuptoolsDeprecationWarningc                 C   s&   t | dd }|d u rtd}|| _|S )Nmetadata_version2.1)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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"   msgfieldc                 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_msg1   s   
r)   c                 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_msg9   s   r,   c                 C   s$   t |   }|dks|sd S |S )Nr%   )strget_payloadstrip)r#   r'   r   r   r   _read_payload_from_msgA   s   r0   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authorNzauthor-emailz	home-pagezdownload-urllicensedescriptionr   keywords,platform
classifierz1.1requiresprovides	obsoleteszlicense-file)r   r   r   r(   r1   r2   r6   r4   
maintainerauthor_emailmaintainer_emailurldownload_urlr)   r5   long_descriptionr0   splitr7   r,   	platformsclassifiersr;   r<   r=   license_files)r   filer#   r   r   r   read_pkg_fileH   s8   
rI   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   emitr/   rD   )valr#   r   r   r   single_lineq   s
   rL   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   r1   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   rd   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|  }|rn|d| |  psg }|D ]}|d| qv|  d|   |  d|   |  d|   |  d|   t| dr|d| j | jr|d| j |  d| jpg  t|   |  }|rވ d|  |ds d dS dS dS )z0Write the PKG-INFO format data to a file object.c                    s     d| |f  d S )Nz%s: %s
)write)keyr'   rH   r   r   write_field   s   z#write_pkg_file.<locals>.write_fieldzMetadata-VersionNamer   Summary))z	Home-pagerA   )zDownload-URLrB   )Authorr4   )zAuthor-emailr?   )
Maintainerr>   )zMaintainer-emailr@   NLicensezProject-URLz%s, %sr8   KeywordsPlatform
ClassifierRequiresProvides	Obsoletespython_requireszRequires-PythonzDescription-Content-TypezLicense-Filez
%sr   )r   r-   get_nameget_versionget_descriptionrL   r   get_licenser   project_urlsitemsr   get_keywordsget_platforms_write_listget_classifiersget_requiresget_providesget_obsoleteshasattrrt   long_description_content_typerG   _write_requirementsget_long_descriptionre   endswith)r   rH   r2   rh   r3   optional_fieldsr$   attrattr_valr5   project_urlr7   rE   r9   rC   r   rg   r   rT      sT   	




rT   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_requiresre   extras_requirerz   	partitionr/   r	   
safe_extra_write_provides_extraparse_strings_include_extra)r   rH   reqprocessed_extrasaugmented_extrareqsunsafe_extra_	conditionextrarr   r   r   r      s   
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   rJ   re   )rH   r   safeunsafepreviousr   r   r   r      s   


r   c                 C   s    d t|  dd|  S )Nz{}-{}-r   )formatr   ru   r\   rv   )r   r   r   r   get_fullname  s   r   )+__doc__rR   rU   r   emailr   email.messager   tempfiler   typingr   r   distutils.utilr   rM   r	   r
   extern.packaging.markersr   extern.packaging.requirementsr   extern.packaging.utilsr   extern.packaging.versionr   warningsr   r   r-   r"   r(   r)   r,   r0   rI   rL   rd   rT   r   r   r   r   r   r   r   r   <module>   s:    )E