o
    gC&                     @  s2  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 Zd;d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?d1d2Z'd3d4 Z(d5d6 Z)d@d9d:Z*dS )Az
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                 C  s&   t | dd }|d u rtd}|| _|S )Nmetadata_version2.1)getattrr
   r   )selfmv r   V/var/www/rescue_company/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_msg3   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_msgC   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authorNzauthor-emailz	home-pagezdownload-urllicensedescriptionr   keywords,platform
classifierz1.1requiresprovides	obsoleteszlicense-file)r   r
   r   r*   r3   r4   r8   r6   
maintainerauthor_emailmaintainer_emailurldownload_urlr+   r7   long_descriptionr2   splitr9   r/   	platformsclassifiersr=   r>   r?   license_files)r   filer$   r   r   r   read_pkg_fileJ   s8   
rK   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   rF   )valr$   r   r   r   single_lines   s
   rN   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   rf   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)   rJ   r   r   write_field   s   z#write_pkg_file.<locals>.write_fieldzMetadata-VersionNamer
   Summary))z	Home-pagerC   )zDownload-URLrD   )Authorr6   )zAuthor-emailrA   )
Maintainerr@   )zMaintainer-emailrB   NLicensezProject-URLz%s, %sr:   KeywordsPlatform
ClassifierRequiresProvides	Obsoletespython_requireszRequires-PythonzDescription-Content-TypezLicense-Filez
%sr   )r   r   get_nameget_versionget_descriptionrN   r   get_licenser   project_urlsitemsr   get_keywordsget_platforms_write_listget_classifiersget_requiresget_providesget_obsoleteshasattrrv   long_description_content_typerI   _write_requirementsget_long_descriptionrg   endswith)r   rJ   r4   rj   r5   optional_fieldsr%   attrattr_valr7   project_urlr9   rG   r;   rE   r   ri   r   rV      sT   	




rV   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_requiresrg   extras_requirer|   	partitionr1   r   
safe_extra_write_provides_extraparse_strings_include_extra)r   rJ   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   rL   rg   )rJ   r   safeunsafepreviousr   r   r   r      s   


r   c                 C  s   t |  |  S r   )_distribution_fullnamerw   rx   )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   r^   r	   )r3   r4   r   r   r   r     s   
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   r   )r3   r   r4   r   r   r   )+__doc__
__future__r   rT   rW   r    emailr   email.messager   tempfiler   packaging.markersr   packaging.requirementsr   packaging.utilsr   r	   packaging.versionr
   rO   r   r   warningsr   distutils.utilr   r   r#   r*   r+   r/   r2   rK   rN   rf   rV   r   r   r   r   r   r   r   r   r   <module>   s<    




)E
