o
    Ee"                     @   sl  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 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'dS )/z
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)Version)SetuptoolsDeprecationWarningc                 C   s&   t | dd }|d u rtd}|| _|S )Nmetadata_version2.1)getattrr   r   )selfmv r   Z/var/www/bmteknikk.ddns.net/venv/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_msg/   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_msg7   s   r+   c                 C   s    |    }|dks|sd S |S )Nr$   )get_payloadstrip)r"   r&   r   r   r   _read_payload_from_msg?   s   r.   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'   r/   r0   r4   r2   
maintainerauthor_emailmaintainer_emailurldownload_urlr(   r3   long_descriptionr.   splitr5   r+   	platformsclassifiersr9   r:   r;   license_files)r   filer"   r   r   r   read_pkg_fileF   s8   
rG   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-   rB   )valr"   r   r   r   single_lineo   s
   rJ   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   r/   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   rb   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&   rF   r   r   write_field   s   z#write_pkg_file.<locals>.write_fieldzMetadata-VersionNamer   Summary))z	Home-pager?   )zDownload-URLr@   )Authorr2   )zAuthor-emailr=   )
Maintainerr<   )zMaintainer-emailr>   NLicensezProject-URLz%s, %sr6   KeywordsPlatform
ClassifierRequiresProvides	Obsoletespython_requireszRequires-PythonzDescription-Content-TypezLicense-Filez
%sr   )r   strget_nameget_versionget_descriptionrJ   r   get_licenser   project_urlsitemsr   get_keywordsget_platforms_write_listget_classifiersget_requiresget_providesget_obsoleteshasattrrr   long_description_content_typerE   _write_requirementsget_long_descriptionrc   endswith)r   rF   r0   rf   r1   optional_fieldsr#   attrattr_valr3   project_urlr5   rC   r7   rA   r   re   r   rR      sT   	




rR   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_requiresrc   extras_requirery   	partitionr-   r	   
safe_extra_write_provides_extraparse_strings_include_extra)r   rF   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   rH   rc   )rF   r   safeunsafepreviousr   r   r   r      s   


r   )(__doc__rP   rS   r   emailr   email.messager   tempfiler   typingr   r   distutils.utilr   rK   r	   r
   extern.packaging.markersr   extern.packaging.requirementsr   extern.packaging.versionr   warningsr   r   rs   r!   r'   r(   r+   r.   rG   rJ   rb   rR   r   r   r   r   r   r   r   <module>   s6    )E