£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
U
    .e*                     @   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)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFZ4dGZ5dHZ6dIZ7dJZ8dKZ9dLZ:dMZ;e< Z=e"dNZ>dXdPdQZ?G dRdS dSe<Z@dTZAdUZBdVZCG dWd de<ZDdS )YzImplementation of the Metadata for Python packages PEPs.

Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental).
    )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   @/usr/lib/python3.8/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>   z"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 )N1.0r   1.2)1.32.12.0)_241_FIELDS_314_FIELDS_345_FIELDS_566_FIELDS_426_FIELDSr   )versionr   r   r   _version2fieldlistp   s    rJ   c           
      C   sB  dd }g }|   D ]"\}}|g ddfkr,q|| qddddd	d
g}|D ]}|tkrvd|krv|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rLd	|krL|d	 td| qLt
|dkrZ|d S t
|dkr|t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rtd|s |s |s |	s t|kr tS |r*dS |r4dS |r>d
S d	S )z5Detect the best version depending on the fields used.c                 S   s   |D ]}|| kr dS qdS )NTFr   )keysmarkersmarkerr   r   r   _has_marker   s    z"_best_version.<locals>._has_markerUNKNOWNNr?   r   r@   rA   rC   rB   z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appendrD   removeloggerdebugrE   rF   rG   rH   lenr   _314_MARKERS_345_MARKERS_566_MARKERS_426_MARKERSintr   )
fieldsrN   rK   keyvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_1Zis_2_0r   r   r   _best_version~   s`    






&
r^   r    r!   r"   r#   r+   r$   r%   r&   r'   r(   r)   r1   r2   r*   r,   r-   r3   r5   r6   r;   r7   r8   r0   r/   r.   r4   r9   r:   r<   r=   )metadata_versionnamerI   platformZsupported_platformsummarydescriptionkeywords	home_pageauthorauthor_email
maintainermaintainer_emaillicense
classifierdownload_urlobsoletes_distprovides_distrequires_distsetup_requires_distrequires_pythonrequires_externalrequiresprovides	obsoletesproject_urlZprivate_versionZobsoleted_by	extensionZprovides_extra)r6   r3   r5   )r7   )r"   )r#   r,   r.   r0   r/   r3   r5   r6   r8   r4   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.- .z%s-%s)	_FILESAFEsubreplace)r`   rI   Zfor_filenamer   r   r   _get_name_and_version   s    r~   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LegacyMetadataaa  The legacy metadata of a release.

    Supports versions 1.0, 1.1 and 1.2 (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   '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    )r^   r   r   r   r   r   r   "  s    z#LegacyMetadata.set_metadata_versionc                 C   s   | d||f  d S )Nz%s: %s
)write)r   r   r`   r]   r   r   r   _write_field%  s    zLegacyMetadata._write_fieldc                 C   s
   |  |S N)getr   r`   r   r   r   __getitem__(  s    zLegacyMetadata.__getitem__c                 C   s   |  ||S r   )set)r   r`   r]   r   r   r   __setitem__+  s    zLegacyMetadata.__setitem__c                 C   s8   |  |}z| j|= W n tk
r2   t|Y nX d S r   )_convert_namer   KeyError)r   r`   
field_namer   r   r   __delitem__.  s
    
