a
    DÉmgÅ˜  ã                   @   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-e.ƒ Z/e/ 0e%¡ e/ 0e&¡ e/ 0e(¡ e/ 0e*¡ e/ 0e,¡ e "d!¡Z1d"d#„ Z2d$d%„ Z3d&d'„ e/D ƒZ4d(d'„ e4 5¡ D ƒZ6d)Z7d*Z8d+Z9d,Z:d-Z;d.Z<d/Z=e>ƒ Z?e "d0¡Z@d;d2d3„ZAG d4d5„ d5e>ƒZBd6ZCd7ZDd8ZEG d9d:„ d:e>ƒZFdS )<z„Implementation 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   úS/var/www/html/idle/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"extra\s*==\s*("([^"]+)"|'([^']+)')c                 C   sZ   | 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rNt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>z   ó    z%_version2fieldlist.<locals>.<genexpr>ú2.0)Ú_241_FIELDSÚ_314_FIELDSrD   ÚtupleÚ_566_FIELDSÚ_426_FIELDSr   )Úversionr   r   r   Ú_version2fieldlistq   s    rP   c           
      C   s:  dd„ }g }|   ¡ D ]"\}}|g ddfv r,q| |¡ qg d¢}|D ]ö}|tvrnd|v rn| d¡ t d|¡ |tvr”d|v r”| d¡ t d	|¡ |tvrºd
|v rº| d
¡ t d|¡ |tvràd|v rà| d¡ t d|¡ |tvrd|v r|dkr| d¡ t d|¡ |t	vrDd|v rD| d¡ t d|¡ qDt
|ƒdkrR|d S t
|ƒdkrtt d| ¡ tdƒ‚d|v o†||tƒ}d
|v oš||tƒ}d|v o®||tƒ}d|v oÂ||tƒ}	t|ƒt|ƒ t|ƒ t|	ƒ dkròtdƒ‚|s|s|s|	st|v rtS |r"dS |r,d
S |r6dS dS )z5Detect the best version depending on the fields used.c                 S   s   |D ]}|| v r dS qdS )NTFr   )ÚkeysÚmarkersÚmarkerr   r   r   Ú_has_marker‚   s    z"_best_version.<locals>._has_markerÚUNKNOWNN)r?   r   r@   rA   rI   rB   r?   zRemoved 1.0 due to %sr   zRemoved 1.1 due to %sr@   zRemoved 1.2 due to %srA   zRemoved 1.3 due to %srB   r%   zRemoved 2.1 due to %srI   z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ÚappendrJ   ÚremoveÚloggerÚdebugrK   rD   rM   rN   Úlenr   Ú_314_MARKERSÚ_345_MARKERSÚ_566_MARKERSÚ_426_MARKERSÚintr   )
ÚfieldsrT   rQ   Ú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)rE   Únamer   r   r   Ú
<dictcomp>É   s   rj   c                 C   s   i | ]\}}||“qS r   r   )rE   ÚattrÚfieldr   r   r   rj   Ì   rH   )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.re   ú Ú.z%s-%s)Ú	_FILESAFEÚsubrh   )ri   rO   Zfor_filenamer   r   r   Ú_get_name_and_versioná   s    rq   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Úmappingry   r   r   r   Ú__init__ú   s    
zLegacyMetadata.__init__c                 C   s   t | jƒ| jd< d S ©Nr    )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€   ri   rc   r   r   r   Ú_write_field  s    zLegacyMetadata._write_fieldc                 C   s
   |   |¡S rC   )Úget©r~   ri   r   r   r   Ú__getitem__  s    zLegacyMetadata.__getitem__c                 C   s   |   ||¡S rC   )Úset)r~   ri   rc   r   r   r   Ú__setitem__  s    zLegacyMetadata.__setitem__c                 C   s6   |   |¡}z| j|= W n ty0   t|ƒ‚Y n0 d S rC   )Ú_convert_namerx   ÚKeyError)r~   ri   Ú
field_namer   r   r   Ú__delitem__  s
    
zLegacyMetadata.__delitem__c                 C   s   || j v p|  |¡| j v S rC   )rx   rŒ   rˆ   r   r   r   Ú__contains__  s    
ÿzLegacyMetadata.__contains__c                 C   s(   |t v r|S | dd¡ ¡ }t ||¡S )Nre   rf   )Ú_ALL_FIELDSrh   rg   Ú_ATTR2FIELDr‡   rˆ   r   r   r   rŒ   !  s    zLegacyMetadata._convert_namec                 C   s   |t v s|tv rg S dS )NrU   )Ú_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_2rp   Ú_LINE_PREFIX_1_2©r~   rc   r   r   r   Ú_remove_line_prefix,  s    
z"LegacyMetadata._remove_line_prefixc                 C   s   |t v r| | S t|ƒ‚d S rC   )r’   ÚAttributeErrorrˆ   r   r   r   Ú__getattr__2  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"   )rq   )r~   Zfilesafer   r   r   Úget_fullname=  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_fieldC  s    
zLegacyMetadata.is_fieldc                 C   s   |   |¡}|tv S rC   )rŒ   r“   rˆ   r   r   r   Úis_multi_fieldH  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   rz   L  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 ©ú,)rL   Úsplit©rE   rc   r   r   r   Ú
<listcomp>a  rH   z,LegacyMetadata.read_file.<locals>.<listcomp>rU   r%   )r   rx   r‘   r“   Úget_allÚ_LISTTUPLEFIELDSrŠ   Úget_payload)r~   ZfileobÚmsgrl   Úvaluesrc   Úbodyr   r   r   r{   T  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…   p  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 r¦d	d
„ |D ƒ}|D ]}|  |||¡ qªqdS )z0Write the PKG-INFO format data to a file object.r    rU   r«   r%   r–   r—   r   z	
       |c                 S   s   g | ]}d   |¡‘qS rª   ©Újoinr­   r   r   r   r®   Œ  rH   z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r}   rP   r‡   r”   r†   r¹   r“   r˜   rh   r°   )r~   Ú
