a
    $lJhD                     @   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g d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-d!Z.e,e. Z/e0 Z1e12e% e12e& e12e( e12e* e12e, e12e/ e"d"Z3d#d$ Z4d%d& Z5d'd( e1D Z6d)d( e67 D Z8d*Z9d+Z:d,Z;d-Z<d.Z=d/Z>d0Z?e@ ZAe"d1ZBd<d3d4ZCG d5d6 d6e@ZDd7ZEd8ZFd9ZGG d:d; d;e@ZHdS )=zzImplementation of the Metadata for Python packages PEPs.

Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and 2.2).
    )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   N/var/www/shaz/venv/lib/python3.9/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.Nr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS ) MetadataUnrecognizedVersionErrorz Unknown metadata version number.Nr   r   r   r   r   r   #   s   r   c                   @   s   e Zd ZdZdS )MetadataInvalidErrorzA metadata value is invalidNr   r   r   r   r   r   '   s   r   )MetadataPKG_INFO_ENCODINGPKG_INFO_PREFERRED_VERSIONutf-81.1z

       \|	
        )Metadata-VersionNameVersionPlatformSummaryDescriptionKeywords	Home-pageAuthorAuthor-emailLicense)r    r!   r"   r#   Supported-Platformr$   r%   r&   r'   r(   r)   r*   
ClassifierDownload-URL	ObsoletesProvidesRequires)r.   r/   r0   r,   r-   )r    r!   r"   r#   r+   r$   r%   r&   r'   r(   r)   
MaintainerMaintainer-emailr*   r,   r-   Obsoletes-DistProject-URLProvides-DistRequires-DistRequires-PythonRequires-External)r5   r6   r7   r3   r8   r1   r2   r4   )r    r!   r"   r#   r+   r$   r%   r&   r'   r(   r)   r1   r2   r*   r,   r-   r3   r4   r5   r6   r7   r8   Private-VersionObsoleted-BySetup-Requires-Dist	ExtensionProvides-Extra)r9   r=   r:   r;   r<   )Description-Content-Typer0   r/   r.   )r>   )ZDynamicLicense-Filez"extra\s*==\s*("([^"]+)"|'([^']+)')c                 C   sl   | dkrt S | dkrtS | dkr$tS | dv rBttdd tD  S | dkrTtdn| d	kr`tS t| d S )
N1.0r   1.2)1.32.1c                 s   s   | ]}|t vr|V  qd S N)_345_FIELDS).0fr   r   r   	<genexpr>p       z%_version2fieldlist.<locals>.<genexpr>2.0z+Metadata 2.0 is withdrawn and not supported2.2)_241_FIELDS_314_FIELDSrE   tuple_566_FIELDS
ValueError_643_FIELDSr   )versionr   r   r   _version2fieldlistg   s    
rS   c           	      C   s  dd }dd |   D }g d}|D ]}|tvrPd|v rP|d td| |tvrvd|v rv|d td	| |tvrd
|v r|d
 td| |tvrd|v r|d td| |tvrd|v r|dkr|d td| |tvr&d|v r&|d td| q&t	|dkr.|d S t	|dkrPtd|  t
