B
    =)H[u   ã               @   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.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEœZ4dFZ5dGZ6dHZ7dIZ8dJZ9dKZ:dLZ;e<ƒ Z=e "dM¡Z>dVdOdP„Z?G dQdR„ dRe<ƒZ@dSZAdTZBG dUd„ de<ƒZCdS )Wz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   ú]C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\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-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   Ú_version2fieldlistl   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r¤d|kr¤| d¡ t d|¡ |tkrÊd|krÊ| d¡ t d|¡ |tkrðd|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�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�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_versionz   s`    






&
rD   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Provides-DistzRequires-DistzSetup-Requires-DistzRequires-PythonzRequires-Externalr'   r&   r%   zProject-URLzPrivate-VersionzObsoleted-Byr)   zProvides-Extra)Úmetadata_versionÚnamer/   Ú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)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.ú-ú Ú.z%s-%s)Ú	_FILESAFEÚsubÚreplace)rF   r/   Zfor_filenamer   r   r   Ú_get_name_and_versionõ   s    rd   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é   z'path, fileobj and mapping are exclusive)
ÚcountÚ	TypeErrorÚ_fieldsZrequires_filesZ_dependenciesÚschemeÚreadÚ	read_fileÚupdateÚset_metadata_version)ÚselfÚpathÚfileobjÚmappingrk   r   r   r   Ú__init__  s    
zLegacyMetadata.__init__c             C   s   t | jƒ| jd< d S )NzMetadata-Version)rD   rj   )rp   r   r   r   ro     s    z#LegacyMetadata.set_metadata_versionc             C   s   |  d||f ¡ d S )Nz%s: %s
)Úwrite)rp   rr   rF   rC   r   r   r   Ú_write_field!  s    zLegacyMetadata._write_fieldc             C   s
   |   |¡S )N)Úget)rp   rF   r   r   r   Ú__getitem__$  s    zLegacyMetadata.__getitem__c             C   s   |   ||¡S )N)Úset)rp   rF   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_namerj   ÚKeyError)rp   rF   Ú
field_namer   r   r   Ú__delitem__*  s
    
