<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Re2                 @   s  d Z ddlmZ ddlZddlmZ ddlZddlZddlZddl	m
Z
mZ ddlmZmZmZ ddlmZ dd	lmZmZ dd
lmZmZ eeZG dd de
ZG dd de
ZG dd de
ZG dd de
ZdddgZdZ dZ!e"dZ#e"dZ$dZ%dZ&dZ'dZ(dZ)dZ*d Z+e*d! Z,d"Z-e. Z/e/0e% e/0e& e/0e( e/0e* e/0e, e"d#Z1d$d% Z2d&d' Z3d(d) e/D Z4d*d) e45 D Z6d+Z7d,Z8d-Z9d.Z:d/Z;d0Z<d1Z=e> Z?e"d2Z@d<d4d5ZAG d6d7 d7e>ZBd8ZCd9ZDd:ZEG d;d de>ZFdS )=zImplementation of the Metadata for Python packages PEPs.

Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and withdrawn 2.0).
    )unicode_literalsN)message_from_file   )DistlibException__version__)StringIOstring_types	text_type)	interpret)extract_by_key
get_extras)
get_schemePEP440_VERSION_REc               @   s   e Zd ZdZdS )MetadataMissingErrorzA required metadata is missingN)__name__
__module____qualname____doc__ r   r   /builddir/build/BUILDROOT/alt-python37-pip-20.2.4-6.el8.x86_64/opt/alt/python37/lib/python3.7/site-packages/pip/_vendor/distlib/metadata.pyr      s   r   c               @   s   e Zd ZdZdS )MetadataConflictErrorz>Attempt to read or write metadata fields that are conflictual.N)r   r   r   r   r   r   r   r   r       s   r   c               @   s   e Zd ZdZdS ) MetadataUnrecognizedVersionErrorz Unknown metadata version number.N)r   r   r   r   r   r   r   r   r   $   s   r   c               @   s   e Zd ZdZdS )MetadataInvalidErrorzA metadata value is invalidN)r   r   r   r   r   r   r   r   r   (   s   r   MetadataPKG_INFO_ENCODINGPKG_INFO_PREFERRED_VERSIONzutf-8z1.1z

       \|z	
        )zMetadata-VersionNameVersionPlatformSummaryDescriptionKeywordsz	Home-pageAuthorzAuthor-emailLicense)zMetadata-Versionr   r   r   zSupported-Platformr   r    r!   z	Home-pager"   zAuthor-emailr#   
ClassifierzDownload-URL	ObsoletesProvidesRequires)r%   r&   r'   r$   zDownload-URL)zMetadata-Versionr   r   r   zSupported-Platformr   r    r!   z	Home-pager"   zAuthor-email
MaintainerzMaintainer-emailr#   r$   zDownload-URLzObsoletes-DistzProject-URLzProvides-DistzRequires-DistzRequires-PythonzRequires-External)zProvides-DistzRequires-DistzRequires-PythonzObsoletes-DistzRequires-Externalr(   zMaintainer-emailzProject-URL)zMetadata-Versionr   r   r   zSupported-Platformr   r    r!   z	Home-pager"   zAuthor-emailr(   zMaintainer-emailr#   r$   zDownload-URLzObsoletes-DistzProject-URLzProvides-DistzRequires-DistzRequires-PythonzRequires-ExternalzPrivate-VersionzObsoleted-ByzSetup-Requires-Dist	ExtensionzProvides-Extra)zPrivate-VersionzProvides-ExtrazObsoleted-ByzSetup-Requires-Distr)   )zDescription-Content-Typer'   r&   )zDescription-Content-Typez"extra\s*==\s*("([^"]+)"|'([^']+)')c             C   sL   | dkrt S | dkrtS | dkr$tS | dkr4tt S | dkr@tS t| d S )Nz1.0z1.1z1.2)z1.3z2.1z2.0)_241_FIELDS_314_FIELDS_345_FIELDS_566_FIELDS_426_FIELDSr   )versionr   r   r   _version2fieldlistp   s    r0   c       
      C   sL  dd }g }x.|   D ]"\}}|g ddfkr.q|| qW ddddd	d