zLegacyMetadata.__delitem__c                 C   s   || j kp| || j kS r   )r   r   r   r   r   r   __contains__5  s    
zLegacyMetadata.__contains__c                 C   s(   |t kr|S |dd }t||S )Nrx   _)_ALL_FIELDSr}   lower_ATTR2FIELDr   r   r   r   r   r   9  s    zLegacyMetadata._convert_namec                 C   s   |t ks|tkrg S dS )NrO   )_LISTFIELDS_ELEMENTSFIELDr   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r?   r   
)r_   _LINE_PREFIX_PRE_1_2r|   _LINE_PREFIX_1_2r   r]   r   r   r   _remove_line_prefixD  s    
z"LegacyMetadata._remove_line_prefixc                 C   s   |t kr| | S t|d S r   )r   AttributeErrorr   r   r   r   __getattr__J  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"   )r~   )r   Zfilesafer   r   r   get_fullnameU  s    zLegacyMetadata.get_fullnamec                 C   s   |  |}|tkS )z+return True if name is a valid metadata key)r   r   r   r   r   r   is_field[  s    
zLegacyMetadata.is_fieldc                 C   s   |  |}|tkS r   )r   r   r   r   r   r   is_multi_field`  s    
zLegacyMetadata.is_multi_fieldc                 C   s.   t j|ddd}z| | W 5 |  X dS )z*Read the metadata values from a file path.rr   encodingN)codecsopencloser   )r   filepathfpr   r   r   r   d  s    zLegacyMetadata.readc                 C   s   t |}|d | jd< tD ]p}||kr(q|tkrf||}|tkrX|dk	rXdd |D }| || q|| }|dk	r|dkr| || qdS )z,Read the metadata values from a file object.zmetadata-versionr    Nc                 S   s   g | ]}t |d qS ,)tuplesplit.0r]   r   r   r   
<listcomp>y  s     z,LegacyMetadata.read_file.<locals>.<listcomp>rO   )r   r   r   r   Zget_all_LISTTUPLEFIELDSr   )r   Zfileobmsgfieldvaluesr]   r   r   r   r   l  s    
zLegacyMetadata.read_filec                 C   s0   t j|ddd}z| || W 5 |  X dS )z&Write the metadata fields to filepath.wr   r   N)r   r   r   
write_file)r   r   skip_unknownr   r   r   r   r     s    zLegacyMetadata.writec                 C   s   |    t| d D ]}| |}|r8|dg dgfkr8q|tkrV| ||d| q|tkr|dkr| jdkr~|dd}n|dd}|g}|t	krd	d
 |D }|D ]}| ||| qqdS )z0Write the PKG-INFO format data to a file object.r    rO   r   r%   r   r   r   z	
       |c                 S   s   g | ]}d  |qS r   joinr   r   r   r   r     s     z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r   rJ   r   r   r   r   r   r_   r}   r   )r   Z
fileobjectr   r   r   r]   r   r   r   r     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 kr|r  | | d S r   )r   r   r   )r\   r]   r   r   r   _set  s    z#LegacyMetadata.update.<locals>._setrK   N)hasattrrK   rP   )r   otherkwargsr   kvr   r   r   r     s    

zLegacyMetadata.updatec                 C   sh  |  |}|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	r|D ](}||dd std	||| qnb|tkr|dk	r||s<td
||| n0|tkr<|dk	r<||s<td
||| |tkrZ|dkrZ| |}|| j|< dS )z"Control then set a metadata field.r#   c                 S   s   g | ]}|  qS r   )strip)r   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%   )r   r   
isinstancelistr   r   r   r   rS   ZisEnabledForloggingZWARNINGr   r   _PREDICATE_FIELDSis_valid_matcherwarning_VERSIONS_FIELDSis_valid_constraint_list_VERSION_FIELDSis_valid_version_UNICODEFIELDSr   r   )r   r`   r]   Zproject_namer   r   r   r   r   r     sV    



      


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 }|D ].}|tkr~|| qf||d |d f qf|S |tkr| j| }t	|t
r|dS | j| S )zGet a metadata field.Nr   r   r   )r   r   _MISSINGr   r   r   r   rQ   r   r   r   r   )r   r`   r   r]   resvalr   r   r   r     s.    







zLegacyMetadata.getc                    s   |    g g  }}dD ]}|| kr|| q|rP|g krPdd| }t|dD ]}|| k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	k	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    r@   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   rQ   r   r   r   r   r   r   r   r   r   r   )r   strictmissingwarningsattrr   r   r[   Z
controllerr   r]   r   r   r   check	  s8    

zLegacyMetadata.checkc                 C   s   |    d}i }|D ]"\}}|r*|| jkr| | ||< q| d dkrd}|D ]B\}}|rb|| jkrL|dkrx| | ||< qLdd | | D ||< qLn8| d dkrd	}|D ]"\}}|r|| jkr| | ||< q|S )
zReturn 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).
        ))r_   r    )r`   r!   )rI   r"   )rb   r$   )re   r'   )rf   r(   )rg   r)   )rj   r*   )rc   r%   )rd   r&   )ra   r#   )classifiersr,   )rl   r-   r    r@   ))ro   r6   )rq   r7   )rr   r8   )rn   r5   )rm   r3   )rv   r4   )rh   r1   )ri   r2   rv   c                 S   s   g | ]}d  |qS r   r   )r   ur   r   r   r   b  s     z)LegacyMetadata.todict.<locals>.<listcomp>r   ))rt   r/   )rs   r0   )ru   r.   )r   r   )r   Zskip_missingZmapping_1_0datar\   r   Zmapping_1_2Zmapping_1_1r   r   r   todict5  s&    