dd|v ob||t}d
|v ov||t}d|v o||t}d|v o||t}t|t| t| t| dkrt
d|s|s|s|st|v rtS |rdS |rd
S |rdS dS )z5Detect the best version depending on the fields used.c                    s   t  fdd|D S )Nc                 3   s   | ]}| v V  qd S rD   r   )rF   markerkeysr   r   rH   }   rI   z5_best_version.<locals>._has_marker.<locals>.<genexpr>)any)rV   markersr   rU   r   _has_marker|   s    z"_best_version.<locals>._has_markerc                 S   s"   g | ]\}}|g d dfvr|qS )UNKNOWNNr   )rF   keyvaluer   r   r   
<listcomp>   rI   z!_best_version.<locals>.<listcomp>)r@   r   rA   rB   rC   rK   r@   zRemoved 1.0 due to %sr   zRemoved 1.1 due to %srA   zRemoved 1.2 due to %srB   zRemoved 1.3 due to %srC   r%   zRemoved 2.1 due to %srK   zRemoved 2.2 due to %sr   r   z)Out of options - unknown metadata set: %szUnknown metadata setz,You used incompatible 1.1/1.2/2.1/2.2 fields)itemsrL   removeloggerdebugrM   rE   rO   rQ   lenr   _314_MARKERS_345_MARKERS_566_MARKERS_643_MARKERSintr   )	fieldsrY   rV   Zpossible_versionsr[   Zis_1_1Zis_1_2Zis_2_1Zis_2_2r   r   r   _best_versiony   sX    





&
ri   c                 C   s   i | ]}|  d d|qS )-_)lowerreplace)rF   namer   r   r   
<dictcomp>   rI   ro   c                 C   s   i | ]\}}||qS r   r   )rF   attrfieldr   r   r   ro      rI   )r6   r3   r5   )r7   )r"   )r#   r,   r.   r0   r/   r3   r5   r6   r8   r4   r+   r;   r=   r<   r?   )r4   )r&   )r(   r1   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.rj    .z%s-%s)	_FILESAFEsubrm   )rn   rR   Zfor_filenamer   r   r   _get_name_and_version   s    rv   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 urH| | n.|d ur\| | n|d urv| | | 	  d S )N   'path, fileobj and mapping are exclusive)
count	TypeError_fieldsZrequires_filesZ_dependenciesschemeread	read_fileupdateset_metadata_version)selfpathfileobjmappingr~   r   r   r   __init__   s    
zLegacyMetadata.__init__c                 C   s   t | j| jd< d S Nr    )ri   r}   r   r   r   r   r      s    z#LegacyMetadata.set_metadata_versionc                 C   s   | d||f  d S )Nz%s: %s
)write)r   r   rn   r\   r   r   r   _write_field  s    zLegacyMetadata._write_fieldc                 C   s
   |  |S rD   )getr   rn   r   r   r   __getitem__  s    zLegacyMetadata.__getitem__c                 C   s   |  ||S rD   )set)r   rn   r\   r   r   r   __setitem__	  s    zLegacyMetadata.__setitem__c                 C   s6   |  |}z| j|= W n ty0   t|Y n0 d S rD   )_convert_namer}   KeyError)r   rn   
field_namer   r   r   __delitem__  s
    
zLegacyMetadata.__delitem__c                 C   s   || j v p| || j v S rD   )r}   r   r   r   r   r   __contains__  s    zLegacyMetadata.__contains__c                 C   s(   |t v r|S |dd }t||S )Nrj   rk   )_ALL_FIELDSrm   rl   _ATTR2FIELDr   r   r   r   r   r     s    zLegacyMetadata._convert_namec                 C   s   |t v s|tv rg S dS )NrZ   )_LISTFIELDS_ELEMENTSFIELDr   r   r   r   _default_value  s    zLegacyMetadata._default_valuec                 C   s&   | j dv rtd|S td|S d S )Nr@   r   
)metadata_version_LINE_PREFIX_PRE_1_2ru   _LINE_PREFIX_1_2r   r\   r   r   r   _remove_line_prefix!  s    
z"LegacyMetadata._remove_line_prefixc                 C   s   |t v r| | S t|d S rD   )r   AttributeErrorr   r   r   r   __getattr__'  s    zLegacyMetadata.__getattr__Fc                 C   s   t | d | d |S )zz
        Return the distribution name with version.

        If filesafe is true, return a filename-escaped form.
        r!   r"   )rv   )r   Zfilesafer   r   r   get_fullname0  s    zLegacyMetadata.get_fullnamec                 C   s   |  |}|tv S )z+return True if name is a valid metadata key)r   r   r   r   r   r   is_field8  s    
zLegacyMetadata.is_fieldc                 C   s   |  |}|tv S rD   )r   r   r   r   r   r   is_multi_field=  s    
zLegacyMetadata.is_multi_fieldc                 C   s6   t j|ddd}z| | W |  n
|  0 dS )z*Read the metadata values from a file path.rr   encodingN)codecsopenr   close)r   filepathfpr   r   r   r   A  s    zLegacyMetadata.readc                 C   s   t |}|d | jd< tD ]p}||vr(q|tv rf||}|tv rX|durXdd |D }| || q|| }|dur|dkr| || q| }|r|n| d | d< dS )z,Read the metadata values from a file object.zmetadata-versionr    Nc                 S   s   g | ]}t |d qS ,)rN   splitrF   r\   r   r   r   r]   V  rI   z,LegacyMetadata.read_file.<locals>.<listcomp>rZ   r%   )r   r}   r   r   get_all_LISTTUPLEFIELDSr   get_payload)r   Zfileobmsgrq   valuesr\   bodyr   r   r   r   I  s    
zLegacyMetadata.read_filec                 C   s8   t j|ddd}z| || W |  n
|  0 dS )z&Write the metadata fields to filepath.wr   r   N)r   r   
write_filer   )r   r   skip_unknownr   r   r   r   r   e  s    zLegacyMetadata.writec                 C   s   |    t| d D ]}| |}|r8|dg dgfv r8q|tv rV| ||d| q|tvr|dkr| jdv r~|dd}n|dd}|g}|t	v rd	d
 |D }|D ]}| ||| qqdS )z0Write the PKG-INFO format data to a file object.r    rZ   r   r%   r   r   r   z	
       |c                 S   s   g | ]}d  |qS r   joinr   r   r   r   r]     rI   z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r   rS   r   r   r   r   r   r   rm   r   )r   
