o
    ã©ZhD—  ã                   @   s  d Z ddlmZ ddlZddlmZ ddlZddlZddlZddl	m
Z
mZ ddlmZmZmZ ddlmZ dd	lmZmZ dd
lmZmZ e e¡ZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZg d¢ZdZ dZ!e "d¡Z#e "d¡Z$dZ%dZ&dZ'dZ(dZ)dZ*dZ+e*d Z,d Z-d!Z.e,e. Z/e0ƒ Z1e1 2e%¡ e1 2e&¡ e1 2e(¡ e1 2e*¡ e1 2e,¡ e1 2e/¡ e "d"¡Z3d#d$„ Z4d%d&„ Z5d'd(„ e1D ƒZ6d)d(„ e6 7¡ D ƒZ8d*Z9d+Z:d,Z;d-Z<d.Z=d/Z>d0Z?e@ƒ ZAe "d1¡ZBd<d3d4„ZCG d5d6„ d6e@ƒZDd7ZEd8ZFd9ZGG d:d;„ d;e@ƒZHdS )=zzImplementation of the Metadata for Python packages PEPs.

Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and 2.2).
é    )Úunicode_literalsN)Úmessage_from_fileé   )ÚDistlibExceptionÚ__version__)ÚStringIOÚstring_typesÚ	text_type)Ú	interpret)Úextract_by_keyÚ
get_extras)Ú
get_schemeÚPEP440_VERSION_REc                   @   ó   e Zd ZdZdS )ÚMetadataMissingErrorzA required metadata is missingN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úS/var/www/html/lang_env/lib/python3.10/site-packages/pip/_vendor/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   r0   )r@   )ÚDynamicúLicense-Filez"extra\s*==\s*("([^"]+)"|'([^']+)')c                 C   sf   | dkrt S | dkrtS | dkrtS | dv r!ttdd„ tD ƒƒ S | dkr)tdƒ‚| d	kr/tS t| ƒ‚)
Nú1.0r    ú1.2)ú1.3ú2.1c                 s   s    | ]	}|t vr|V  qd S ©N)Ú_345_FIELDS)Ú.0Úfr   r   r   Ú	<genexpr>p   s   € z%_version2fieldlist.<locals>.<genexpr>ú2.0z+Metadata 2.0 is withdrawn and not supportedú2.2)Ú_241_FIELDSÚ_314_FIELDSrH   ÚtupleÚ_566_FIELDSÚ
ValueErrorÚ_643_FIELDSr   )Úversionr   r   r   Ú_version2fieldlistg   s   rU   c           	      C   sø  dd„ }dd„ |   ¡ D ƒ}g d¢}|D ]x}|tvr(d|v r(| d¡ t d|¡ |tvr;d|v r;| d¡ t d	|¡ |tvrNd
|v rN| d
¡ t d|¡ |tvrad|v ra| d¡ t d|¡ |tvrxd|v rx|dkrx| 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   t ‡ fdd„|D ƒƒS )Nc                 3   s    | ]}|ˆ v V  qd S rG   r   )rI   Úmarker©Úkeysr   r   rK   }   s   € z5_best_version.<locals>._has_marker.<locals>.<genexpr>)Úany)rX   Úmarkersr   rW   r   Ú_has_marker|   ó   z"_best_version.<locals>._has_markerc                 S   s"   g | ]\}}|g d dfvr|‘qS )ÚUNKNOWNNr   )rI   ÚkeyÚvaluer   r   r   Ú
<listcomp>   s   " z!_best_version.<locals>.<listcomp>)rC   r    rD   rE   rF   rM   rC   zRemoved 1.0 due to %sr    zRemoved 1.1 due to %srD   zRemoved 1.2 due to %srE   zRemoved 1.3 due to %srF   r'   zRemoved 2.1 due to %srM   zRemoved 2.2 due to %sr   r   z)Out of options - unknown metadata set: %szUnknown metadata setz,You used incompatible 1.1/1.2/2.1/2.2 fields)ÚitemsrN   ÚremoveÚloggerÚdebugrO   rH   rQ   rS   Úlenr   Ú_314_MARKERSÚ_345_MARKERSÚ_566_MARKERSÚ_643_MARKERSÚintr   )	Úfieldsr[   rX   Zpossible_versionsr^   Zis_1_1Zis_1_2Zis_2_1Zis_2_2r   r   r   Ú_best_versiony   sZ   





