
!dV`                 @   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 d	 d   Z d
 d   Z d d   Z	 d d   Z
 d d   Z y e d d   Z Wn e k
 r d d   Z Yn Xy  e d d   Z d d   Z Wn* e k
 rd d   Z d d   Z Yn XGd d   d e  Z e j d k rd d l Z e d d 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_requirementc             C   s   t  j |   j t d   S)z!urlsafe_b64encode without padding=)base64r   rstripbinary)data r   +/tmp/pip-build-0jahl3lb/wheel/wheel/util.pyr      s    c             C   s)   d d t  |   d @} t j |  |  S)z!urlsafe_b64decode without padding   =      )lenr	   r   )r   padr   r   r   r      s    c             C   s   t  j |  d d S)zConvert given data to JSON.	sort_keysT)jsondumps)or   r   r   r      s    c             C   s   t  j |   S)zDecode a JSON payload.)r   loads)jr   r   r   r      s    c             C   sI   t  j d d k  r" i  } d } n i d d 6} d } t |  | | |  S)Nr   r   b newline)sysversion_infoopen)namemodenlbinr   r   r   open_for_csv    s    	r$   c             C   s    t  |  t  r |  j d  S|  S)zUtf-8 encode data.zutf-8)
isinstanceunicodeencode)r   r   r   r   r   ,   s    c             C   s    t  |  t  r |  j d  S|  S)zUtf-8 encode data.zutf-8)r%   strr'   )r   r   r   r   r   2   s    c             C   s   |  S)Nr   )sr   r   r   native=   s    r*   c             C   s    t  |  t  r |  j d  S|  S)Nascii)r%   r&   r'   )r)   r   r   r   r   ?   s    r   c             C   s    t  |  t  r |  j d  S|  S)Nr+   )r%   bytesdecode)r)   r   r   r   r*   D   s    c             C   s    t  |  t  r |  j d  Sd  S)Nr+   )r%   r(   r'   )r)   r   r   r   r   H   s    c               @   sC   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d
 S)HashingFilesha256c             C   s1   | |  _  | |  _ t j |  |  _ d |  _ d  S)Nr   )fdhashtypehashlibnewhashlength)selfr0   r1   r   r   r   __init__M   s    		zHashingFile.__init__c             C   s9   |  j  j |  |  j t |  7_ |  j j |  d  S)N)r4   updater5   r   r0   write)r6   r   r   r   r   r9   R   s    zHashingFile.writec             C   s   |  j  j   d  S)N)r0   close)r6   r   r   r   r:   V   s    zHashingFile.closec             C   sF   |  j  d k r |  j j   S|  j j   } |  j  d t t |   S)Nmd5r   )r1   r4   	hexdigestdigestr*   r   )r6   r=   r   r   r   r=   X   s    zHashingFile.digestN)__name__
__module____qualname__r7   r9   r:   r=   r   r   r   r   r.   L   s   r.   win32CSIDL_APPDATA   CSIDL_LOCAL_APPDATA   CSIDL_COMMON_APPDATA#   c             C   sE   d } t  j t  j j  } t  j j j d t |  d | |  | j S)Nr   )	ctypescreate_unicode_bufferZwintypesZMAX_PATHwindllshell32SHGetFolderPathWcsidlvalue)r    ZSHGFP_TYPE_CURRENTbufr   r   r   get_pathd   s    #rP   c              G   sG   t  d  } t j j | |   } t j j |  sC t j |  n  | S)NrD   )rP   ospathjoinisdirmakedirs)resourceZappdatarR   r   r   r   save_config_pathj   s
    rW   c              g   s\   d d g } xI | D]A } t  |  } t j j | |   } t j j |  r | Vq q Wd  S)NrD   rF   )rP   rQ   rR   rS   exists)rV   idsidbaserR   r   r   r   load_config_pathsp   s    r\   c              G   s   d d  l  } | j j |    S)Nr   )xdg.BaseDirectoryBaseDirectoryrW   )rV   xdgr   r   r   rW   x   s    c              G   s   d d  l  } | j j |    S)Nr   )r]   r^   r\   )rV   r_   r   r   r   r\   {   s    c             C   s   y d d l  m } m } Wn t k
 r: t d   Yn X| j |   }  g  } xZ | D]R } | j } | d | j d  d | j d   } | |  k rW | j |  qW qW W| S)zList 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_resourcesproject_namer    versionver)	pkg_resourcesr`   ra   ImportErrorRuntimeErrorparseZparsed_filenamegroupappend)reqwheelsr`   ra   selectedZwffdistr   r   r   r      s    	')__doc__r   rQ   r	   r   r2   __all__r   r   r   r   r$   r&   r   	NameErrorr*   r   objectr.   platformZctypes.wintypesrH   dictrM   rP   rW   r\   r   r   r   r   r   <module>   sF   			