B
    @)H[f  ã               @   s„   d Z ddlZddlZddlZddlmZ ddlZddlm	Z	 e 
d¡ZeddƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z2
Tools for converting old- to new-style metadata.
é    N)Ú
namedtupleé   )Úread_pkg_infozF^(?P<package>.*?)(;\s*(?P<condition>.*?)(extra == '(?P<extra>.*?)')?)$ÚMayRequiresKey)Ú	conditionÚextrac             C   s@   g }x | j D ]\}}| || ¡ qW |s.dS dd t|ƒ¡ S )zBCompose the version predicates for requirement in PEP 345 fashion.Ú z (%s)ú,)ÚspecsÚappendÚjoinÚsorted)ÚrequirementZrequires_distÚopÚver© r   úQC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\wheel\wheel\metadata.pyÚrequires_to_requires_dist   s    r   c             c   sN   xH| D ]@}t j |¡}t|ƒ}d |j¡}|r6d| }|j| | V  qW dS )z=Yield Requires-Dist: strings for parsed requirements strings.r	   z[%s]N)Úpkg_resourcesÚRequirementÚparser   r   ÚextrasÚproject_name)ÚrequirementsÚreqZparsed_requirementÚspecr   r   r   r   Úconvert_requirements   s    
r   c             c   sš   x”|   ¡ D ]ˆ\}}d}|r<d|kr<| dd¡\}}t |¡}|rfd|fV  |rZd| d }|d| 7 }|rrd| }xt|ƒD ]}d	|| fV  q|W q
W d
S )a,  
    Convert requirements from a setup()-style dictionary to ('Requires-Dist', 'requirement')
    and ('Provides-Extra', 'extra') tuples.

    extras_require is a dictionary of {extra: [requirements]} as passed to setup(),
    using the empty extra {'': [requirements]} to hold install_requires.
    r   ú:r   zProvides-Extraú(z) and zextra == '%s'z; zRequires-DistN)ÚitemsÚsplitr   Ú
safe_extrar   )Zextras_requirer   Údependsr   Znew_reqr   r   r   Úgenerate_requirements*   s    

r#   c       
   	   C   s¸   t |ƒ}| dd¡ tj | d¡}tj |¡r”t|ƒ�}| ¡ }W dQ R X xHtt	 
|¡dd„ d�D ].\}}x$t||iƒD ]}|d ||d	 < qxW qbW |d
 }	|	r´| t|ƒ¡ |d
= |S )zN
    Convert .egg-info directory with PKG-INFO to the Metadata 2.1 format
    zMetadata-Versionz2.1zrequires.txtNc             S   s   | d p
dS )Nr   r   r   )Úxr   r   r   Ú<lambda>M   s    z%pkginfo_to_metadata.<locals>.<lambda>)Úkeyr   r   ÚDescription)r   Úreplace_headerÚosÚpathr   ÚexistsÚopenÚreadr   r   Úsplit_sectionsr#   Úset_payloadÚdedent_description)
Úegg_info_pathZpkginfo_pathÚpkg_infoZrequires_pathZrequires_fileÚrequiresr   ÚreqsÚitemÚdescriptionr   r   r   Úpkginfo_to_metadataB   s    
r7   c             C   sj   | | }|  ¡ }t|tƒsft| dƒs,t|ƒS x8|  ¡ D ],}|d   ¡ |kr6|d  dd¡ d¡}P q6W |S )z<Hack to coax Unicode out of an email Message() - Python 3.3+Ú	raw_itemsr   r   ÚasciiÚsurrogateescapezutf-8)ÚlowerÚ
isinstanceÚstrÚhasattrr8   ÚencodeÚdecode)r2   ÚfieldÚtextr5   r   r   r   Úpkginfo_unicodeY   s    

rC   c          
   C   sr   | d }d}t |tƒs$d}t| dƒ}| ¡ }d |d  ¡ t d |dd… ¡¡df¡}|rn| d¡ 	d	d
¡}|S )z@
    Dedent and convert pkg_info['Description'] to Unicode.
    r'   FTÚ
r   r   NÚutf8r9   r:   )
r<   r=   rC   Ú
splitlinesr   ÚlstripÚtextwrapÚdedentr?   r@   )r2   r6   Z
surrogatesZdescription_linesZdescription_dedentr   r   r   r0   i   s    


r0   )Ú__doc__Úos.pathr)   ÚrerH   Úcollectionsr   r   Zpkginfor   ÚcompileZEXTRA_REr   r   r   r#   r7   rC   r0   r   r   r   r   Ú<module>   s   