€$rl   c                 C   s   i | ]}|  ¡  d d¡|“qS )ú-Ú_)ÚlowerÚreplace)rI   Únamer   r   r   Ú
<dictcomp>Ã   s    rr   c                 C   s   i | ]\}}||“qS r   r   )rI   ÚattrÚfieldr   r   r   rr   Ä   ó    )r8   r5   r7   )r9   )r$   )r%   r.   r0   r2   r1   r5   r7   r8   r:   r6   r-   r=   r?   r>   rB   )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.rm   ú Ú.z%s-%s)Ú	_FILESAFEÚsubrp   )rq   rT   Zfor_filenamer   r   r   Ú_get_name_and_version×   s   rz   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Ú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   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Ú_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"   )rl   r   ©r‡   r   r   r   r†      s   z#LegacyMetadata.set_metadata_versionc                 C   s   |  d||f ¡ d S )Nz%s: %s
)Úwrite)r‡   r‰   rq   r_   r   r   r   Ú_write_field  r\   zLegacyMetadata._write_fieldc                 C   s
   |   |¡S rG   )Úget©r‡   rq   r   r   r   Ú__getitem__  s   
zLegacyMetadata.__getitem__c                 C   s   |   ||¡S rG   )Úset)r‡   rq   r_   r   r   r   Ú__setitem__	  s   zLegacyMetadata.__setitem__c                 C   s0   |   |¡}z| j|= W d S  ty   t|ƒ‚w rG   )Ú_convert_namer   ÚKeyError)r‡   rq   Ú
field_namer   r   r   Ú__delitem__  s   
ÿzLegacyMetadata.__delitem__c                 C   s   || j v p|  |¡| j v S rG   )r   r•   r‘   r   r   r   Ú__contains__  s   zLegacyMetadata.__contains__c                 C   s(   |t v r|S | dd¡ ¡ }t ||¡S )Nrm   rn   )Ú_ALL_FIELDSrp   ro   Ú_ATTR2FIELDr   r‘   r   r   r   r•     s   zLegacyMetadata._convert_namec                 C   s   |t v s|tv r
g S dS )Nr]   )Ú_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©rC   r    Ú
)Úmetadata_versionÚ_LINE_PREFIX_PRE_1_2ry   Ú_LINE_PREFIX_1_2©r‡   r_   r   r   r   Ú_remove_line_prefix!  s   
z"LegacyMetadata._remove_line_prefixc                 C   s   |t v r| | S t|ƒ‚rG   )r›   ÚAttributeErrorr‘   r   r   r   Ú__getattr__'  s   zLegacyMetadata.__getattr__Fc                 C   s   t | d | d |ƒS )zz
        Return the distribution name with version.

        If filesafe is true, return a filename-escaped form.
        r#   r$   )rz   )r‡   Zfilesafer   r   r   Úget_fullname0  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_field8  s   
zLegacyMetadata.is_fieldc                 C   r©   rG   )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ƒ   A  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| ¡ }|rN|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 ©ú,)rP   Úsplit©rI   r_   r   r   r   r`   V  s    z,LegacyMetadata.read_file.<locals>.<listcomp>r]   r'   )r   r   rš   rœ   Úget_allÚ_LISTTUPLEFIELDSr“   Úget_payload)r‡   ZfileobÚmsgrt   Úvaluesr_   Úbodyr   r   r   r„   I  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Ž   e  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"   r]   rµ   r'   rŸ   r    r!   z	
       |c                 S   ó   g | ]}d   |¡‘qS r´   ©Újoinr·   r   r   r   r`     ru   z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r†   rU   r   r   r   rÃ   rœ   r¡   rp   r¹   )r‡   Ú
