o
    ä§Êh*�  ã                   @   sd  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%„ Z3i d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdIdJdKdLdMdNdOdPdQdRdSdTdUœ¥Z4dVZ5dWZ6dXZ7dYZ8dZZ9d[Z:d\Z;e<ƒ Z=e "d]¡Z>dhd_d`„Z?G dadb„ dbe<ƒZ@dcZAddZBdeZCG dfdg„ dge<ƒZDdS )iz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                   @   ó   e Zd ZdZdS )ÚMetadataMissingErrorzA required metadata is missingN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úB/var/www/html/env/lib/python3.10/site-packages/distlib/metadata.pyr      ó    r   c                   @   r   )ÚMetadataConflictErrorz>Attempt to read or write metadata fields that are conflictual.Nr   r   r   r   r   r       r   r   c                   @   r   )Ú MetadataUnrecognizedVersionErrorz Unknown metadata version number.Nr   r   r   r   r   r   $   r   r   c                   @   r   )ÚMetadataInvalidErrorzA metadata value is invalidNr   r   r   r   r   r   (   r   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)r0   r1   r2   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)r7   r8   r9   r5   r:   r3   r4   r6   )r"   r#   r$   r%   r-   r&   r'   r(   r)   r*   r+   r3   r4   r,   r.   r/   r5   r6   r7   r8   r9   r:   úPrivate-VersionúObsoleted-ByúSetup-Requires-DistÚ	ExtensionúProvides-Extra)r;   r?   r<   r=   r>   )úDescription-Content-Typer2   r1   )r@   z"extra\s*==\s*("([^"]+)"|'([^']+)')c                 C   sH   | dkrt S | dkrtS | dkrtS | dv rtt S | dkr tS t| ƒ‚)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   rL   c           
      C   s  dd„ }g }|   ¡ D ]\}}|g ddfv rq
| |¡ q
g d¢}|D ]x}|tvr7d|v r7| d¡ t d|¡ |tvrJd|v rJ| d¡ t d	|¡ |tvr]d
|v r]| d
¡ t d|¡ |tvrpd|v rp| d¡ t d|¡ |tvr‡d|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rµt 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 |�rd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)rA   r    rB   rC   rE   rD   rA   zRemoved 1.0 due to %sr    zRemoved 1.1 due to %srB   zRemoved 1.2 due to %srC   zRemoved 1.3 due to %srD   r'   zRemoved 2.1 due to %srE   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ÚappendrF   ÚremoveÚloggerÚdebugrG   rH   rI   rJ   Úlenr   Ú_314_MARKERSÚ_345_MARKERSÚ_566_MARKERSÚ_426_MARKERSÚintr   )
ÚfieldsrP   rM   ÚkeyÚvalueÚpossible_versionsÚis_1_1Úis_1_2Úis_2_1Úis_2_0r   r   r   Ú_best_version~   sb   





