B
    @)H[,  ã               @   s  d Z ddlZddlZddlZddlZddlZddddddgZejd d	k rZeZ	d'dd„Z
ne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G dd„ deƒZejdkrèddlZddddœZdd„ Zd d!„ Zd"d#„ Znd$d!„ Zd%d#„ Zd&d„ ZdS ))zUtility functions.é    NÚurlsafe_b64encodeÚurlsafe_b64decodeÚutf8Úto_jsonÚ	from_jsonÚmatches_requirementé   Úasciic             C   s   | S )N© )ÚsÚencodingr
   r
   úMC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\wheel\wheel\util.pyÚnative   s    r   c             C   s   t | tƒr|  |¡S | S )N)Ú
isinstanceÚbytesÚdecode)r   r   r
   r
   r   r      s    

c             C   s   t  | ¡ tdƒ¡S )z!urlsafe_b64encode without paddingú=)Úbase64r   ÚrstripÚbinary)Údatar
   r
   r   r      s    c             C   s"   ddt | ƒd@   }t | | ¡S )z!urlsafe_b64decode without paddingó   =é   r   )Úlenr   r   )r   Úpadr
   r
   r   r   "   s    c             C   s   t j| dd�S )zConvert given data to JSON.T)Ú	sort_keys)ÚjsonÚdumps)Úor
   r
   r   r   (   s    c             C   s
   t  | ¡S )zDecode a JSON payload.)r   Úloads)Újr
   r
   r   r   -   s    c             C   s4   t jd dk ri }|d7 }n
dddœ}t| |f|ŽS )Nr   r   ÚbÚ zutf-8)Únewliner   )ÚsysÚversion_infoÚopen)ÚnameÚmodeÚkwargsr
   r
   r   Úopen_for_csv2   s
    

r*   c             C   s   t | tƒr|  d¡S | S )zUtf-8 encode data.zutf-8)r   Ú	text_typeÚencode)r   r
   r
   r   r   <   s    

c             C   s   t | tƒr|  d¡S | S )Nr	   )r   r+   r,   )r   r
   r
   r   r   C   s    

r   c               @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚHashingFileÚsha256c             C   s(   t ||ƒ| _|| _t |¡| _d| _d S )Nr   )r&   ÚfdÚhashtypeÚhashlibÚnewÚhashÚlength)ÚselfÚpathr(   r0   r
   r
   r   Ú__init__J   s    zHashingFile.__init__c             C   s.   | j  |¡ |  jt|ƒ7  _| j |¡ d S )N)r3   Úupdater4   r   r/   Úwrite)r5   r   r
   r
   r   r9   P   s    zHashingFile.writec             C   s   | j  ¡  d S )N)r/   Úclose)r5   r
   r
   r   r:   U   s    zHashingFile.closec             C   s4   | j dkr| j ¡ S | j ¡ }| j d tt|ƒƒ S )NÚmd5r   )r0   r3   Ú	hexdigestÚdigestr   r   )r5   r=   r
   r
   r   r=   X   s    


zHashingFile.digestc             C   s   | S )Nr
   )r5   r
   r
   r   Ú	__enter__^   s    zHashingFile.__enter__c             C   s   | j  ¡  d S )N)r/   r:   )r5   Úexc_typeÚexc_valÚexc_tbr
   r
   r   Ú__exit__a   s    zHashingFile.__exit__N)r.   )	Ú__name__Ú
__module__Ú__qualname__r7   r9   r:   r=   r>   rB   r
   r
   r
   r   r-   I   s   
r-   Úwin32é   é   é#   )ÚCSIDL_APPDATAÚCSIDL_LOCAL_APPDATAÚCSIDL_COMMON_APPDATAc             C   s2   d}t  t jj¡}t jj dt|  d||¡ |jS )Nr   )	ÚctypesÚcreate_unicode_bufferÚwintypesÚMAX_PATHÚwindllÚshell32ÚSHGetFolderPathWÚcsidlÚvalue)r'   ÚSHGFP_TYPE_CURRENTÚbufr
   r
   r   Úget_pathk   s    rX   c              G   s4   t dƒ}tjj|f| žŽ }tj |¡s0t |¡ |S )NrK   )rX   Úosr6   ÚjoinÚisdirÚmakedirs)ÚresourceZappdatar6   r
   r
   r   Úsave_config_pathq   s
    
r^   c              g   sF   ddg}x8|D ]0}t |ƒ}tjj|f| žŽ }tj |¡r|V  qW d S )NrK   rL   )rX   rY   r6   rZ   Úexists)r]   ÚidsÚidÚbaser6   r
   r
   r   Úload_config_pathsx   s    
rc   c              G   s   dd l }|jj| Ž S )Nr   )Úxdg.BaseDirectoryÚBaseDirectoryr^   )r]   Úxdgr
   r
   r   r^   €   s    c              G   s   dd l }|jj| Ž S )Nr   )rd   re   rc   )r]   rf   r
   r
   r   rc   „   s    c             C   s‚   yddl m}m} W n tk
r0   tdƒ‚Y nX | | ¡} g }x<|D ]4}|j}|| d¡| d¡d�}|| krF| |¡ qFW |S )z„List of wheels matching a requirement.

    :param req: The requirement to satisfy
    :param wheels: List of wheels to search.
    r   )ÚDistributionÚRequirementz-Cannot use requirements without pkg_resourcesr'   Úver)Úproject_nameÚversion)	Úpkg_resourcesrg   rh   ÚImportErrorÚRuntimeErrorÚparseZparsed_filenameÚgroupÚappend)ÚreqÚwheelsrg   rh   ÚselectedZwfÚfÚdistr
   r
   r   r   ‰   s    

)r	   )r	   )Ú__doc__r   r1   r   rY   r$   Ú__all__r%   Úunicoder+   r   Ústrr   r   r   r   r*   r   r   Úobjectr-   ÚplatformZctypes.wintypesrM   rT   rX   r^   rc   r   r
   r
   r
   r   Ú<module>   s:   