zLegacyMetadata.todictc                 C   s8   | d dkr$dD ]}|| kr| |= q| d  |7  < d S )Nr    r   )r.   r0   r/   r6   r   )r   requirementsr   r   r   r   add_requirementsp  s
    zLegacyMetadata.add_requirementsc                 C   s   t t| d S r   )r   rJ   r   r   r   r   rK   {  s    zLegacyMetadata.keysc                 c   s   |   D ]
}|V  qd S r   rK   )r   r\   r   r   r   __iter__~  s    zLegacyMetadata.__iter__c                    s    fdd   D S )Nc                    s   g | ]} | qS r   r   r   r\   r   r   r   r     s     z)LegacyMetadata.values.<locals>.<listcomp>r   r   r   r   r   r     s    zLegacyMetadata.valuesc                    s    fdd   D S )Nc                    s   g | ]}| | fqS r   r   r   r   r   r   r     s     z(LegacyMetadata.items.<locals>.<listcomp>r   r   r   r   r   rP     s    zLegacyMetadata.itemsc                 C   s   d| j j| j| jf S )Nz
<%s %s %s>)	__class__r   r`   rI   r   r   r   r   __repr__  s    zLegacyMetadata.__repr__)NNNr   )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   rK   r   r   rP   r   r   r   r   r   r     s@     




,
,
;r   zpydist.jsonzmetadata.jsonZ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dDd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dEddZdd Zed d! Z ed"d# Z!e!j"d$d# Z!dFd%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)d4d5d6d7d8dd9Z*d:d; Z+dGd>d?Z,d@dA Z-dBdC Z.dS )Hr   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}rC   zdistlib (%s)r   )legacy)r`   rI   rb   zqname 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_   r`   rI   rb   )_legacy_datar   Nr   c              	   C   s0  |||g d dk rtdd | _d | _|| _|d k	rzz| || || _W n* tk
rv   t||d| _|   Y nX nd }|rt	|d}|
 }W 5 Q R X n|r|
 }|d kr| j| jd| _ndt|ts|d}zt|| _| | j| W n0 tk
r*   tt||d| _|   Y nX d S )Nr   r   )r   r   rbr_   	generatorr   )r   r   )r   r   r   r   r   _validate_mappingr   r   validater   r   METADATA_VERSION	GENERATORr   r	   decodejsonloads
ValueErrorr   )r   r   r   r   r   r   fr   r   r   r     s@    



zMetadata.__init__)r`   rI   rj   rd   rb   r6   r;   r=   r,   )r-   N)r    N)run_requiresbuild_requiresdev_requiresZtest_requiresmeta_requiresextrasmodules
namespacesexportscommandsr   Z
source_urlr_   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	  python.commandsr   python.detailspython.exports)object__getattribute__r   r   r   )
r   r\   commonmappedlkZmakerresultr]   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_VALIDATORSr   matchr   )r   r\   r]   r   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  rd   )r  r  r  r   NotImplementedErrorr   
setdefault__setattr__r   r   r   r   )r   r\   r]   r  r  r  r   r  r   r   r   r!  5  s<    