g} x|D ]}|tkr~d|kr~|d td| |tkrd|kr|d td| |tkrd|kr|d td| |tkrd|kr|d td| |tkr$d
|kr$|dkr$|d
 td| |t	krTd	|krT|d	 td| qTW t
|dkrd|d S t
|dkrtd|  tdd|ko||t}d|ko||t}d
|ko||t}d	|ko||t}	t|t| t| t|	 dkrtd|s*|s*|s*|	s*t|kr*tS |r4dS |r>dS |rHd
S d	S )z5Detect the best version depending on the fields used.c             S   s   x|D ]}|| krdS qW dS )NTFr   )keysmarkersmarkerr   r   r   _has_marker   s    
z"_best_version.<locals>._has_markerUNKNOWNNz1.0z1.1z1.2z1.3z2.0z2.1zRemoved 1.0 due to %szRemoved 1.1 due to %szRemoved 1.2 due to %szRemoved 1.3 due to %sr    zRemoved 2.1 due to %szRemoved 2.0 due to %sr   r   z)Out of options - unknown metadata set: %szUnknown metadata setz,You used incompatible 1.1/1.2/2.0/2.1 fields)itemsappendr*   removeloggerdebugr+   r,   r-   r.   lenr   _314_MARKERS_345_MARKERS_566_MARKERS_426_MARKERSintr   )
fieldsr4   r1   keyvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_1Zis_2_0r   r   r   _best_version~   s`    






&
rD   c             C   s   i | ]}||  d dqS )-_)lowerreplace).0namer   r   r   
<dictcomp>   s   rK   c             C   s   i | ]\}}||qS r   r   )rI   attrfieldr   r   r   rK      s    )zRequires-DistzObsoletes-DistzProvides-Dist)zRequires-Python)r   )r   r$   r%   r'   r&   zObsoletes-DistzProvides-DistzRequires-DistzRequires-ExternalzProject-URLzSupported-PlatformzSetup-Requires-DistzProvides-Extrar)   )zProject-URL)r!   )r"   r(   r   r    z[^A-Za-z0-9.]+Fc             C   s0   |r$t d| } t d|dd}d| |f S )zhReturn the distribution name with version.

    If for_filename is true, return a filename-escaped form.rE    .z%s-%s)	_FILESAFEsubrH   )rJ   r/   Zfor_filenamer   r   r   _get_name_and_version   s    rR   c               @   s
  e Zd ZdZd?ddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zd@ddZdd Zdd  Zd!d" Zd#d$ ZdAd%d&ZdBd'd(ZdCd)d*Zd+d, Zefd-d.ZdDd/d0ZdEd1d2Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!dS )FLegacyMetadataao  The legacy metadata of a release.

    Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (auto-detected). You can
    instantiate the class with one of these arguments (or none):
    - *path*, the path to a metadata file
    - *fileobj* give a file-like object with metadata as content
    - *mapping* is a dict-like object
    - *scheme* is a version scheme name
    Ndefaultc             C   sz   |||g d dk rtdi | _g | _d | _|| _|d k	rH| | n.|d k	r\| | n|d k	rv| | | 	  d S )N   z'path, fileobj and mapping are exclusive)
count	TypeError_fieldsZrequires_filesZ_dependenciesschemeread	read_fileupdateset_metadata_version)selfpathfileobjmappingrY   r   r   r   __init__   s    
zLegacyMetadata.__init__c             C   s   t | j| jd< d S )NzMetadata-Version)rD   rX   )r^   r   r   r   r]     s    z#LegacyMetadata.set_metadata_versionc             C   s   | d||f  d S )Nz%s: %s
)write)r^   r`   rJ   rC   r   r   r   _write_field  s    zLegacyMetadata._write_fieldc             C   s
   |  |S )N)get)r^   rJ   r   r   r   __getitem__  s    zLegacyMetadata.__getitem__c             C   s   |  ||S )N)set)r^   rJ   rC   r   r   r   __setitem__  s    zLegacyMetadata.__setitem__c             C   s8   |  |}y| j|= W n tk
