o
    ThD                     @   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 Z1e12e% e12e& e12e( e12e* e12e, e12e/ e"d"Z3d#d$ Z4d%d& Z5d'd( e1D Z6d)d( e67 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   d/var/www/html/construction_image-detection-poc/venv/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   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rd|v r|d td| qt	|dkr|d S t	|dkrt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rt
d|s|s|s|st|v rtS |rdS |rd
S |rd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   possible_versionsr^   is_1_1is_1_2is_2_1is_2_2r   r   r   _best_versiony   sZ   





$rq   c                 C   s   i | ]}|  d d|qS )-_)lowerreplace)rI   namer   r   r   
<dictcomp>   s    rw   c                 C   s   i | ]\}}||qS r   r   )rI   attrfieldr   r   r   rw          )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.rr    .z%s-%s)	_FILESAFEsubru   )rv   rT   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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_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"   )rq   r   r   r   r   r   r      s   z#LegacyMetadata.set_metadata_versionc                 C   s   | d||f  d S )Nz%s: %s
)write)r   r   rv   r_   r   r   r   _write_field  r\   zLegacyMetadata._write_fieldc                 C   s
   |  |S rG   )getr   rv   r   r   r   __getitem__  s   
zLegacyMetadata.__getitem__c                 C   s   |  ||S rG   )set)r   rv   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   rv   
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 )Nrr   rs   )_ALL_FIELDSru   rt   _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_2r~   _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$   )r   )r   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   fileobmsgry   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`     rz   z-LegacyMetadata.write_file.<locals>.<listcomp>N)
r   rU   r   r   r   r   r   r   ru   r   )r   
fileobjectr   ry   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||st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   rv   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   rv   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warningsrx   r   r   rk   
controllerry   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`   #  rz   z)LegacyMetadata.todict.<locals>.<listcomp>)r   rU   r   _FIELD2ATTR)r   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   requirementsry   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   rv   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)rv   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   rv   rT   r  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__)rv   rT   licensekeywordsr  r8   r=   r?   r.   )r/   N)r"   N)run_requiresbuild_requiresdev_requires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rt | |}|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rt|t	r|
 }|r| }ng }| jr|| j|< d S || j|< d S )Nr  r   r!  r"  r  r#  r  r$  r%  r  )r4  r&  r'  r  NotImplementedErrorr  
setdefault__setattr__r   r   r   r   )r   r^   r_   r(  r)  r*  rs   r.  r   r   r   r7    s<   

zMetadata.__setattr__c                 C   s   t | j| jdS NT)r   rv   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  r6  rv   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  rB  r,  r.  includerV   r^   er   r   r   rD  &  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  r5  r   r  DEPENDENCY_KEYSr   r   r   r   dependenciesU  s   zMetadata.dependenciesc                 C   s   | j rt| j| d S rG   )r  r5  r  r   r   r   r   r   rK  \  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   r4  )	r   r   r   r   r^   r2  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 r8  )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)rv   rT   r  r  description
classifierrO  r  r(    r  ))requires_distr  )setup_requires_distr  r>  r:  )r  r  r  r  r   r   r:  )r   r,  lmdr   nkkwrX   okr   r   r   rH    s.   

zMetadata._from_legacyr#   r$   r,   r&   r'   r)   r*   r+   r/   )
rv   rT   )r"  r$  r  r  rN  )r"  python.projectproject_urlsHome)r"  rW  contactsr   rv   )r"  rW  rZ  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<  r=  r>  rP  zextra == "%s"z(%s) and %sr   )r   r   addr   )entriesrE  rG  r<  rB  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   r_  r,  nmdrT  rV  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  rg  r   r   rH  r  r  dumpr   r   )r   r   r   r  r   	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  r=  r<  r>  r   )r  r   r  r6  insertr   rb  )r   r   r  alwaysentry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)>)rv   rT   r   r   r   )r   rv   rT   r   r   r   r     s   

zMetadata.__repr__r   rG   )NN)NNFT)0r   r   r   r   recompileMETADATA_VERSION_MATCHERINAME_MATCHERFIELDNAME_MATCHERr   VERSION_MATCHERSUMMARY_MATCHERr  r   r  rL  rM  rJ  r/  	__slots__r   r   r  r   	none_listdict	none_dictr   r'  r4  r7  propertyr9  r:  setterrD  rI  rK  r
  r  r   rH  r`  rg  r   r   r   r   r   r   r   r   H  s    


+
*	&




)



3r   r   )Ir   
__future__r   r   r[  r   r  r   rq  rP  r   r   compatr   r   r	   rZ   r
   utilr   r   rT   r   r   	getLoggerr   rc   r   r   r   r   __all__r   r   rr  r   r   rN   rO   rf   rH   rg   _426_FIELDS_426_MARKERSrQ   rh   ri   rS   r   r   r   EXTRA_RErU   rq   r   ra   r   r   r   r   r   r   r   r   r&  r   r}   r   r   METADATA_FILENAMEWHEEL_METADATA_FILENAMELEGACY_METADATA_FILENAMEr   r   r   r   r   <module>   s|   









J

  a