zLegacyMetadata.__delitem__c             C   s   || j kp|  |¡| j kS )N)rj   r{   )rp   rF   r   r   r   Ú__contains__1  s    
zLegacyMetadata.__contains__c             C   s(   |t kr|S | dd¡ ¡ }t ||¡S )Nr^   Ú_)Ú_ALL_FIELDSrc   ÚlowerÚ_ATTR2FIELDrw   )rp   rF   r   r   r   r{   5  s    zLegacyMetadata._convert_namec             C   s   |t ks|tkrg S dS )Nr5   )Ú_LISTFIELDSÚ_ELEMENTSFIELD)rp   rF   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Ú
)rE   Ú_LINE_PREFIX_PRE_1_2rb   Ú_LINE_PREFIX_1_2)rp   rC   r   r   r   Ú_remove_line_prefix@  s    
z"LegacyMetadata._remove_line_prefixc             C   s   |t kr| | S t|ƒ‚d S )N)rƒ   ÚAttributeError)rp   rF   r   r   r   Ú__getattr__F  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   )rd   )rp   Zfilesafer   r   r   Úget_fullnameQ  s    zLegacyMetadata.get_fullnamec             C   s   |   |¡}|tkS )z+return True if name is a valid metadata key)r{   r�   )rp   rF   r   r   r   Úis_fieldW  s    
zLegacyMetadata.is_fieldc             C   s   |   |¡}|tkS )N)r{   r„   )rp   rF   r   r   r   Úis_multi_field\  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Úopenrm   Úclose)rp   ÚfilepathÚfpr   r   r   rl   `  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 t 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)Ú.0rC   r   r   r   ú
<listcomp>u  s    z,LegacyMetadata.read_file.<locals>.<listcomp>r5   z!Attempting to set metadata for %s)
r   rj   r�   r„   Úget_allÚ_LISTTUPLEFIELDSry   r9   r:   ro   )rp   ZfileobÚmsgÚfieldÚvaluesrC   r   r   r   rm   h  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”   )rp   r•   Úskip_unknownr–   r   r   r   ru     s    zLegacyMetadata.writec             C   sÌ   |   ¡  x¾t| 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r¨d	d
„ |D ƒ}x|D ]}|  |||¡ q®W qW dS )z0Write the PKG-INFO format data to a file object.zMetadata-Versionr5   r—   r    )z1.0z1.1r‡   z	
        z	
       |c             S   s   g | ]}d   |¡‘qS )r—   )Újoin)rš   rC   r   r   r   r›   ›  s    z-LegacyMetadata.write_file.<locals>.<listcomp>N)
ro   r0   rw   r…   rv   r¤   r„   rE   rc   r�   )rp   Ú
fileobjectr£   rŸ   r    rC   r   r   r   r¢   ‡  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)rƒ   ry   r{   )rB   rC   )rp   r   r   Ú_setª  s    z#LegacyMetadata.update.<locals>._setr1   N)Úhasattrr1   r6   )rp   ÚotherÚkwargsr¦   ÚkÚvr   )rp   r   rn      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	rÞx”|D ](}| | d¡d ¡s°t d	|||¡ q°W 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)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„   r9   ÚisEnabledForÚloggingÚWARNINGr   rk   Ú_PREDICATE_FIELDSÚis_valid_matcherÚwarningÚ_VERSIONS_FIELDSÚis_valid_constraint_listÚ_VERSION_FIELDSÚis_valid_versionÚ_UNICODEFIELDSrŠ   rj   )rp   rF   rC   Úproject_namerk   r«   r   r   r   ry   ¼  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—   )r{   rj   Ú_MISSINGr†   rº   r„   r�   r7   r…   r®   r   r™   )rp   rF   rf   rC   ÚresÚvalr   r   r   rw   è  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 ¡ qÈW qºW ||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«   )rk   r   r   Úare_valid_constraints  s    
z3LegacyMetadata.check.<locals>.are_valid_constraintsNzWrong value for '%s': %s)ro   r7   r¤   r   r   rk   r³   r¶   r·   r¸   r¹   rw   )rp   ÚstrictÚmissingÚwarningsÚattrrž   r¿   rA   Ú
controllerrŸ   rC   r   )rk   r   Úcheck  s2    




zLegacyMetadata.checkc             C   sÚ   |   ¡  d}i }x*|D ]"\}}|r,|| jkr| | ||< qW | d dkršd}xˆ|D ]B\}}|rh|| jkrR|dkr~| | ||< qRdd„ | | D ƒ||< qRW n<| d dkrÖd	}x*|D ]"\}}|rÆ|| jkr°| | ||< q°W |S )
zº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).
        ))rE   zMetadata-Version)rF   r   )r/   r   )rH   r   )rK   z	Home-page)rL   r"   )rM   zAuthor-email)rP   r#   )rI   r    )rJ   r!   )rG   r   )Úclassifiersr$   )rR   zDownload-URLzMetadata-Versionz1.2))rU   zRequires-Dist)rW   zRequires-Python)rX   zRequires-External)rT   zProvides-Dist)rS   zObsoletes-Dist)r\   zProject-URL)rN   r(   )rO   zMaintainer-emailr\   c             S   s   g | ]}d   |¡‘qS )r—   )r¤   )rš   Úur   r   r   r›   ^  s    z)LegacyMetadata.todict.<locals>.<listcomp>z1.1))rZ   r&   )rY   r'   )r[   r%   )ro   rj   )rp   Zskip_missingZmapping_1_0ÚdatarB   r}   Zmapping_1_2Zmapping_1_1r   r   r   Útodict1  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   )rp   ÚrequirementsrŸ   r   r   r   Úadd_requirementsl  s
    

zLegacyMetadata.add_requirementsc             C   s   t t| d ƒƒS )NzMetadata-Version)r¯   r0   )rp   r   r   r   r1   w  s    zLegacyMetadata.keysc             c   s   x|   ¡ D ]
}|V  q
W d S )N)r1   )rp   rB   r   r   r   Ú__iter__z  s    zLegacyMetadata.__iter__c                s   ‡ fdd„ˆ   ¡ D ƒS )Nc                s   g | ]}ˆ | ‘qS r   r   )rš   rB   )rp   r   r   r›     s    z)LegacyMetadata.values.<locals>.<listcomp>)r1   )rp   r   )rp   r   r    ~  s    zLegacyMetadata.valuesc                s   ‡ fdd„ˆ   ¡ D ƒS )Nc                s   g | ]}|ˆ | f‘qS r   r   )rš   rB   )rp   r   r   r›   ‚  s    z(LegacyMetadata.items.<locals>.<listcomp>)r1   )rp   r   )rp   r   r6   �  s    zLegacyMetadata.itemsc             C   s   d| j j| j| jf S )Nz
<%s %s %s>)Ú	__class__r   rF   r/   )rp   r   r   r   Ú__repr__„  s    zLegacyMetadata.__repr__)NNNrf   )F)F)F)N)F)F)"r   r   r   r   rt   ro   rv   rx   rz   r~   r   r{   r†   rŠ   rŒ   r�   rŽ   r�   rl   rm   ru   r¢   rn   ry   r¼   rw   rÅ   rÉ   rË   r1   rÌ   r    r6   rÎ   r   r   r   r   re     s>   	 




,
,
;re   zpydist.jsonzmetadata.jsonc               @   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}z2.0zdistlib (%s)r   )Úlegacy)rF   r/   rH   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)rE   rF   r/   rH   )Ú_legacyÚ_datark   Nrf   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 n²d }|r¢t	|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 )Nrg   z'path, fileobj and mapping are exclusive)rs   rk   Úrb)rE   Ú	generatorzutf-8)rr   rk   )rh   ri   rÐ   rÑ   rk   Ú_validate_mappingr   re   Úvalidater“   rl   ÚMETADATA_VERSIONÚ	GENERATORr®   r	   ÚdecodeÚjsonÚloadsÚ
ValueErrorr   )rp   rq   rr   rs   rk   rÈ   Úfr   r   r   rt   ·  s<    



zMetadata.__init__)rF   r/   rP   rJ   rH   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ÚcommandsrÆ   Z
source_urlrE   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 ||¡}n�t ƒ }|}| 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Ð   rw   rÑ   )
rp   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_VALIDATORSrk   Úmatchr   )rp   rB   rC   rk   Ú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rÖt | ||¡ 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.exportsrJ   )r÷   ré   rê   rÐ   ÚNotImplementedErrorrÑ   Ú
setdefaultÚ__setattr__r®   r   r¬   r™   )rp   rB   rC   rë   rì   rí   r€   rñ   r   r   r   rú   0  s<    




zMetadata.__setattr__c             C   s   t | j| jdƒS )NT)rd   rF   r/   )rp   r   r   r   Úname_and_versionW  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-DistrZ   z%s (%s))rÐ   rÑ   rù   rF   r/   r7   )rp   rï   Úsr   r   r   rZ   [  s    
zMetadata.providesc             C   s    | j r|| j d< n
|| jd< d S )NzProvides-DistrZ   )rÐ   rÑ   )rp   rC   r   r   r   rZ   f  s    c       
      C   sâ   | j r|}nÒg }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�¡ q”W |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ÚenvironmentTrY   )ÚbuildÚdevÚtestz:%s:z%s_requires)rá   Úenv)	rÐ   r   rá   rw   r
   Úextendr8   rÑ   Úget_requirements)
rp   Úreqtsrá   r  rï   rñ   Úincluder3   rB   Úer   r   r   r  m  s0    	




zMetadata.get_requirementsc             C   s   | j r|  ¡ S | jS )N)rÐ   Ú_from_legacyrÑ   )rp   r   r   r   Ú
dictionary—  s    zMetadata.dictionaryc             C   s   | j rt‚nt| j| jƒS d S )N)rÐ   rø   r   rÑ   ÚDEPENDENCY_KEYS)rp   r   r   r   Údependencies�  s    zMetadata.dependenciesc             C   s   | j rt‚n| j |¡ d S )N)rÐ   rø   rÑ   rn   )rp   rC   r   r   r   r  ¤  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 )NrE   zMissing metadata items: %sz, )	rw   rÖ   r   ÚMANDATORY_KEYSr6   r7   r¤   r   r÷   )	rp   rs   rk   rÁ   rB   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Å   r9   rµ   rÔ   rÑ   rk   )rp   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)rp   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Š|| rŠd
|| ig||< qŠW | j|d< i }i }	|S )N)rE   rÓ   T)rF   r/   rP   rH   rI   rQ   rQ   rÆ   r!   Ú rJ   ))rU   rÝ   )rV   rÞ   rY   rZ   )rÐ   rÑ   ÚAssertionErrorrÖ   r×   rÉ   rw   rZ   )
rp   rï   Zlmdrª   ÚnkÚkwr1   ÚokrL   rN   r   r   r   r  É  s,    



zMetadata._from_legacyr   r   r#   r   r    )rF   r/   rP   rH   rI   rÆ   c             C   s    dd„ }| j r| jrt‚tƒ }| j }x*| j ¡ D ]\}}||kr0|| ||< q0W || j| j ƒ}|| j| j	 ƒ}| j
r„t| 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þ   rY   r  zextra == "%s"z(%s) and %sr­   )ry   rw   Úaddr¤   )Úentriesr  r  rý   r  Zrlistr�   r3   r   r   r   Úprocess_entriesð  s"    



z,Metadata._to_legacy.<locals>.process_entrieszProvides-ExtrazRequires-DistzSetup-Requires-Dist)rÑ   rÐ   r  re   ÚLEGACY_MAPPINGr6   rÝ   rà   rÞ   rß   rá   Úsorted)rp   r  rï   Znmdr  r  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}|r�t	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£   Trg   )Úensure_asciiÚindentÚ	sort_keysr¡   zutf-8)rh   rÛ   rÕ   rÐ   r  ru   r¢   r  rÑ   rÙ   Údumpr’   r“   )rp   rq   rr   rÏ   r£   Z	legacy_mdrñ   rÜ   r   r   r   ru     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ý   rY   r   )rÐ   rË   rÑ   rù   Úinsertry   r  )rp   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)>)rF   r/   rÍ   r   rE   )rp   rF   r/   r   r   r   rÎ   ?  s    

zMetadata.__repr__)NNNrf   )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__rt   ry   ræ   r¯   Z	none_listÚdictZ	none_dictrç   rê   r÷   rú   Úpropertyrû   rZ   Úsetterr  r	  r  rÔ   rÕ   rÉ   r  r  r  ru   rË   rÎ   r   r   r   r   r   �  sx   

 
,+

'
*	%
)F)Dr   Ú
__future__r   r’   Úemailr   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!  r‰   rˆ   r*   r+   r<   r,   r=   r.   r?   r-   r>   ry   r�   rn   ZEXTRA_REr0   rD   rƒ   r³   r¶   r¸   r„   r�   r…   rº   ré   r¼   ra   rd   re   ZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEr   r   r   r   r   Ú<module>	   s¬   










H

   