fileobjectrÀ   rt   r¼   r_   r   r   r   r¿   m  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 rG   )r›   r“   r•   )r^   r_   r   r   r   Ú_set‘  s   ÿz#LegacyMetadata.update.<locals>._setrX   N)ÚhasattrrX   ra   )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‚| |¡st 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)rI   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ÚlistrP   r   r¶   rœ   rc   ÚisEnabledForÚloggingÚWARNINGr   r‚   Ú_PREDICATE_FIELDSÚis_valid_matcherÚwarningÚ_VERSIONS_FIELDSÚis_valid_constraint_listÚ_VERSION_FIELDSÚis_valid_versionÚ_UNICODEFIELDSr¥   r   )r‡   rq   r_   Úproject_namer‚   rÊ   r   r   r   r“   £  s:   



€ý
€

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¹   Úappendr   rÎ   r   r¶   )r‡   rq   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"   rD   c                    s(   | D ]}ˆ   | d¡d ¡s dS qdS )NrÍ   r   FT)rÔ   r¶   )r_   rÊ   ©r‚   r   r   Úare_valid_constraints   s
   ÿz3LegacyMetadata.check.<locals>.are_valid_constraintsNzWrong value for '%s': %s)r†   rÝ   rÃ   r   r   r‚   rÓ   rÖ   r×   rØ   rÙ   r   )r‡   ÚstrictÚmissingÚwarningsrs   r»   râ   rk   Ú
controllerrt   r_   r   rá   r   Úcheckæ  s:   

€
€

ÿÿ€ýzLegacyMetadata.checkc                 C   sh   |   ¡  t| d ƒ}i }|D ]#}|r|| jv r1t| }|dkr&| | ||< 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   rÁ   r´   rÂ   )rI   Úur   r   r   r`   #  ru   z)LegacyMetadata.todict.<locals>.<listcomp>)r†   rU   r   Ú_FIELD2ATTR)r‡   Zskip_missingrk   Údatar—   r^   r   r   r   Útodict  s   €zLegacyMetadata.todictc                 C   s8   | d dkrdD ]	}|| v r| |= q| d  |7  < d S )Nr"   r    )r0   r2   r1   r8   r   )r‡   Úrequirementsrt   r   r   r   Úadd_requirements'  s   €zLegacyMetadata.add_requirementsc                 C   s   t t| d ƒƒS rŒ   )rÏ   rU   r   r   r   r   rX   2  s   zLegacyMetadata.keysc                 c   s    |   ¡ D ]}|V  qd S rG   rW   )r‡   r^   r   r   r   Ú__iter__5  s   €ÿzLegacyMetadata.__iter__c                    ó   ‡ fdd„ˆ   ¡ D ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   ©rI   r^   r   r   r   r`   :  rÌ   z)LegacyMetadata.values.<locals>.<listcomp>rW   r   r   r   r   r¼   9  r\   zLegacyMetadata.valuesc                    rð   )Nc                    s   g | ]}|ˆ | f‘qS r   r   rñ   r   r   r   r`   =  s    z(LegacyMetadata.items.<locals>.<listcomp>rW   r   r   r   r   ra   <  r\   zLegacyMetadata.itemsc                 C   s   d| j j| j| jf S )Nz
<%s %s %s>)Ú	__class__r   rq   rT   r   r   r   r   Ú__repr__?  r\   zLegacyMetadata.__repr__©NNNr|   ©FrG   )"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î   rX   rï   r¼   ra   ró   r   r   r   r   r{   ä   s>    

	


&