fileobjectr·   rl   r³   rc   r   r   r   r¶   x  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 rC   )r’   rŠ   rŒ   )rb   rc   r„   r   r   Ú_set›  s    z#LegacyMetadata.update.<locals>._setrQ   N)ÚhasattrrQ   rV   )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 ¡s®t d	|||¡ q®nb|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)rE   rÀ   r   r   r   r®   ´  rH   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ÚlistrL   r   r¬   r“   rY   ÚisEnabledForÚloggingÚWARNINGr   ry   Ú_PREDICATE_FIELDSÚis_valid_matcherÚwarningÚ_VERSIONS_FIELDSÚis_valid_constraint_listÚ_VERSION_FIELDSÚis_valid_versionÚ_UNICODEFIELDSrœ   rx   )r~   ri   rc   Úproject_namery   rÀ   r   r   r   rŠ   ­  sJ    
ÿ
ÿ

þÿÿ


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Œ   rx   Ú_MISSINGr•   rÏ   r“   r°   rW   r”   rÃ   r   r¬   )r~   ri   rs   rc   Ú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 ¡ q¼q°||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¬   )rc   rÀ   ©ry   r   r   Úare_valid_constraints  s    z3LegacyMetadata.check.<locals>.are_valid_constraintsNzWrong value for '%s': %s)r}   rW   r¹   r   r   ry   rÈ   rË   rÌ   rÍ   rÎ   r‡   )r~   ÚstrictÚmissingÚwarningsrk   r²   rÖ   ra   Ú
controllerrl   rc   r   rÕ   r   Úcheckö  s8    

ÿÿý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¸   )rE   Úur   r   r   r®   5  rH   z)LegacyMetadata.todict.<locals>.<listcomp>)r}   rP   rx   Ú_FIELD2ATTR)r~   Zskip_missingra   ÚdatarŽ   rb   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~   Úrequirementsrl   r   r   r   Úadd_requirements9  s
    zLegacyMetadata.add_requirementsc                 C   s   t t| d ƒƒS rƒ   )rÄ   rP   r„   r   r   r   rQ   D  s    zLegacyMetadata.keysc                 c   s   |   ¡ D ]
}|V  qd S rC   ©rQ   )r~   rb   r   r   r   Ú__iter__G  s    zLegacyMetadata.__iter__c                    s   ‡ fdd„ˆ   ¡ D ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   ©rE   rb   r„   r   r   r®   L  rH   z)LegacyMetadata.values.<locals>.<listcomp>rã   r„   r   r„   r   r³   K  s    zLegacyMetadata.valuesc                    s   ‡ fdd„ˆ   ¡ D ƒS )Nc                    s   g | ]}|ˆ | f‘qS r   r   rå   r„   r   r   r®   O  rH   z(LegacyMetadata.items.<locals>.<listcomp>rã   r„   r   r„   r   rV   N  s    zLegacyMetadata.itemsc                 C   s   d| j j| j| jf S )Nz
<%s %s %s>)Ú	__class__r   ri   rO   r„   r   r   r   Ú__repr__Q  s    ÿzLegacyMetadata.__repr__)NNNrs   )F)F)F)N)F)F)"r   r   r   r   r‚   r}   r†   r‰   r‹   r   r   rŒ   r•   rœ   rž   rŸ   r    r¡   rz   r{   r…   r¶   r|   rŠ   rÑ   r‡   rÛ   rà   râ   rQ   rä   r³   rV   rç   r   r   r   r   rr   î   s@     ÿ