r2   t|Y nX d S )N)_convert_namerX   KeyError)r^   rJ   
field_namer   r   r   __delitem__  s
    
zLegacyMetadata.__delitem__c             C   s   || j kp| || j kS )N)rX   ri   )r^   rJ   r   r   r   __contains__  s    
zLegacyMetadata.__contains__c             C   s(   |t kr|S |dd }t||S )NrE   rF   )_ALL_FIELDSrH   rG   _ATTR2FIELDre   )r^   rJ   r   r   r   ri     s    zLegacyMetadata._convert_namec             C   s   |t ks|tkrg S dS )Nr5   )_LISTFIELDS_ELEMENTSFIELD)r^   rJ   r   r   r   _default_value%  s    zLegacyMetadata._default_valuec             C   s&   | j dkrtd|S td|S d S )N)z1.0z1.1
)metadata_version_LINE_PREFIX_PRE_1_2rQ   _LINE_PREFIX_1_2)r^   rC   r   r   r   _remove_line_prefix*  s    
z"LegacyMetadata._remove_line_prefixc             C   s   |t kr| | S t|d S )N)ro   AttributeError)r^   rJ   r   r   r   __getattr__0  s    zLegacyMetadata.__getattr__Fc             C   s   t | d | d |S )zhReturn the distribution name with version.

        If filesafe is true, return a filename-escaped form.r   r   )rR   )r^   Zfilesafer   r   r   get_fullname;  s    zLegacyMetadata.get_fullnamec             C   s   |  |}|tkS )z+return True if name is a valid metadata key)ri   rn   )r^   rJ   r   r   r   is_fieldA  s    
zLegacyMetadata.is_fieldc             C   s   |  |}|tkS )N)ri   rp   )r^   rJ   r   r   r   is_multi_fieldF  s    
zLegacyMetadata.is_multi_fieldc             C   s.   t j|ddd}z| | W d|  X dS )z*Read the metadata values from a file path.rzutf-8)encodingN)codecsopenr[   close)r^   filepathfpr   r   r   rZ   J  s    zLegacyMetadata.readc             C   s   t |}|d | jd< xxtD ]p}||kr*q|tkrh||}|tkrZ|dk	rZdd |D }| || q|| }|dk	r|dkr| || qW | }|r|n| d | d< dS )z,Read the metadata values from a file object.zmetadata-versionzMetadata-VersionNc             S   s   g | ]}t |d qS ),)tuplesplit)rI   rC   r   r   r   
<listcomp>_  s    z,LegacyMetadata.read_file.<locals>.<listcomp>r5   r    )r   rX   rn   rp   get_all_LISTTUPLEFIELDSrg   get_payload)r^   ZfileobmsgrM   valuesrC   bodyr   r   r   r[   R  s    

zLegacyMetadata.read_filec             C   s0   t j|ddd}z| || W d|  X dS )z&Write the metadata fields to filepath.wzutf-8)r~   N)r   r   
write_filer   )r^   r   skip_unknownr   r   r   r   rc   n  s    zLegacyMetadata.writec             C   s   |    xt| d D ]}| |}|r:|dg dgfkr:q|tkrX| ||d| q|tkr|dkr| jdkr|dd}n|dd}|g}|t	krd	d
 |D }x|D ]}| ||| qW qW dS )z0Write the PKG-INFO format data to a file object.zMetadata-Versionr5   r   r    )z1.0z1.1rs   z	
        z	
       |c             S   s   g | ]}d  |qS )r   )join)rI   rC   r   r   r   r     s    z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r]   r0   re   rq   rd   r   rp   rt   rH   r   )r^   
fileobjectr   rM   r   rC   r   r   r   r   v  s$    


zLegacyMetadata.write_filec                s    fdd}|snHt |dr>x<| D ]}||||  q&W nx|D ]\}}||| qDW |r~x| D ]\}}||| qhW dS )a  Set metadata values from the given iterable `other` and kwargs.

        Behavior is like `dict.update`: If `other` has a ``keys`` method,
        they are looped over and ``self[key]`` is assigned ``other[key]``.
        Else, ``other`` is an iterable of ``(key, value)`` iterables.

        Keys that don't match a metadata field or that have an empty value are
        dropped.
        c                s"   | t kr|r  | | d S )N)ro   rg   ri   )rB   rC   )r^   r   r   _set  s    z#LegacyMetadata.update.<locals>._setr1   N)hasattrr1   r6   )r^   otherkwargsr   kvr   )r^   r   r\     s    