*r{   zpydist.jsonzmetadata.jsonÚMETADATAc                   @   s®  e Zd ZdZe d¡Ze dej¡Ze dej¡Z	e
Ze d¡ZdZde Zddd	d
œZdZdZedfed	fed	fed	fe	d	fdœZdZdIdd„ZedƒZdefZdefZdefdefeeedefeeeedefdddœZ[[dd„ ZdJdd„Zdd „ Ze d!d"„ ƒZ!e d#d$„ ƒZ"e"j#d%d$„ ƒZ"dKd&d'„Z$e d(d)„ ƒZ%e d*d+„ ƒZ&e&j#d,d+„ ƒZ&d-d.„ Z'd/d0„ Z(d1d2„ Z)d3d4„ Z*d5d6d7d8d9d:d;d<d=dd>œ
Z+d?d@„ Z,dLdCdD„Z-dEdF„ Z.dGdH„ Z/dS )Mr   zÃ
    The metadata of a release. This implementation uses 2.1
    metadata where possible. If not possible, it wraps a LegacyMetadata
    instance which handles the key-value metadata format.
    z^\d+(\.\d+)*$z!^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$z^[A-Z]([0-9A-Z-]*[0-9A-Z])?$z	.{1,2047}rL   zdistlib (%s)r   )Úlegacy)rq   rT   Ú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¡   rq   rT   rø   Zdynamic)Ú_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©r¡   Ú	generatorr   )r‰   r‚   )r   r€   rù   rú   r‚   Ú_validate_mappingr   r{   Úvalidater°   rƒ   ÚMETADATA_VERSIONÚ	GENERATORrÎ   r	   ÚdecodeÚjsonÚloadsrR   r   )r‡   rˆ   r‰   rŠ   r‚   rë   rJ   r   r   r   r‹   u  sD   þ
ÿ€þ

øzMetadata.__init__)rq   rT   ÚlicenseÚkeywordsrø   r8   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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   r  ·  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  r  r  r  r  r  r  r  r  r  )r'  r  r  rù   ÚNotImplementedErrorrú   Ú
setdefaultÚ__setattr__rÎ   r   rË   r¶   )r‡   r^   r_   r  r  r  rn   r!  r   r   r   r*  ê  s<   

zMetadata.__setattr__c                 C   s   t | j| jdƒS ©NT)rz   rq   rT   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   Úprovidesz%s (%s))rù   rú   r)  rq   rT   rÝ   )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-    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ÚenvironmentTÚrequires)ÚbuildÚdevÚtestz:%s:z%s_requires)r  Úenv)	rù   r   r  r   r
   Úextendrb   rú   Úget_requirements)
r‡   Úreqtsr  r5  r  r!  ÚincluderV   r^   Úer   r   r   r7  &  s4   	å