,
,
rr   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}rI   zdistlib (%s)r   )Úlegacy)ri   rO   Ú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˜   ri   rO   rê   )Ú_legacyÚ_datary   Nrs   c                 C   s@  |||g  d ¡dk rtdƒ‚d | _d | _|| _|d urxz|  ||¡ || _W n( tyt   t||d| _|  ¡  Y n0 nÄd }|r´t	|dƒ}| 
¡ }W d   ƒ qÀ1 s¨0    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 )Nrt   ru   )r   ry   Úrb©r˜   Ú	generatorr   )r€   ry   )rv   rw   rë   rì   ry   Ú_validate_mappingr   rr   Úvalidater¦   rz   ÚMETADATA_VERSIONÚ	GENERATORrÃ   r	   ÚdecodeÚjsonÚloadsÚ
ValueErrorr   )r~   r   r€   r   ry   rß   rF   r   r   r   r‚   …  s@    
(þ


ÿzMetadata.__init__)ri   rO   Ú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~   rb   ÚcommonÚmappedÚlkÚmakerÚresultrc   Ú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_VALIDATORSry   Úmatchr   )r~   rb   rc   ry   Ú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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  rù   )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)rq   ri   rO   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  ri   rO   rW   )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   4  s    c           
      C   sÚ   | j r|}nÊg }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
   ÚextendrX   rì   Úget_requirements)
r~   Úreqtsrþ   r(  r  r  ÚincluderS   rb   Úer   r   r   r*  ;  s2    	


ÿ
zMetadata.get_requirementsc                 C   s   | j r|  ¡ S | jS rC   )rë   Ú_from_legacyrì   r„   r   r   r   Ú
dictionarye  s    zMetadata.dictionaryc                 C   s   | j rt‚nt| j| jƒS d S rC   )rë   r  r   rì   ÚDEPENDENCY_KEYSr„   r   r   r   Údependenciesk  s    zMetadata.dependenciesc                 C   s   | j rt‚n| j |¡ d S rC   )rë   r  rì   r|   r›   r   r   r   r1  r  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_KEYSrV   rW   r¹   r   r  )	r~   r   ry   rØ   rb   r  r²   r¿   rÀ   r   r   r   rð   y  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Û   rY   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 r  )rë   rà   r   rì   Ú
INDEX_KEYS)r~   r  r   r   r   rà     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„|| r„d
|| ig||< q„| j|d< i }i }	|S )Nrî   T)ri   rO   rø   rê   ÚdescriptionÚ
classifierr5  r  r&   Ú rù   ))Zrequires_distrú   )Zsetup_requires_distrû   r$  r   )rë   rì   rò   ró   rà   r‡   r   )
r~   r  Zlmdr¿   ÚnkÚkwrQ   ÚokÚauthorÚ
maintainerr   r   r   r.  —  s.    þ

zMetadata._from_legacyr!   r"   r*   r$   r%   r'   r(   r)   r-   )
ri   rO   )r  r
  rø   rê   r4  )r  úpython.projectZproject_urlsZHome)r  r<  Úcontactsr   ri   )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  q–Y qb0 qb|r.|||< q.|| j	| j
 ƒ}	|| j| j ƒ}
| jrØt| 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$  r6  zextra == "%s"z(%s) and %srÂ   )rŠ   r‡   Úaddr¹   )Úentriesr+  r-  r"  r(  Zrlistr¢   rS   r   r   r   Úprocess_entriesÂ  s"    

z,Metadata._to_legacy.<locals>.process_entriesTFr=   r6   r;   )rì   rë   rr   ÚLEGACY_MAPPINGrV   rÃ   rL   r   Ú
IndexErrorrú   rý   rû   rü   rþ   Úsorted)r~   rA  r  Znmdr7  r9  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 sÈ0    Y  d S )	Nr   z)Exactly one of path and fileobj is needed)r·   Trt   )Úensure_asciiÚindentÚ	sort_keysrµ   r   )rv   r÷   rñ   rë   rF  r…   r¶   r.  rì   rõ   Údumpr¥   r¦   )r~   r   r€   ré   r·   Z	legacy_mdr  rF   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Š   rD  )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)>)ri   rO   ræ   r   r˜   )r~   ri   rO   r   r   r   rç     s
    

ÿzMetadata.__repr__)NNNrs   )N)NN)NNFT)/r   r   r   r   ÚreÚcompileZMETADATA_VERSION_MATCHERÚIZNAME_MATCHERr   ZVERSION_MATCHERZSUMMARY_MATCHERrò   r   ró   r2  r3  r0  r  Ú	__slots__r‚   rŠ   r  rÄ   Z	none_listÚdictZ	none_dictr  r  r  r  Úpropertyr  r   Úsetterr*  r/  r1  rð   rñ   rà   r.  rB  rF  r…   râ   rç   r   r   r   r   r   [  s–   

ýü  ÿ
-ó+

'




*


	ö2
r   )F)Gr   Ú
__future__r   r¥   r>  r   rõ   rÆ   rN  r6  r   r   Úcompatr   r   r	   rR   r
   Úutilr   r   rO   r   r   Ú	getLoggerr   rY   r   r   r   r   Ú__all__r   r   rO  rš   r™   rJ   rK   r\   rD   r]   rN   r_   rM   r^   rŠ   r‘   r|   ZEXTRA_RErP   rd   r’   rV   rÞ   rÈ   rË   rÍ   r“   r°   r”   rÏ   r  rÑ   ro   rq   rr   ZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMEr   r   r   r   r   Ú<module>   sx   









Iÿ

  j