zLegacyMetadata.updatec             C   sl  |  |}|tks|dkrNt|ttfsNt|trHdd |dD }qzg }n,|tkrzt|ttfszt|trv|g}ng }t	t
jr@| d }t| j}|tkr|dk	rx|D ](}||dd std	||| qW nb|tkr|dk	r||s@td
||| n0|tkr@|dk	r@||s@td
||| |tkr^|dkr^| |}|| j|< dS )z"Control then set a metadata field.r   c             S   s   g | ]}|  qS r   )strip)rI   r   r   r   r   r     s    z&LegacyMetadata.set.<locals>.<listcomp>r   r   N;r   z$'%s': '%s' is not valid (field '%s')z.'%s': '%s' is not a valid version (field '%s')r    )ri   rq   
isinstancelistr   r   r   rp   r9   isEnabledForloggingWARNINGr   rY   _PREDICATE_FIELDSis_valid_matcherwarning_VERSIONS_FIELDSis_valid_constraint_list_VERSION_FIELDSis_valid_version_UNICODEFIELDSrw   rX   )r^   rJ   rC   project_namerY   r   r   r   r   rg     s@    








zLegacyMetadata.setc             C   s   |  |}|| jkr*|tkr&| |}|S |tkr@| j| }|S |tkr| j| }|dkr^g S g }x6|D ].}|tkr|| qh||d |d f qhW |S |tkr| j| }t	|t
r|dS | j| S )zGet a metadata field.Nr   r   r   )ri   rX   _MISSINGrr   r   rp   r   r7   rq   r   r   r   )r^   rJ   rT   rC   resvalr   r   r   re     s.    








zLegacyMetadata.getc                s
  |    g g  }}xdD ]}|| kr|| qW |rT|g krTdd| }t|xdD ]}|| krZ|| qZW | d dkr||fS t| j  fdd}xbt|ft jft	 j
ffD ]D\}}x:|D ]2}	| |	d	}
|
d	k	r||
s|d
|	|
f  qW qW ||fS )zkCheck if the metadata is compliant. If strict is True then raise if
        no Name or Version are provided)r   r   zmissing required metadata: %sz, )z	Home-pager"   zMetadata-Versionz1.2c                s*   x$| D ]}  |dd sdS qW dS )Nr   r   FT)r   r   )rC   r   )rY   r   r   are_valid_constraints  s    
z3LegacyMetadata.check.<locals>.are_valid_constraintsNzWrong value for '%s': %s)r]   r7   r   r   r   rY   r   r   r   r   r   re   )r^   strictmissingwarningsrL   r   r   rA   
controllerrM   rC   r   )rY   r   check  s2    




zLegacyMetadata.checkc             C   sl   |    t| d }i }xN|D ]F}|r0|| jkrt| }|dkrN| | ||< qdd | | D ||< qW |S )a  Return fields as a dict.

        Field names will be converted to use the underscore-lowercase style
        instead of hyphen-mixed case (i.e. home_page instead of Home-page).
        This is as per https://www.python.org/dev/peps/pep-0566/#id17.
        zMetadata-Versionproject_urlc             S   s   g | ]}d  |qS )r   )r   )rI   ur   r   r   r   3  s    z)LegacyMetadata.todict.<locals>.<listcomp>)r]   r0   rX   _FIELD2ATTR)r^   Zskip_missingrA   datark   rB   r   r   r   todict   s    
zLegacyMetadata.todictc             C   s<   | d dkr(xdD ]}|| kr| |= qW | d  |7  < d S )NzMetadata-Versionz1.1)r%   r'   r&   zRequires-Distr   )r^   requirementsrM   r   r   r   add_requirements7  s
    