€
€zMetadata.get_requirementsc                 C   s   | j r|  ¡ S | jS rG   )rù   Ú_from_legacyrú   r   r   r   r   Ú
dictionaryO  s   zMetadata.dictionaryc                 C   s   | j rt‚t| j| jƒS rG   )rù   r(  r   rú   ÚDEPENDENCY_KEYSr   r   r   r   ÚdependenciesU  s   zMetadata.dependenciesc                 C   s   | j rt‚| j |¡ d S rG   )rù   r(  rú   r…   r¤   r   r   r   r>  \  s   c           	      C   s†   |  d¡| jkrtƒ ‚g }| j ¡ D ]\}}||vr#||vr#| |¡ q|r1dd |¡ }t|ƒ‚| ¡ D ]\}}|  |||¡ q5d S )Nr¡   zMissing metadata items: %srà   )	r   r   r   ÚMANDATORY_KEYSra   rÝ   rÃ   r   r'  )	r‡   rŠ   r‚   rä   r^   r%  r»   rÉ   rÊ   r   r   r   rþ   c  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ç   rc   rÕ   rþ   rú   r‚   )r‡   rä   rå   r   r   r   rÿ   q  s   ÿzMetadata.validatec                 C   s$   | j r	| j  d¡S t| j| jƒ}|S r+  )rù   rì   r   rú   Ú
INDEX_KEYS)r‡   r  r   r   r   rì   y  s   zMetadata.todictc                 C   s¾   | j r| jrJ ‚| j| jdœ}| j  d¡}dD ]}||v r,|dkr$d}n|}|| ||< q| dg ¡}|dgkr:g }||d< d	}|D ]\}}||v rW|| rWd
|| ig||< qB| j|d< |S )Nrü   T)rq   rT   r  rø   ÚdescriptionÚ
classifierrB  r  r(   Ú r  ))Zrequires_distr  )Zsetup_requires_distr  r1  r-  )rù   rú   r   r  rì   r   r-  )r‡   r  ZlmdrÉ   ÚnkÚkwrX   Úokr   r   r   r;  €  s.   þ€
€
zMetadata._from_legacyr#   r$   r,   r&   r'   r)   r*   r+   r/   )
rq   rT   )r  r  r  rø   rA  )r  úpython.projectZproject_urlsZHome)r  rG  Úcontactsr   rq   )r  rG  rH  r   Úemailr  )r  r  r  c                 C   sî   dd„ }| j r
| jrJ ‚tƒ }| j }| j ¡ D ]7\}}t|tƒs+||v r*|| ||< q|}d}|D ]}z|| }W q1 ttfyG   d}Y  nw |rN|||< q|| j	| j
 ƒ}	|| j| j ƒ}
| jrit| 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 )Nr/  r0  r1  rC  zextra == "%s"z(%s) and %srÍ   )r“   r   ÚaddrÃ   )Úentriesr8  r:  r/  r5  Zrlistr¬   rV   r   r   r   Úprocess_entriesª  s$   

ôz,Metadata._to_legacy.<locals>.process_entriesTFr?   r8   r=   )rú   rù   r{   ÚLEGACY_MAPPINGra   rÎ   rP   r–   Ú
IndexErrorr  r
  r  r	  r  Úsorted)r‡   rL  r  ZnmdrD  rF  r!  ÚfoundrÉ   Úr1Úr2r   r   r   Ú
_to_legacy¨  s8   
€þ€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   rR   rÿ   rù   rS  rŽ   r¿   r;  rú   r  Údumpr¯   r°   )r‡   rˆ   r‰   r÷   rÀ   Z	legacy_mdr!  rJ   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  r0  r/  r1  r   )rù   rî   rú   r)  Úinsertr“   rO  )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)>)rq   rT   rò   r   r¡   )r‡   rq   rT   r   r   r   ró     s   

zMetadata.__repr__rô   rG   )NN)NNFT)0r   r   r   r   ÚreÚcompileZMETADATA_VERSION_MATCHERÚIZNAME_MATCHERZFIELDNAME_MATCHERr   ZVERSION_MATCHERZSUMMARY_MATCHERr   r   r  r?  r@  r=  r"  Ú	__slots__r‹   r“   r  rÏ   Z	none_listÚdictZ	none_dictr  r  r'  r*  Úpropertyr,  r-  Úsetterr7  r<  r>  rþ   rÿ   rì   r;  rM  rS  rŽ   rî   ró   r   r   r   r   r   H  s˜    

ýû
+ó
*	&




)


ö
3r   rõ   )Ir   Ú
__future__r   r¯   rI  r   r  rÑ   r[  rC  r   r   Úcompatr   r   r	   rZ   r
   Úutilr   r   rT   r   r   Ú	getLoggerr   rc   r   r   r   r   Ú__all__r   r   r\  r£   r¢   rN   rO   rf   rH   rg   Z_426_FIELDSZ_426_MARKERSrQ   rh   ri   rS   r“   rš   r…   ZEXTRA_RErU   rl   r›   ra   rê   rÓ   rÖ   rØ   rœ   r¹   r   rÚ   r  rÜ   rx   rz   r{   ZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMEr   r   r   r   r   Ú<module>   s|   









J

  a