€$re   Úmetadata_versionr"   Únamer#   rK   r$   Úplatformr%   Úsupported_platformr-   Úsummaryr&   Údescriptionr'   Úkeywordsr(   Ú	home_pager)   Úauthorr*   Úauthor_emailr+   Ú
maintainerr3   Úmaintainer_emailr4   Úlicenser,   Ú
classifierr.   Údownload_urlr/   Úobsoletes_distr5   r7   r8   r=   r9   r:   r2   r1   r0   r6   r;   r<   r>   r?   )Úprovides_distÚrequires_distÚsetup_requires_distÚrequires_pythonÚrequires_externalÚrequiresÚprovidesÚ	obsoletesÚproject_urlÚprivate_versionÚobsoleted_byÚ	extensionÚprovides_extra)r8   r5   r7   )r9   )r$   )r%   r.   r0   r2   r1   r5   r7   r8   r:   r6   r-   r=   r?   r>   )r6   )r(   )r*   r3   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)rg   rK   Ú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d@d%d&„Zd@d'd(„ZdAd)d*„Zd+d,„ Zefd-d.„Zd@d/d0„Zd@d1d2„Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!dS )BÚ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   s‚   |||g  d ¡dk rtdƒ‚i | _g | _d | _|| _|d ur%|  |¡ d S |d ur0|  |¡ d S |d ur?|  |¡ |  	¡  d S d S )Né   ú'path, fileobj and mapping are exclusive)
ÚcountÚ	TypeErrorÚ_fieldsÚrequires_filesÚ_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"   )re   r‘   ©r™   r   r   r   r˜   "  s   z#LegacyMetadata.set_metadata_versionc                 C   s   |  d||f ¡ d S )Nz%s: %s
)Úwrite)r™   r›   rg   r_   r   r   r   Ú_write_field%  ó   zLegacyMetadata._write_fieldc                 C   s
   |   |¡S ©N)Úget©r™   rg   r   r   r   Ú__getitem__(  s   
zLegacyMetadata.__getitem__c                 C   s   |   ||¡S r£   )Úset)r™   rg   r_   r   r   r   Ú__setitem__+  s   zLegacyMetadata.__setitem__c                 C   s0   |   |¡}z| j|= W d S  ty   t|ƒ‚w r£   )Ú_convert_namer‘   ÚKeyError)r™   rg   Ú
field_namer   r   r   Ú__delitem__.  s   
ÿzLegacyMetadata.__delitem__c                 C   s   || j v p|  |¡| j v S r£   )r‘   r©   r¥   r   r   r   Ú__contains__5  s   
ÿzLegacyMetadata.__contains__c                 C   s(   |t v r|S | dd¡ ¡ }t ||¡S )Nrƒ   Ú_)Ú_ALL_FIELDSrˆ   ÚlowerÚ_ATTR2FIELDr¤   r¥   r   r   r   r©   9  s   zLegacyMetadata._convert_namec                 C   s   |t v s|tv r
g S dS )NrQ   )Ú_LISTFIELDSÚ_ELEMENTSFIELDr¥   r   r   r   Ú_default_value?  s   zLegacyMetadata._default_valuec                 C   s"   | j dv rt d|¡S t d|¡S )N©rA   r    Ú
)rf   Ú_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 v r| | S t|ƒ‚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™   Úfilesafer   r   r   Úget_fullnameU  s   zLegacyMetadata.get_fullnamec                 C   ó   |   |¡}|tv 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   r¿   r£   )r©   r²   r¥   r   r   r   Úis_multi_field`  s   
zLegacyMetadata.is_multi_fieldc                 C   s4   t j|ddd�}z|  |¡ W | ¡  dS | ¡  w )z*Read the metadata values from a file path.Úrr   ©ÚencodingN)ÚcodecsÚopenr–   Úclose)r™   ÚfilepathÚfpr   r   r   r•   d  s   zLegacyMetadata.readc                 C   s�   t |ƒ}|d | jd< tD ]8}||vrq|tv r3| |¡}|tv r,|dur,dd„ |D ƒ}|  ||¡ q|| }|durE|dkrE|  ||¡ 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>rQ   )r   r‘   r¯   r²   Úget_allÚ_LISTTUPLEFIELDSr§   )r™   ÚfileobÚmsgÚfieldÚvaluesr_   r   r   r   r–   l  s   
€ózLegacyMetadata.read_filec                 C   s6   t j|ddd�}z|  ||¡ W | ¡  dS | ¡  w )z&Write the metadata fields to filepath.Úwr   rÃ   N)rÅ   rÆ   Ú
write_filerÇ   )r™   rÈ   Úskip_unknownrÉ   r   r   r   r    ƒ  s   zLegacyMetadata.writec                 C   sÄ   |   ¡  t| d ƒD ]U}|  |¡}|r|dg dgfv rq
|tv r+|  ||d |¡¡ q
|tvrH|dkrE| jdv r?| dd¡}n| dd¡}|g}|t	v rSd	d
„ |D ƒ}|D ]	}|  |||¡ qUq
dS )z0Write the PKG-INFO format data to a file object.r"   rQ   rË   r'   rµ   r¶   r!   z	
       |c                 S   ó   g | ]}d   |¡‘qS rÊ   ©ÚjoinrÎ   r   r   r   rÐ   Ÿ  ó    z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r˜   rL   r¤   r³   r¡   rÜ   r²   rf   rˆ   rÒ   )r™   Ú
fileobjectrÙ   rÕ   rÖ   r_   r   r   r   rØ   ‹  s(   

ÿîzLegacyMetadata.write_filec                    sz   ‡ fdd„}|s	n t |dƒr| ¡ D ]	}|||| ƒ qn|D ]	\}}|||ƒ q|r9| ¡ D ]\}}|||ƒ q/dS 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 d S d S r£   )r±   r§   r©   )r^   r_   rŸ   r   r   Ú_set®  s   ÿz#LegacyMetadata.update.<locals>._setrM   N)ÚhasattrrM   rR   )r™   ÚotherÚkwargsrß   ÚkÚvr   rŸ   r   r—   ¤  s   

ÿþzLegacyMetadata.updatec                 C   sV  |   |¡}|tv s|dkr't|ttfƒs't|tƒr$dd„ | d¡D ƒ}ng }n|tv r=t|ttfƒs=t|tƒr;|g}ng }t 	t
j¡r—| d }t| jƒ}|tv rl|durl|D ]}| | d¡d ¡sjt d	|||¡ qVn+|tv r‚|dur‚| |¡s�t d
|||¡ n|tv r—|dur—| |¡s—t d
|||¡ |tv 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Ð   Ç  ó    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²   rU   ÚisEnabledForÚloggingÚWARNINGr   r”   Ú_PREDICATE_FIELDSÚis_valid_matcherÚwarningÚ_VERSIONS_FIELDSÚis_valid_constraint_listÚ_VERSION_FIELDSÚis_valid_versionÚ_UNICODEFIELDSrº   r‘   )r™   rg   r_   Úproject_namer”   rä   r   r   r   r§   À  sP   
ÿ
ÿ

þ€ý
ÿ€
ÿ
zLegacyMetadata.setc                 C   sÊ   |   |¡}|| jvr|tu r|  |¡}|S |tv r | j| }|S |tv rM| j| }|du r/g S g }|D ]}|tvr?| |¡ q3| |d |d f¡ q3|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Ò   rS   r³   rè   r   rÍ   )r™   rg   rŒ   r_   ÚresÚvalr   r   r   r¤   ì  s.   








zLegacyMetadata.getc                    sú   |   ¡  g g }}dD ]}|| vr| |¡ q|r(|g kr(dd |¡ }t|ƒ‚dD ]}|| vr5| |¡ q*| d dkr@||fS t| jƒ‰ ‡ fdd„}t|ftˆ jft	ˆ j
ffD ] \}}|D ]}	|  |	d	¡}
|
d	urw||
ƒsw| d
|	|
f ¡ q^qX||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"   rB   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˜   rS   rÜ   r   r   r”   rí   rð   rñ   rò   ró   r¤   )r™   ÚstrictÚmissingÚwarningsÚattrrÔ   rû   r]   Ú
controllerrÕ   r_   r   rú   r   Úcheck	  s@   

€
€
ÿÿý€ýzLegacyMetadata.checkc                 C   sÐ   |   ¡  d}i }|D ]\}}|r|| jv r| | ||< q
| d dkrJd}|D ]!\}}|r1|| jv rG|dkr<| | ||< q&dd„ | | D ƒ||< q&|S | d dkrfd	}|D ]\}}|r_|| jv re| | ||< qT|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).
        ))rf   r"   )rg   r#   )rK   r$   )rj   r&   )rm   r)   )rn   r*   )ro   r+   )rr   r,   )rk   r'   )rl   r(   )rh   r%   )Úclassifiersr.   )rt   r/   r"   rB   ))rw   r8   )ry   r9   )rz   r:   )rv   r7   )ru   r5   )r~   r6   )rp   r3   )rq   r4   r~   c                 S   rÚ   rÊ   rÛ   )rÏ   Úur   r   r   rÐ   b  rÝ   z)LegacyMetadata.todict.<locals>.<listcomp>r    ))r|   r1   )r{   r2   )r}   r0   )r˜   r‘   )r™   Úskip_missingÚmapping_1_0Údatar^   r«   Úmapping_1_2Úmapping_1_1r   r   r   Útodict5  s.   €
€ö€zLegacyMetadata.todictc                 C   s8   | d dkrdD ]	}|| v r| |= q| d  |7  < d S )Nr"   r    )r0   r2   r1   r8   r   )r™   ÚrequirementsrÕ   r   r   r   Úadd_requirementsp  s   €zLegacyMetadata.add_requirementsc                 C   s   t t| d ƒƒS rž   )ré   rL   rŸ   r   r   r   rM   {  s   zLegacyMetadata.keysc                 c   s   � |   ¡ D ]}|V  qd S r£   ©rM   )r™   r^   r   r   r   Ú__iter__~  s   €ÿzLegacyMetadata.__iter__c                    ó   ‡ fdd„ˆ   ¡ D ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   ©rÏ   r^   rŸ   r   r   rÐ   ƒ  ræ   z)LegacyMetadata.values.<locals>.<listcomp>r  rŸ   r   rŸ   r   rÖ   ‚  r¢   zLegacyMetadata.valuesc                    r  )Nc                    s   g | ]}|ˆ | f‘qS r   r   r  rŸ   r   r   rÐ   †  s    z(LegacyMetadata.items.<locals>.<listcomp>r  rŸ   r   rŸ   r   rR   …  r¢   zLegacyMetadata.itemsc                 C   s   d| j j| j| jf S )Nz
<%s %s %s>)Ú	__class__r   rg   rK   rŸ   r   r   r   Ú__repr__ˆ  s   ÿzLegacyMetadata.__repr__©NNNrŒ   ©Fr£   )"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  rM   r  rÖ   rR   r  r   r   r   r   r‹     sB    
ÿ



,

,;r‹   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		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}rE   zdistlib (%s)r   )Úlegacy)rg   rK   rj   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)rf   rg   rK   rj   )Ú_legacyÚ_datar”   NrŒ   c                 C   sB  |||g  d ¡dk rtdƒ‚d | _d | _|| _|d ur=z|  ||¡ || _W d S  ty<   t||d�| _|  ¡  Y d S w d }|r[t	|dƒ�}| 
¡ }W d   ƒ n1 sUw   Y  n|ra| 
¡ }|d u ro| j| jdœ| _d S t|tƒsy| d¡}zt |¡| _|  | j|¡ W d S  ty    tt|ƒ|d�| _|  ¡  Y d S w )Nr�   rŽ   )rœ   r”   Úrb©rf   Ú	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�   ¼  sH   þ
ÿ€þ

ÿ÷zMetadata.__init__)rg   rK   rr   rl   rj   r8   r=   r?   r.   )r/   N)r"   N)Úrun_requiresÚbuild_requiresÚdev_requiresÚtest_requiresÚmeta_requiresÚextrasÚmodulesÚ
namespacesÚexportsÚcommandsr  Ú
source_urlrf   c           
      C   sX  t  | d¡}t  | d¡}||v r�|| \}}| jr0|d u r(|d u r#d n|ƒ }|S | j |¡}|S |d u r6d n|ƒ }|dvrF| j ||¡}|S t ƒ }|}| j d¡}	|	r…|dkr^|	 d|¡}n'|dkrp|	 d¡}	|	ro|	 ||¡}n|	 d	¡}	|	s}| j d	¡}	|	r…|	 ||¡}||u r‹|}|S ||vr™t  | |¡}|S | jr¤| j |¡}|S | 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   r7     sR   "à âè
€
úüÿzMetadata.__getattribute__c                 C   sP   || j v r"| j | \}}|p| j|vr$| |¡}|s&td||f ƒ‚d S d S 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   s0  |   ||¡ t | d¡}t | d¡}||v rd|| \}}| jr,|d u r%t‚|| j|< d S |dvr7|| j|< d S | j di ¡}|dkrH||d< d S |dkrX| di ¡}|||< d S | d	i ¡}|||< d S ||vrqt | ||¡ d S |d
kr‡t|t	ƒr‡| 
¡ }|r…| ¡ }ng }| jr‘|| j|< d S || j|< d S )Nr/  r0  r1  r2  r-  r3  r  r4  r5  rl   )rD  r6  r7  r  ÚNotImplementedErrorr  Ú
setdefaultÚ__setattr__rè   r   rå   rÍ   )r™   r^   r_   r8  r9  r:  r®   r>  r   r   r   rG  5  s<   

zMetadata.__setattr__c                 C   s   t | j| jdƒS ©NT)rŠ   rg   rK   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r!| |¡ |S )Nr7   r|   z%s (%s))r  r  rF  rg   rK   rS   )r™   r<  Úsr   r   r   r|   `  s   
zMetadata.providesc                 C   s"   | j r
|| j d< d S || jd< d S )Nr7   r|   )r  r  r¹   r   r   r   r|   k  s   c           
      C   sÜ   | j r|}|S g }t|pg | jƒ}|D ]2}d|vr d|vr d}nd|vr'd}n| d¡|v }|r<| d¡}|r<t||ƒ}|rE| |d ¡ qdD ]#}d| }	|	|v rk| |	¡ | j d| g ¡}| | j|||d�¡ qH|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ÚenvironmentTr{   )ÚbuildÚdevÚtestz:%s:z%s_requires)r)  Úenv)	r  r   r)  r¤   r
   ÚextendrT   r  Úget_requirements)