zLegacyMetadata.add_requirementsc             C   s   t t| d S )NzMetadata-Version)r   r0   )r^   r   r   r   r1   B  s    zLegacyMetadata.keysc             c   s   x|   D ]
}|V  q
W d S )N)r1   )r^   rB   r   r   r   __iter__E  s    zLegacyMetadata.__iter__c                s    fdd   D S )Nc                s   g | ]} | qS r   r   )rI   rB   )r^   r   r   r   J  s    z)LegacyMetadata.values.<locals>.<listcomp>)r1   )r^   r   )r^   r   r   I  s    zLegacyMetadata.valuesc                s    fdd   D S )Nc                s   g | ]}| | fqS r   r   )rI   rB   )r^   r   r   r   M  s    z(LegacyMetadata.items.<locals>.<listcomp>)r1   )r^   r   )r^   r   r6   L  s    zLegacyMetadata.itemsc             C   s   d| j j| j| jf S )Nz
<%s %s %s>)	__class__r   rJ   r/   )r^   r   r   r   __repr__O  s    zLegacyMetadata.__repr__)NNNrT   )F)F)F)N)F)F)"r   r   r   r   rb   r]   rd   rf   rh   rl   rm   ri   rr   rw   ry   rz   r{   r|   rZ   r[   rc   r   r\   rg   r   re   r   r   r   r1   r   r   r6   r   r   r   r   r   rS      s>   	 




,
,
rS   zpydist.jsonzmetadata.jsonMETADATAc               @   s  e Zd ZdZedZedejZe	Z
edZdZde Zdddd	Zd
ZdZedfedfe
dfedfdZdZdHddZedZdefZdefZdefdefeeedefeeeedefdddZ[[dd ZdIddZdd Zed d! Z ed"d# Z!e!j"d$d# Z!dJd%d&Z#ed'd( Z$ed)d* Z%e%j"d+d* Z%d,d- Z&d.d/ Z'd0d1 Z(d2d3 Z)d4d5d6d7d8d9d:d;d<dd=
Z*d>d? Z+dKdBdCZ,dDdE Z-dFdG Z.dS )Lr   z
    The metadata of a release. This implementation uses 2.0 (JSON)
    metadata where possible. If not possible, it wraps a LegacyMetadata
    instance which handles the key-value metadata format.
    z^\d+(\.\d+)*$z!^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$z	.{1,2047}z2.0zdistlib (%s)r   )legacy)rJ   r/   summaryzqname version license summary description author author_email keywords platform home_page classifiers download_urlzwextras run_requires test_requires build_requires dev_requires provides meta_requires obsoleted_by supports_environments)rt   rJ   r/   r   )_legacy_datarY   NrT   c          	   C   s0  |||g d dk rtdd | _d | _|| _|d k	rzy| || || _W n* tk
rv   t||d| _|   Y nX nd }|rt	|d}|
 }W d Q R X n|r|
 }|d kr| j| jd| _ndt|ts|d}yt|| _| | j| W n0 tk
