o
    LK&h.                     @  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   L/var/www/html/venv/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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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| |  pg }|D ]}|d| q|  d|   |  d|   |  d|   |  d|   t| dr|d| j | jr|d| j tt| jpg }|  d| 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)   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

	
