U
    X7hC&                     @  sh  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ddZddddddZddddddZddddddZ dddd d!Z!d"d# Z"d$d% Z#d&d' Z$d(d) Z%d*d+ Z&dddd,d-d.d/Z'd0d1 Z(d2d3 Z)dddd4d5d6Z*dS )7z
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 kr"td}|| _|S )Nmetadata_version2.1)getattrr
   r   )selfmv r   S/var/www/formularioweb/env/lib/python3.8/site-packages/setuptools/_core_metadata.pyget_metadata_version   s
    r   str)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#   r   z
str | None)msgfieldr   c                 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k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*   z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-   )r$   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    r0   c                 C  sF  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kr| jtdkrt|| _t|d| _d|krt|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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_fileJ   s8    
rI   c                 C  s.   d| k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_lines   s
    rL   c              	   C  s   d}t j|d}zftdd|dd}|j}| | W 5 Q R X t	t 
|j}t ||tjB tjB  t || W 5 |rt j|rt | X dS )z.Write the PKG-INFO file into the release tree. zPKG-INFOwzutf-8F)encodingdirdeleteN)ospathr   existsremover   r1   write_pkg_filestatS_IMODElstatst_modechmodS_IRGRPS_IROTHreplace)r   base_dirZtempfinalfZpermissionsr   r   r   write_pkg_info   s    rb   c                   s  |   } fdd}|dt| |d|   |d|   |  }|rX|dt| d}|D ]&\}}t| |d}|dk	r`||| q`|  }	|	r|d	t|	 | j	
 D ]}
|d
d|
  qd|  }|r|d| |  pg }|D ]}|d| q|  d|   |  d|   |  d|   |  d|   t| dr\|d| j | jrp|d| j |  d| jpg  t|   |  }|r d|  |ds d 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?   )Z
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hasattrrq   long_description_content_typerG   _write_requirementsget_long_descriptionrc   endswith)r   rH   r2   rf   r3   Zoptional_fieldsr%   attrZattr_valr5   Zproject_urlr7   rE   r9   rC   r   re   r   rV      sN    	

rV   c                 C  s   t | jD ]}|d| d qi }| j D ]n\}}|d\}}}| }t	|}	|	rnt
|||	| t |D ]&}t||	| }
|d|
 d qxq2|S )NzRequires-Dist: r   :)r   parseinstall_requiresrc   extras_requirerw   	partitionr/   r   Z
safe_extra_write_provides_extraparse_strings_include_extra)r   rH   reqprocessed_extrasZaugmented_extrareqsZunsafe_extra_	conditionextrarr   r   r   r      s    
r   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  sV   | |}||kr8tjdd|d|d|ddd n|||< | 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   rc   )rH   r   safeZunsafepreviousr   r   r   r      s    

r   c                 C  s   t |  |  S r   )_distribution_fullnamerr   rs   )r   r   r   r   get_fullname
  s    r   )r1   r2   r   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	   )r1   r2   r   r   r   r     s    
r   )+__doc__
__future__r   rR   rW   r    emailr   email.messager   tempfiler   packaging.markersr   packaging.requirementsr   packaging.utilsr   r	   Zpackaging.versionr
   rM   r   r   warningsr   distutils.utilr   r   r#   r)   r*   r-   r0   rI   rL   rb   rV   r   r   r   r   r   r   r   r   r   <module>   s:   )E