fileobjectr   rq   r   r\   r   r   r   r   m  s$    

zLegacyMetadata.write_filec                    sv    fdd}|sn@t |dr:| D ]}||||  q$n|D ]\}}||| q>|rr| D ]\}}||| q^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 v r|r  | | d S rD   )r   r   r   )r[   r\   r   r   r   _set  s    z#LegacyMetadata.update.<locals>._setrV   N)hasattrrV   r^   )r   otherkwargsr   kvr   r   r   r     s    
zLegacyMetadata.updatec                 C   sh  |  |}|tv s|dkrNt|ttfsNt|trHdd |dD }qzg }n,|tv rzt|ttfszt|trv|g}ng }t	t
jr<| d }t| j}|tv r|dur|D ](}||dd std	||| qnb|tv r|dur||s<td
||| n0|tv r<|dur<||s<td
||| |tv rZ|dkrZ| |}|| j|< dS )z"Control then set a metadata field.r#   c                 S   s   g | ]}|  qS r   )strip)rF   r   r   r   r   r]     rI   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%   )r   r   
isinstancelistrN   r   r   r   r`   isEnabledForloggingWARNINGr   r~   _PREDICATE_FIELDSis_valid_matcherwarning_VERSIONS_FIELDSis_valid_constraint_list_VERSION_FIELDSis_valid_version_UNICODEFIELDSr   r}   )r   rn   r\   project_namer~   r   r   r   r   r     s4    






zLegacyMetadata.setc                 C   s   |  |}|| jvr*|tu r&| |}|S |tv r@| j| }|S |tv r| j| }|du r^g S g }|D ].}|tvr~|| qf||d |d f qf|S |tv r| j| }t	|t
r|dS | j| S )zGet a metadata field.Nr   r   r   )r   r}   _MISSINGr   r   r   r   appendr   r   r   r   )r   rn   rx   r\   resvalr   r   r   r     s.    







zLegacyMetadata.getc                    s   |    g g  }}dD ]}|| vr|| q|rP|g krPdd| }t|dD ]}|| vrT|| qT| d dkr||fS t| j  fdd}t|ft jft	 j
ffD ]@\}}|D ]2}	| |	d	}
|
d	ur||
s|d
|	|
f  qq||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: %s, )r'   r(   r    rA   c                    s(   | D ]}  |dd s dS qdS )Nr   r   FT)r   r   )r\   r   r~   r   r   are_valid_constraints   s    z3LegacyMetadata.check.<locals>.are_valid_constraintsNzWrong value for '%s': %s)r   r   r   r   r   r~   r   r   r   r   r   r   )r   strictmissingwarningsrp   r   r   rh   
controllerrq   r\   r   r   r   check  s2    


zLegacyMetadata.checkc                 C   sh   |    t| d }i }|D ]F}|r.|| jv rt| }|dkrL| | ||< qdd | | D ||< q|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.
        r    project_urlc                 S   s   g | ]}d  |qS r   r   )rF   ur   r   r   r]   #  rI   z)LegacyMetadata.todict.<locals>.<listcomp>)r   rS   r}   _FIELD2ATTR)r   Zskip_missingrh   datar   r[   r   r   r   todict  s    zLegacyMetadata.todictc                 C   s8   | d dkr$dD ]}|| v r| |= q| d  |7  < d S )Nr    r   )r.   r0   r/   r6   r   )r   requirementsrq   r   r   r   add_requirements'  s
    zLegacyMetadata.add_requirementsc                 C   s   t t| d S r   )r   rS   r   r   r   r   rV   2  s    zLegacyMetadata.keysc                 c   s   |   D ]
}|V  qd S rD   rU   )r   r[   r   r   r   __iter__5  s    zLegacyMetadata.__iter__c                    s    fdd   D S )Nc                    s   g | ]} | qS r   r   rF   r[   r   r   r   r]   :  rI   z)LegacyMetadata.values.<locals>.<listcomp>rU   r   r   r   r   r   9  s    zLegacyMetadata.valuesc                    s    fdd   D S )Nc                    s   g | ]}| | fqS r   r   r   r   r   r   r]   =  rI   z(LegacyMetadata.items.<locals>.<listcomp>rU   r   r   r   r   r^   <  s    zLegacyMetadata.itemsc                 C   s   d| j j| j| jf S )Nz
<%s %s %s>)	__class__r   rn   rR   r   r   r   r   __repr__?  s    zLegacyMetadata.__repr__)NNNrx   )F)F)F)N)F)F)"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   rV   r   r   r^   r   r   r   r   r   rw      s<   
	



&
*
rw   zpydist.jsonzmetadata.jsonMETADATAc                   @   s  e Zd ZdZedZedej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e	d	fdZdZdId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dJddZdd  Ze d!d" Z!e d#d$ Z"e"j#d%d$ Z"dKd&d'Z$e d(d) Z%e d*d+ Z&e&j#d,d+ Z&d-d. Z'd/d0 Z(d1d2 Z)d3d4 Z*d5d6d7d8d9d:d;d<d=dd>
Z+d?d@ Z,dLdCdDZ-dEdF Z.dGdH Z/dS )Mr   z
    The metadata of a release. This implementation uses 2.1
    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^[A-Z]([0-9A-Z-]*[0-9A-Z])?$z	.{1,2047}rJ   zdistlib (%s)r   )legacy)rn   rR   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)r   rn   rR   r   Zdynamic)_legacy_datar~   Nrx   c                 C   s@  |||g d dk rtdd | _d | _|| _|d urxz| || || _W n( tyt   t||d| _|   Y n0 nd }|rt	|d}|
 }W d    q1 s0    Y  n|r|
 }|d u r| j| jd| _nbt|ts|d}zt|| _| | j| W n. ty:   tt||d| _|   Y n0 d S )Nry   rz   )r   r~   rbr   	generatorr   )r   r~   )r{   r|   r   r   r~   _validate_mappingr   rw   validater   r   METADATA_VERSION	GENERATORr   r	   decodejsonloadsrP   r   )r   r   r   r   r~   r   rG   r   r   r   r   u  s<    
(


zMetadata.__init__)rn   rR   licensekeywordsr   r6   r;   r=   r,   )r-   N)r    N)run_requiresbuild_requiresdev_requiresZtest_requiresmeta_requiresextrasmodules
namespacesexportscommandsclassifiers
source_urlr   c           
      C   sX  t | d}t | d}||v r|| \}}| jr^|d u rP|d u rHd n| }n| j|}n|d u rjd n| }|dvr| j||}nt  }|}| jd}	|	r
|dkr|	d|}nP|dkr|	d}	|	r|	||}n,|	d	}	|	s| jd	}	|	r
|	||}||u rT|}n:||vr2t | |}n"| jrH| j|}n| j|}|S )
Ncommon_keysmapped_keysr  r  r  r  r  
extensionsr  python.commandsr  python.detailspython.exports)object__getattribute__r   r   r   )
r   r[   commonmappedlkmakerresultr\   sentineldr   r   r   r    sD    




zMetadata.__getattribute__c                 C   sH   || j v rD| j | \}}|p | j|vrD||}|sDtd||f d S )Nz.'%s' is an invalid value for the '%s' property)SYNTAX_VALIDATORSr~   matchr   )r   r[   r\   r~   pattern
exclusionsmr   r   r   _validate_value  s    

zMetadata._validate_valuec                 C   s*  |  || t| d}t| d}||v r|| \}}| jrV|d u rJt|| j|< nf|dvrj|| j|< nR| jdi }|dkr||d< n2|dkr|di }|||< n|d	i }|||< nh||v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  r   )r  r  r  r   NotImplementedErrorr   
setdefault__setattr__r   r   r   r   )r   r[   r\   r  r  r  rk   r  r   r   r   r     s<    




zMetadata.__setattr__c                 C   s   t | j| jdS NT)rv   rn   rR   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 }||vrB|| |S )Nr5   providesz%s (%s))r   r   r  rn   rR   r   )r   r  sr   r   r   r#    s    
zMetadata.providesc                 C   s    | j r|| j d< n
|| jd< d S )Nr5   r#  )r   r   r   r   r   r   r#    s    c           
      C   s   | j r|}ng }t|pg | j}|D ]d}d|vr>d|vr>d}n8d|vrLd}n|d|v }|rv|d}|rvt||}|r$||d  q$dD ]F}d| }	|	|v r||	 | jd| g }|| j|||d q|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  r   r
   extendr_   r   get_requirements)
r   reqtsr  r+  r  r  includerT   r[   er   r   r   r-  &  s.    	


zMetadata.get_requirementsc                 C   s   | j r|  S | jS rD   )r   _from_legacyr   r   r   r   r   
dictionaryO  s    zMetadata.dictionaryc                 C   s   | j rtnt| j| jS d S rD   )r   r  r   r   DEPENDENCY_KEYSr   r   r   r   dependenciesU  s    zMetadata.dependenciesc                 C   s   | j rtn| j| d S rD   )r   r  r   r   r   r   r   r   r4  \  s    c           	      C   s   | d| jkrt g }| j D ]"\}}||vr$||vr$|| q$|rbdd| }t|| D ]\}}| ||| qjd S )Nr   zMissing metadata items: %sr   )	r   r   r   MANDATORY_KEYSr^   r   r   r   r  )	r   r   r~   r   r[   r  r   r   r   r   r   r   r   c  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   r`   r   r   r   r~   )r   r   r   r   r   r   r   q  s
    zMetadata.validatec                 C   s(   | j r| j dS t| j| j}|S d S r!  )r   r   r   r   