r™   Úreqtsr)  rP  r<  r>  ÚincluderO   r^   Úer   r   r   rR  r  s8   	ä

€
ÿ€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‚t| j| jƒS r£   )r  rE  r   r  ÚDEPENDENCY_KEYSrŸ   r   r   r   Údependencies¢  s   zMetadata.dependenciesc                 C   s   | j rt‚| j |¡ d S r£   )r  rE  r  r—   r¹   r   r   r   rY  ©  s   c           	      C   s†   |  d¡| jkrtƒ ‚g }| j ¡ D ]\}}||vr#||vr#| |¡ q|r1dd |¡ }t|ƒ‚| ¡ D ]\}}|  |||¡ q5d S )Nrf   zMissing metadata items: %srù   )	r¤   r  r   ÚMANDATORY_KEYSrR   rS   rÜ   r   rD  )	r™   rœ   r”   rý   r^   rB  rÔ   rã   rä   r   r   r   r  °  s   
€ÿzMetadata._validate_mappingc                 C   sH   | j r| j  d¡\}}|s|rt d||¡ d S d S |  | j| j¡ d S )NTz#Metadata: missing: %s, warnings: %s)r  r  rU   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 rH  )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r$d}n|}|| ||< q| dg ¡}|dgkr:g }||d< d	}|D ]\}}||v rW|| rWd
|| ig||< qB| j|d< i }i }	|S )Nr  T)rg   rK   rr   rj   rk   rs   rs   r  r(   Ú rl   ))rw   r$  )rx   r%  r{   r|   )r  r  r  r  r	  r¤   r|   )
r™   r<  Úlmdrã   ÚnkÚkwrM   Úokrn   rp   r   r   r   rV  Î  s2   þ€
€
zMetadata._from_legacyr#   r$   r,   r&   r'   )rg   rK   rr   rj   rk   r  c                 C   sœ   dd„ }| j r
| jrJ ‚tƒ }| j }| j ¡ D ]\}}||v 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 ]+}|s#|s#| |¡ qd}|r+d| }|r8|r6d||f }n|}| d ||f¡¡ qq|S )NrK  rL  r{   r\  zextra == "%s"z(%s) and %srç   )r§   r¤   ÚaddrÜ   )ÚentriesrS  rU  rK  rP  ÚrlistrÂ   rO   r   r   r   Úprocess_entriesõ  s$   