r*   tt||d| _|   Y nX d S )NrU   z'path, fileobj and mapping are exclusive)ra   rY   rb)rt   	generatorzutf-8)r`   rY   )rV   rW   r   r   rY   _validate_mappingr   rS   validater   rZ   METADATA_VERSION	GENERATORr   r	   decodejsonloads
ValueErrorr   )r^   r_   r`   ra   rY   r   fr   r   r   rb     s<    



zMetadata.__init__)rJ   r/   licensekeywordsr   zRequires-DistzSetup-Requires-DistzProvides-Extrar$   )zDownload-URLN)zMetadata-VersionN)run_requiresbuild_requiresdev_requiresZtest_requiresmeta_requiresextrasmodules
namespacesexportscommandsclassifiers
source_urlrt   c       
      C   sX  t | d}t | d}||kr|| \}}| jr^|d krP|d krHd n| }n| j|}n|d krjd n| }|dkr| j||}nt  }|}| jd}	|	r
|dkr|	d|}nP|dkr|	d}	|	r|	||}n,|	d	}	|	s| jd	}	|	r
|	||}||krT|}n:||kr2t | |}n"| jrH| j|}n| j|}|S )
Ncommon_keysmapped_keys)r   r   r   r   r   
extensionsr   zpython.commandsr   zpython.detailszpython.exports)object__getattribute__r   re   r   )
r^   rB   commonmappedlkmakerresultrC   sentineldr   r   r   r     sD    




zMetadata.__getattribute__c             C   sH   || j krD| j | \}}|p | j|krD||}|sDtd||f d S )Nz.'%s' is an invalid value for the '%s' property)SYNTAX_VALIDATORSrY   matchr   )r^   rB   rC   rY   pattern
exclusionsmr   r   r   _validate_value  s    

zMetadata._validate_valuec             C   s*  |  || t| d}t| d}||kr|| \}}| jrV|d krJt|| j|< nf|dkrj|| j|< nR| jdi }|dkr||d< n2|dkr|di }|||< n|d	i }|||< nh||krt| || nP|d
krt|t	r|
 }|r| }ng }| jr|| j|< n
|| j|< d S )Nr   r   )r   r   r   r   r   r   r   zpython.commandsr   zpython.detailszpython.exportsr   )r   r   r   r   NotImplementedErrorr   
setdefault__setattr__r   r   r   r   )r^   rB   rC   r   r   r   rF   r   r   r   r   r     s<    




zMetadata.__setattr__c             C   s   t | j| jdS )NT)rR   rJ   r/   )r^   r   r   r   name_and_version#  s    zMetadata.name_and_versionc             C   sF   | j r| j d }n| jdg }d| j| jf }||krB|| |S )NzProvides-Distprovidesz%s (%s))r   r   r   rJ   r/   r7   )r^   r   sr   r   r   r   '  s    
zMetadata.providesc             C   s    | j r|| j d< n
|| jd< d S )NzProvides-Distr   )r   r   )r^   rC   r   r   r   r   2  s    c       
      C   s   | j r|}ng }t|pg | j}xl|D ]d}d|kr@d|kr@d}n8d|krNd}n|d|k}|rx|d}|rxt||}|r&||d  q&W xNdD ]F}d| }	|	|kr||	 | jd| g }|| j|||d qW |S )	a  
        Base method to get dependencies, given a set of extras
        to satisfy and an optional environment context.
        :param reqts: A list of sometimes-wanted dependencies,
                      perhaps dependent on extras and environment.
        :param extras: A list of optional components being requested.
        :param env: An optional environment for marker evaluation.
        extraenvironmentTrequires)builddevtestz:%s:z%s_requires)r   env)	r   r   r   re   r
   extendr8   r   get_requirements)
r^   reqtsr   r   r   r   includer3   rB   er   r   r   r   9  s0    	




zMetadata.get_requirementsc             C   s   | j r|  S | jS )N)r   _from_legacyr   )r^   r   r   r   
dictionaryc  s    zMetadata.dictionaryc             C   s   | j rtnt| j| jS d S )N)r   r   r   r   DEPENDENCY_KEYS)r^   r   r   r   dependenciesi  s    zMetadata.dependenciesc             C   s   | j rtn| j| d S )N)r   r   r   r\   )r^   rC   r   r   r   r   p  s    c       	      C   s   | d| jkrt g }x0| j D ]"\}}||kr&||kr&|| q&W |rfdd| }t|x"| D ]\}}| ||| qpW d S )Nrt   zMissing metadata items: %sz, )	re   r   r   MANDATORY_KEYSr6   r7   r   r   r   )	r^   ra   rY   r   rB   r   r   r   r   r   r   r   r   w  s    zMetadata._validate_mappingc             C   sB   | j r.| j d\}}|s|r>td|| n| | j| j d S )NTz#Metadata: missing: %s, warnings: %s)r   r   r9   r   r   r   rY   )r^   r   r   r   r   r   r     s    
zMetadata.validatec             C   s(   | j r| j dS t| j| j}|S d S )NT)r   r   r   r   
INDEX_KEYS)r^   r   r   r   r   r     s    zMetadata.todictc       
      C   s   | j r| jrt| j| jd}| j d}x2dD ]*}||kr0|dkrJd}n|}|| ||< q0W |dg }|dgkrxg }||d< d	}x2|D ]*\}}||kr|| rd
|| ig||< qW | j|d< i }i }	|S )N)rt   r   T)rJ   r/   r   r   description
classifierr  r   r!    r   ))Zrequires_distr   )Zsetup_requires_distr   r   r   )r   r   AssertionErrorr   r   r   re   r   )
r^   r   Zlmdr   nkkwr1   okauthor
maintainerr   r   r   r     s,    



zMetadata._from_legacyr   r   r#   r   r    z	Home-pager"   zAuthor-emailzDownload-URL)
rJ   r/   )r   zpython.detailsr   r   r  )r   zpython.projectproject_urlsZHome)r   zpython.projectcontactsr   rJ   )r   zpython.projectr  r   emailr   )r   zpython.detailsr   c             C   s   dd }| j r| jrtt }| j }x| j D ]v\}}t|tsX||kr|| ||< q0|}d}x8|D ]0}y|| }W qf tt	fk
r   d}P Y qfX qfW |r0|||< q0W || j
| j }	|| j| j }
| jrt| j|d< t|	|d< t|
|d< |S )Nc             S   s   t  }x| D ]}|d}|d}|d }x^|D ]V}|sJ|sJ|| q2d}|rZd| }|rt|rpd||f }n|}|d||f q2W qW |S )Nr   r   r   r  zextra == "%s"z(%s) and %sr   )rg   re   addr   )entriesr   r   r   r   Zrlistr}   r3   r   r   r   process_entries  s"    



z,Metadata._to_legacy.<locals>.process_entriesTFzProvides-ExtrazRequires-DistzSetup-Requires-Dist)r   r   r  rS   LEGACY_MAPPINGr6   r   r   rj   
IndexErrorr   r   r   r   r   sorted)r^   r  r   Znmdr  r	  r   foundr   Zr1Zr2r   r   r   
_to_legacy  s2    

zMetadata._to_legacyFTc          	   C   s   ||g d dkrtd|   |r`| jr4| j}n|  }|rP|j||d q|j||d n^| jrp|  }n| j}|rt	j
||dddd n.t|dd}t	j
||dddd W d Q R X d S )	Nr   z)Exactly one of path and fileobj is needed)r   TrU   )ensure_asciiindent	sort_keysr   zutf-8)rV   r   r   r   r  rc   r   r   r   r   dumpr   r   )r^   r_   r`   r   r   Z	legacy_mdr   r   r   r   r   rc     s&    

zMetadata.writec             C   s   | j r| j | nt| jdg }d }x"|D ]}d|kr,d|kr,|}P q,W |d krhd|i}|d| n t|d t|B }t||d< d S )Nr   r   r   r   r   )r   r   r   r   insertrg   r  )r^   r   r   alwaysentryZrsetr   r   r   r     s    
zMetadata.add_requirementsc             C   s*   | j pd}| jpd}d| jj| j||f S )Nz	(no name)z
no versionz<%s %s %s (%s)>)rJ   r/   r   r   rt   )r^   rJ   r/   r   r   r   r     s    

zMetadata.__repr__)NNNrT   )N)NN)NNFT)/r   r   r   r   recompileZMETADATA_VERSION_MATCHERIZNAME_MATCHERr   ZVERSION_MATCHERZSUMMARY_MATCHERr   r   r   r  r  r   r   	__slots__rb   rg   r   r   Z	none_listdictZ	none_dictr   r   r   r   propertyr   r   setterr   r   r   r   r   r   r   r  r  rc   r   r   r   r   r   r   r   Y  s   

 
,+

'
*	2
)F)Gr   
__future__r   r   r  r   r   r   r  r  r   r   compatr   r   r	   r2   r
   utilr   r   r/   r   r   	getLoggerr   r9   r   r   r   r   __all__r   r   r  rv   ru   r*   r+   r<   r,   r=   r.   r?   r-   r>   rg   rn   r\   ZEXTRA_REr0   rD   ro   r6   r   r   r   r   rp   r   rq   r   r   r   rP   rR   rS   ZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMEr   r   r   r   r   <module>	   sv   










I

  j