INDEX_KEYS)r   r  r   r   r   r   y  s    zMetadata.todictc                 C   s   | j r| jrJ | j| jd}| j d}dD ]*}||v r.|dkrHd}n|}|| ||< q.|dg }|dgkrtg }||d< d	}|D ]*\}}||v r|| rd
|| ig||< q| j|d< |S )Nr   T)rn   rR   r   r   description
classifierr8  r  r&    r   ))Zrequires_distr   )Zsetup_requires_distr   r'  r#  )r   r   r   r   r   r   r#  )r   r  Zlmdr   nkkwrV   okr   r   r   r1    s*    

zMetadata._from_legacyr!   r"   r*   r$   r%   r'   r(   r)   r-   )
rn   rR   )r  r  r   r   r7  )r  python.projectproject_urlsZHome)r  r=  contactsr   rn   )r  r=  r?  r   emailr  )r  r  r  c                 C   s   dd }| j r| jrJ t }| j }| j D ]t\}}t|tsV||v r|| ||< q.|}d}|D ]2}z|| }W qb ttfy   d}Y  qY qb0 qb|r.|||< q.|| j	| j
 }	|| j| j }
| jrt| j|d< t|	|d< t|
|d< |S )Nc                 S   s   t  }| D ]|}|d}|d}|d }|D ]V}|sF|sF|| q.d}|rVd| }|rp|rld||f }n|}|d||f q.q
|S )Nr%  r&  r'  r9  zextra == "%s"z(%s) and %sr   )r   r   addr   )entriesr.  r0  r%  r+  Zrlistr   rT   r   r   r   process_entries  s"    