ôz,Metadata._to_legacy.<locals>.process_entriesr?   r8   r=   )r  r  r‹   ÚLEGACY_MAPPINGrR   r$  r(  r%  r&  r)  Úsorted)r™   rd  r<  Únmdr^  r`  Úr1Úr2r   r   r   Ú
_to_legacyô  s   €zMetadata._to_legacyFTc                 C   sÞ   ||g  d ¡dkrtdƒ‚|  ¡  |r2| jr| j}n|  ¡ }|r)|j||d� d S |j||d� d S | jr:|  ¡ }n| j}|rKt	j
||dddd� d S t |dd¡�}t	j
||dddd� W d   ƒ d S 1 shw   Y  d S )	Nr   z)Exactly one of path and fileobj is needed)rÙ   Tr�   )Úensure_asciiÚindentÚ	sort_keysr×   r   )r�   r"  r  r  rj  r    rØ   rV  r  r   ÚdumprÅ   rÆ   )r™   rš   r›   r  rÙ   Ú	legacy_mdr>  r#  r   r   r   r      s,   

ÿÿ"ÿzMetadata.writec                 C   sŽ   | j r| j  |¡ d S | j dg ¡}d }|D ]}d|vr$d|vr$|} nq|d u r5d|i}| d|¡ d S t|d ƒt|ƒB }t|ƒ|d< d S )Nr$  rL  rK  r{   r   )r  r  r  rF  Úinsertr§   rf  )r™   r
  r$  ÚalwaysÚentryÚ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)>)rg   rK   r  r   rf   )r™   rg   rK   r   r   r   r  D  s
   

ÿzMetadata.__repr__r  r£   )NN)NNFT)/r   r   r   r   ÚreÚcompileÚMETADATA_VERSION_MATCHERÚIÚNAME_MATCHERr   ÚVERSION_MATCHERÚSUMMARY_MATCHERr  r   r  rZ  r[  rX  r?  Ú	__slots__r�   r§   r/  ré   Ú	none_listÚdictÚ	none_dictr0  r7  rD  rG  ÚpropertyrI  r|   ÚsetterrR  rW  rY  r  r  r	  rV  re  rj  r    r  r  r   r   r   r   r   ’  s�    

ýü
ÿ-ó
+
'




*


	ú	
%r   r  )Er   Ú
__future__r   rÅ   Úemailr   r   rë   rt  r\  r   r   Úcompatr   r   r	   rN   r
   Úutilr   r   rK   r   r   Ú	getLoggerr   rU   r   r   r   r   Ú__all__r   r   ru  r¸   r·   rF   rG   rX   rH   rY   rJ   r[   rI   rZ   r§   r¯   r—   ÚEXTRA_RErL   re   r±   rí   rð   rò   r²   rÒ   r³   rô   r6  rö   r†   rŠ   r‹   ÚMETADATA_FILENAMEÚWHEEL_METADATA_FILENAMEÚLEGACY_METADATA_FILENAMEr   r   r   r   r   Ú<module>   sÖ   









Gÿþýüûúùø	÷
öõôóòñðïâ!

   