zMetadata.__setattr__c                 C   s   t | j| jdS NT)r~   r`   rI   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 )Nr5   rt   z%s (%s))r   r   r   r`   rI   rQ   )r   r  sr   r   r   rt   `  s    
zMetadata.providesc                 C   s    | j r|| j d< n
|| jd< d S )Nr5   rt   )r   r   r   r   r   r   rt   k  s    c           
      C   s   | j r|}ng }t|pg | j}|D ]d}d|kr>d|kr>d}n8d|krLd}n|d|k}|rv|d}|rvt||}|r$||d  q$dD ]F}d| }	|	|k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environmentTrs   )ZbuildZdevZtestz:%s:z%s_requires)r  env)	r   r   r  r   r
   extendrR   r   get_requirements)
r   reqtsr  r'  r  r  ZincluderM   r\   er   r   r   r)  r  s2    	



zMetadata.get_requirementsc                 C   s   | j r|  S | jS r   )r   _from_legacyr   r   r   r   r   
dictionary  s    zMetadata.dictionaryc                 C   s   | j rtnt| j| jS d S r   )r   r  r   r   DEPENDENCY_KEYSr   r   r   r   dependencies  s    zMetadata.dependenciesc                 C   s   | j rtn| j| d S r   )r   r  r   r   r   r   r   r   r/    s    c           	      C   s   | d| jkrt g }| j D ]"\}}||kr$||kr$|| q$|rbdd| }t|| D ]\}}| ||| qjd S )Nr_   zMissing metadata items: %sr   )	r   r   r   MANDATORY_KEYSrP   rQ   r   r   r  )	r   r   r   r   r\   r  r   r   r   r   r   r   r     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   rS   r   r   r   r   )r   r   r   r   r   r   r     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     s    zMetadata.todictc           
      C   s   | j r| jrt| j| jd}| j d}dD ]*}||kr.|dkrHd}n|}|| ||< q.|dg }|dgkrtg }||d< d	}|D ]*\}}||kr|| rd
|| ig||< q| j|d< i }i }	|S )Nr   T)r`   rI   rj   rb   rc   rk   rk   r   r&    rd   ))ro   r  )rp   r  rs   rt   )r   r   AssertionErrorr   r   r   r   rt   )
r   r  Zlmdr   nkkwrK   okrf   rh   r   r   r   r,    s.    

zMetadata._from_legacyr!   r"   r*   r$   r%   )r`   rI   rj   rb   rc   r   c                 C   s   dd }| j r| jrtt }| j }| j D ]\}}||k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&  rs   r2  zextra == "%s"z(%s) and %sr   )r   r   addr   )entriesr*  r+  r%  r'  Zrlistr   rM   r   r   r   process_entries  s"    

z,Metadata._to_legacy.<locals>.process_entriesr=   r6   r;   )r   r   r3  r   LEGACY_MAPPINGrP   r  r  r  r  r  sorted)r   r9  r  Znmdr4  r6  Zr1Zr2r   r   r   
_to_legacy  s    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 5 Q R X d S )	Nr   z)Exactly one of path and fileobj is needed)r   Tr   )Zensure_asciiindentZ	sort_keysr   r   )r   r   r   r   r<  r   r   r,  r   r   dumpr   r   )r   r   r   r   r   Z	legacy_mdr  r   r   r   r   r     s*    
zMetadata.writec                 C   s   | j r| j | nr| jdg }d }|D ]}d|kr*d|kr*|} qHq*|d krfd|i}|d| n t|d t|B }t||d< d S )Nr  r&  r%  rs   r   )r   r   r   r   insertr   r;  )r   r   r  alwaysentryZrsetr   r   r   r   3  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)>)r`   rI   r   r   r_   )r   r`   rI   r   r   r   r   D  s    

  zMetadata.__repr__)NNNr   )N)NN)NNFT)/r   r   r   r   recompileZMETADATA_VERSION_MATCHERIZNAME_MATCHERr   ZVERSION_MATCHERZSUMMARY_MATCHERr   r   r   r0  r1  r.  r  	__slots__r   r   r
  r   Z	none_listdictZ	none_dictr  r  r  r!  propertyr#  rt   setterr)  r-  r/  r   r   r   r,  r:  r<  r   r   r   r   r   r   r   r     s   

  
-+

'




*


		%
)F)Er   Z
__future__r   r   Zemailr   r   r   rB  r2  r   r   compatr   r   r	   rL   r
   utilr   r   rI   r   r   Z	getLoggerr   rS   r   r   r   r   __all__r   r   rC  r   r   rD   rE   rV   rF   rW   rH   rY   rG   rX   r   r   r   ZEXTRA_RErJ   r^   r   r   r   r   r   r   r   r   r  r   r{   r~   r   ZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMEr   r   r   r   r   <module>   s   










H!

   