z,Metadata._to_legacy.<locals>.process_entriesTFr=   r6   r;   )r   r   rw   LEGACY_MAPPINGr^   r   rN   r   
IndexErrorr   r   r   r   r  sorted)r   rC  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 nr| jrp|  }n| j}|rt	j
||dddd nBt|dd$}t	j
||dddd W d    n1 s0    Y  d S )	Nr   z)Exactly one of path and fileobj is needed)r   Try   )ensure_asciiindent	sort_keysr   r   )r{   rP   r   r   rH  r   r   r1  r   r   dumpr   r   )r   r   r   r   r   Z	legacy_mdr  rG   r   r   r   r     s"    
zMetadata.writec                 C   s   | j r| j | nr| jdg }d }|D ]}d|vr*d|vr*|} qHq*|d u rfd|i}|d| n t|d t|B }t||d< d S )Nr   r&  r%  r'  r   )r   r   r   r  insertr   rF  )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)>)rn   rR   r   r   r   )r   rn   rR   r   r   r   r     s    

zMetadata.__repr__)NNNrx   )N)NN)NNFT)0r   r   r   r   recompileZMETADATA_VERSION_MATCHERIZNAME_MATCHERZFIELDNAME_MATCHERr   ZVERSION_MATCHERZSUMMARY_MATCHERr   r   r   r5  r6  r3  r  	__slots__r   r   r  r   Z	none_listdictZ	none_dictr	  r  r  r   propertyr"  r#  setterr-  r2  r4  r   r   r   r1  rD  rH  r   r   r   r   r   r   r   r   H  s   


+*
	&




)


3
r   )F)Ir   
__future__r   r   r@  r   r   r   rP  r9  r   r   compatr   r   r	   rX   r
   utilr   r   rR   r   r   	getLoggerr   r`   r   r   r   r   __all__r   r   rQ  r   r   rL   rM   rc   rE   rd   Z_426_FIELDSZ_426_MARKERSrO   re   rf   rQ   r   r   r   ZEXTRA_RErS   ri   r   r^   r   r   r   r   r   r   r   r   r  r   rt   rv   rw   ZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMEr   r   r   r   r   <module>   sz   









J

  a