
R\4m                 @   sG  d  d l  m Z d  d l 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
 Z
 d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l 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 m Z m Z d d l m Z d d l m  Z  m! Z! d d	 l" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( m) Z) e j* e+  Z, e- e d
  rd Z. n9 e j/ j0 d  rd Z. n e j/ d k rd Z. n d Z. e j1 d  Z2 e2 rd e j3 d d  Z2 n  d e2 Z4 e. e2 Z5 e j" j6   j7 d d  j7 d d  Z8 e j1 d  Z9 e9 oXe9 j0 d  rpe9 j7 d d  Z9 n d Z9 e j: d e j; e j< B Z= e j: d e j; e j< B Z> e j: d  Z? e j@ d k rd d    ZA n d! d    ZA Gd" d#   d# eB  ZC eC   ZD Gd$ d%   d% eB  ZE d& d'   ZF eF   ZG [F d d( d)  ZH d S)*    )unicode_literalsN)message_from_file   )__version__DistlibException)	sysconfigZipFilefsdecode	text_typefilter)InstalledDistribution)MetadataMETADATA_FILENAME)FileOperatorconvert_path	CSVReader	CSVWritercached_propertyget_cache_baseread_exportspypy_version_infoppjavajycliipcppy_version_nodotz%s%s   py-_.SOABIzcpython-nonezr
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?
-(?P<py>\w+\d+(\.\w+\d+)*)
-(?P<bi>\w+)
-(?P<ar>\w+)
\.whl$
z7
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?$
s   \s*#![^\r\n]*/c             C   s   |  S)N )or&   r&   </var/www/dbchiro/venv/build/pip/pip/_vendor/distlib/wheel.py<lambda>O   s    r)   c             C   s   |  j  t j d  S)Nr%   )replaceossep)r'   r&   r&   r(   r)   Q   s    c               @   sO   e  Z d  Z d d   Z d d   Z d d   Z d d d	  Z d
 d   Z d S)Mounterc             C   s   i  |  _  i  |  _ d  S)N)impure_wheelslibs)selfr&   r&   r(   __init__U   s    	zMounter.__init__c             C   s!   | |  j  | <|  j j |  d  S)N)r.   r/   update)r0   pathname
extensionsr&   r&   r(   addY   s    zMounter.addc             C   sI   |  j  j |  } x0 | D]( \ } } | |  j k r |  j | =q q Wd  S)N)r.   popr/   )r0   r3   r4   kvr&   r&   r(   remove]   s    zMounter.removeNc             C   s"   | |  j  k r |  } n d  } | S)N)r/   )r0   fullnamepathresultr&   r&   r(   find_modulec   s    	zMounter.find_modulec             C   s   | t  j k r t  j | } nx | |  j k rA t d |   n  t j | |  j |  } |  | _ | j d d  } t |  d k r | d | _	 n  | S)Nzunable to find extension for %sr"   r   r   )
sysmodulesr/   ImportErrorimpload_dynamic
__loader__rsplitlen__package__)r0   r:   r<   partsr&   r&   r(   load_modulej   s    	zMounter.load_module)__name__
__module____qualname__r1   r5   r9   r=   rH   r&   r&   r&   r(   r-   T   s
   r-   c               @   s   e  Z d  Z d Z d" Z d Z d d d d d  Z e d d	    Z e d
 d    Z	 e
 d d    Z e
 d d    Z d d   Z d d d  Z d d   Z d d d d  Z d d   Z d d   Z d d   Z d d d  Z d  d!   Z d S)#Wheelz@
    Class to build and install from Wheel files (PEP 427).
    r   sha256NFc             C   s  | |  _  | |  _ d |  _ t g |  _ d g |  _ d g |  _ t j   |  _	 | d k r{ d |  _
 d |  _ |  j |  _ n9t j |  } | r | j d  } | d |  _
 | d |  _ | d	 |  _ |  j |  _ n t j j |  \ } } t j |  } | st d
 |   n  | r3t j j |  |  _	 n  | |  _ | j d  } | d |  _
 | d |  _ | d	 |  _ | d j d  |  _ | d j d  |  _ | d j d  |  _ d S)zB
        Initialise an instance using a (valid) filename.
         r$   anyNdummyz0.1nmvnZbnzInvalid name or filename: %rr   r"   Zbiar)signverifybuildverPYVERpyverabiarchr+   getcwddirnamenameversionfilename	_filenameNAME_VERSION_REmatch	groupdictr;   splitFILENAME_REr   abspath)r0   r_   rT   rU   minfor\   r&   r&   r(   r1      sB    						zWheel.__init__c             C   su   |  j  r d |  j  } n d } d j |  j  } d j |  j  } d j |  j  } d |  j |  j | | | | f S)zJ
        Build and return a filename from the various components.
        r    rN   r"   z%s-%s%s-%s-%s-%s.whl)rV   joinrX   rY   rZ   r]   r^   )r0   rV   rX   rY   rZ   r&   r&   r(   r_      s    	zWheel.filenamec             c   sN   xG |  j  D]< } x3 |  j D]( } x |  j D] } | | | f Vq* Wq Wq
 Wd  S)N)rX   rY   rZ   )r0   rX   rY   rZ   r&   r&   r(   tags   s    z
Wheel.tagsc       
      C   s   t  j j |  j |  j  } d |  j |  j f } d | } t j d  } t	 j | t
  } t | d  c } y7 | j |  " } | |  } t d |  }	 Wd  QXWn" t k
 r t d t
   Yn XWd  QX|	 S)Nz%s-%sz%s.dist-infozutf-8rfileobjz$Invalid wheel, because %s is missing)r+   r;   ri   r\   r_   r]   r^   codecs	getreader	posixpathr   r   openr   KeyError
ValueError)
r0   r3   name_verinfo_dirwrappermetadata_filenamezfbfwfr<   r&   r&   r(   metadata   s    
zWheel.metadatac             C   s   t  j j |  j |  j  } d |  j |  j f } d | } t j | d  } t j	 d  } t
 | d  C } | j |  + } | |  } t |  }	 t |	  }
 Wd  QXWd  QX|
 S)Nz%s-%sz%s.dist-infoWHEELzutf-8rk   )r+   r;   ri   r\   r_   r]   r^   ro   rm   rn   r   rp   r   dict)r0   r3   rs   rt   rv   ru   rw   rx   ry   messager<   r&   r&   r(   rh      s    
z
Wheel.infoc             C   s   t  j |  } | r2 d | | j   d   } nv | j d  } | j d  } | d k  sh | | k rq d } n) | | | d  d k r d } n d } d | | } | S)Ns   #!pythons   s   
r   r   s   
)
SHEBANG_RErb   endfind)r0   datarg   crlftermr&   r&   r(   process_shebang   s    		zWheel.process_shebangc             C   s   | d  k r |  j  } n  y t t |  } Wn" t k
 rO t d |   Yn X| |  j   } t j |  j d  j	 d  } | | f S)NzUnsupported hash algorithm: %r   =ascii)
	hash_kindgetattrhashlibAttributeErrorr   digestbase64urlsafe_b64encoderstripdecode)r0   r   r   hasherr<   r&   r&   r(   get_hash   s    !zWheel.get_hashc             C   sh   t  |  V } x | D] } | j |  q Wt t j j | |   } | j | d d f  Wd  QXd  S)NrN   )r   writerowto_posixr+   r;   relpath)r0   recordsZrecord_pathbasewriterrowpr&   r&   r(   write_record   s
    zWheel.write_recordc       &         s  | d k r i  } n  t  t   f d d   d'   d } | d k rj d } t g } t g } t g } n! d } t g } d	 g } d
 g } | j d |  |  _ | j d |  |  _ | j d |  |  _	   | }	 d |  j
 |  j f }
 d |
 } d |
 } g  } xKd( D]C} |   k r#qn    | } t j j |  rxt j |  D] \ } } } x | D] } t t j j | |   } t j j | |  } t t j j | | |   } | j | | f  | d k re| j d  ret | d   } | j   } Wd QX|  j |  } t | d   } | j |  Wd QXqeqeWqOWqqW|	 } d } xt j |  D] \ } } } | | k rxU t |  D]G \ } } t |  } | j d  rt j j | |  } | | =PqqW| st d   n  xl | D]d } t |  j d)  rqn  t j j | |  } t t j j | |   } | j | | f  qWqnWt j |  } xf | D]^ } | d* k rt t j j | |   } t t j j | |   } | j | | f  qqWd | p|  j d t d  | g } x4 |  j D]) \ } } } | j d! | | | f  qWt j j | d"  } t | d#   } | j d$ j |   Wd QXt t j j | d"   } | j | | f  g  }  t  t! |  j"  }! xs | D]k \ } } t | d   } | j   } Wd QXd% |  j# |  }" t j j$ |  }# |  j | |" |# f  qWt j j | d  } |  j% |  | |	  t t j j | d   } | j | | f  t j j |  j& |  j'  }$ t( |$ d# t) j*  A }% x7 | D]/ \ } } t+ j, d& | |  |% j | |  qWWd QX|$ S)+z
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Nc                s
   |    k S)Nr&   )r'   )pathsr&   r(   r)   
  s    zWheel.build.<locals>.<lambda>purelibplatlibr   falsetruer$   rO   rX   rY   rZ   z%s-%sz%s.dataz%s.dist-infor   headersscriptsz.exerbwbz
.dist-infoz(.dist-info directory expected, not found.pyc.pyoRECORD	INSTALLERSHAREDzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %szTag: %s-%s-%sr{   w
z%s=%szWrote %s to %s in wheel)zpurelibzplatlib)zdatazheaderszscripts)r   r   )zRECORDr   r   )-listr   IMPVERABIARCHrW   getrX   rY   rZ   r]   r^   r+   r;   isdirwalkr	   ri   r   r   appendendswithrp   readr   write	enumerateAssertionErrorlistdirwheel_versionr   rj   r   r   r   r   getsizer   r\   r_   r   zipfileZIP_DEFLATEDloggerdebug)&r0   r   rj   r   Zlibkeyis_pureZdefault_pyverZdefault_abiZdefault_archlibdirrs   data_dirrt   Zarchive_pathskeyr;   rootdirsfilesfnr   rpZapfr   ZdistinfoidnZwheel_metadatarX   rY   rZ   r   r   r   sizer3   rw   r&   )r   r(   build  s    	%					



%zWheel.buildc       B   C   K   s	  | j  } | j d  } | j d d  } t j j |  j |  j  } d |  j |  j f } d | }	 d | }
 t	 j |
 t
  } t	 j |
 d  } t	 j |
 d  } t j d	  } t | d
  } | j |   } | |  } t |  } Wd QX| d j d d  } t d d   | D  } | |  j k rM| rM| |  j |  n  | d d k rj| d } n
 | d } i  } | j |  D } t d |  , } x" | D] } | d } | | | <qWWd QXWd QXt	 j |	 d  } t	 j |
 d  } t	 j |	 d d  } t d |  } d | _ t j } g  }  t j   }! |! | _ d | _ zyx| j   D]}" |" j }# t |# t  r|# }$ n |# j d	  }$ |$ j  d  rqan  | |$ } | d rt! |" j"  | d k rt# d |$   n  | d rp| d j d d  \ }% }& | j |#   } | j$   }' Wd QX|  j% |' |%  \ }( }) |) |& k rpt# d |#   qpn  | r|$ j& | | f  rt' j( d  |$  qan  |$ j& |  o|$ j  d!  }* |$ j& |  r|$ j d" d  \ }( }+ }, t j j | |+ t) |,   }- n3 |$ | | f k r$qan  t j j | t) |$   }- |* sL| j |#   } | j* | |-  Wd QX|  j+ |-  | r| d rt |- d#  J } | j$   }' |  j% |' |%  \ }( }. |. |) k rt# d$ |-   n  Wd QXn  | r|- j  d%  ry  | j, |-  }/ |  j+ |/  WqIt- k
 rEt' j. d& d' d YqIXqqat j j/ t) |#   }0 t j j |! |0  }1 | j |#   } | j* | |1  Wd QXt j j |-  \ }2 }0 |2 | _ | j0 |0  }3 | j1 |3  |  j2 |3  qaW| rt' j( d(  d }4 n$d }5 |  j3 d } | d) k r&t	 j |
 d*  }6 y | j |6   } t4 |  }7 Wd QXi  }5 x d; D] }8 d- |8 }9 |9 |7 k rpi  |5 d. |8 <}: x[ |7 |9 j5   D]F }; d/ |; j6 |; j7 f }< |; j8 r|< d0 |; j8 7}< n  |< |: |; j <qWqpqpWWqt- k
 r"t' j. d1  YqXnb y@ | j |  + } | |  } t9 j: |  j d2  }5 Wd QXWn t- k
 rt' j. d3  Yn X|5 r|5 j d4 i   }= |5 j d5 i   }> |= s|> r| j d d  }? t j j; |?  st< d6   n  |? | _ xF |= j=   D]8 \ }9 }; d7 |9 |; f }@ | j0 |@  }3 | j1 |3  qW|> ri d d, 6}A xL |> j=   D]; \ }9 }; d7 |9 |; f }@ | j0 |@ |A  }3 | j1 |3  qcWqqn  t j j | |
  } t> |  }4 t? |  } | d =| d =| | d8 <|4 j@ | |  } | r	|  j+ |  n  |4 jA |  | d9 |  |4 SWn, t- k
 rb	t' jB d:  | jC     Yn XWd tD jE |!  XWd QXd S)<a  
        Install a wheel to the specified paths. If kwarg ``warner`` is
        specified, it should be a callable, which will be called with two
        tuples indicating the wheel version of this software and the wheel
        version in the file, if there is a discrepancy in the versions.
        This can be used to issue any warnings to raise any exceptions.
        If kwarg ``lib_only`` is True, only the purelib/platlib files are
        installed, and the headers, scripts, data and dist-info metadata are
        not written.

        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        warnerlib_onlyFz%s-%sz%s.dataz%s.dist-infor{   r   zutf-8rk   NzWheel-Versionr"   r   c             S   s   g  |  ] } t  |   q Sr&   )int).0r   r&   r&   r(   
<listcomp>  s   	 z!Wheel.install.<locals>.<listcomp>zRoot-Is-Purelibr   r   r   streamr   rN   r   dry_runTz/RECORD.jwsr   zsize mismatch for %s=zdigest mismatch for %szlib_only: skipping %sz.exer%   r   zdigest mismatch on write for %sz.pyzByte-compilation failedexc_infozlib_only: returning Nonez1.0zentry_points.txtconsoleguiz
%s_scriptszwrap_%sz%s:%sz %szAUnable to read legacy script metadata, so cannot generate scriptscommandsz8Unable to read JSON metadata, so cannot generate scriptsZwrap_consoleZwrap_guizValid script path not specifiedz%s = %slibprefixzinstallation failed.)zconsolezgui)Fr   r   r+   r;   ri   r\   r_   r]   r^   ro   r   rm   rn   r   rp   r   rd   tupler   r   r   recordr>   dont_write_bytecodetempfilemkdtemp
source_dir
target_dirinfolist
isinstancer
   r   r   str	file_sizer   r   r   
startswithr   r   r   copy_streamr   byte_compile	Exceptionwarningbasenamemakeset_executable_modeextendrh   r   valuesr   suffixflagsjsonloadr   rr   itemsr   r|   Zwrite_shared_locationsZwrite_installed_files	exceptionrollbackshutilrmtree)Br0   r   makerkwargsr   r   r   r3   rs   r   rt   Zmetadata_nameZwheel_metadata_nameZrecord_nameru   rw   Zbwfry   r}   ZwvZfile_versionr   r   rx   readerr   r   Zdata_pfxZinfo_pfxZ
script_pfxfileopZbcoutfilesZworkdirzinfoarcnameZ	u_arcnamekindvaluer   r!   r   Z	is_scriptwherer   outfileZ	newdigestZpycr   Zworknamer   	filenamesdistr   epZepdatar   r7   dr8   sconsole_scriptsgui_scriptsZ
script_dirscriptoptionsr&   r&   r(   instally  s>   	



	
				
#
"		
	"	

zWheel.installc             C   sT   t  j j t   t d  t j d  d   } t  j j |  sP t  j |  n  | S)Nzdylib-cache   )	r+   r;   ri   r   r   r>   r^   r   makedirs)r0   r<   r&   r&   r(   _get_dylib_cache[  s    .zWheel._get_dylib_cachec             C   s  t  j j |  j |  j  } d |  j |  j f } d | } t j | d  } t j	 d  } g  } t
 | d  /} y| j |   } | |  }	 t j |	  }
 |  j   } x |
 j   D] \ } } t  j j | t |   } t  j j |  s d } nQ t  j |  j } t j j |  } | j |  } t j | j   } | | k } | ri| j | |  n  | j | | f  q WWd  QXWn t k
 rYn XWd  QX| S)Nz%s-%sz%s.dist-infoZ
EXTENSIONSzutf-8rk   T)r+   r;   ri   r\   r_   r]   r^   ro   rm   rn   r   rp   r   r   r  r   r   existsstatst_mtimedatetimefromtimestampgetinfo	date_timeextractr   rq   )r0   r3   rs   rt   r   ru   r<   rw   rx   ry   r4   Z
cache_baser]   r   destr  Z	file_timerh   Z
wheel_timer&   r&   r(   _get_extensionsb  s6    
	!zWheel._get_extensionsc             C   s   t  j j t  j j |  j |  j   } t |   sL d | } t |   n  | t j k rn t	 j
 d |  ns | r t j j |  n t j j d |  |  j   } | r t t j k r t j j t  n  t j | |  n  d  S)Nz&Wheel %s not mountable in this Python.z%s already in pathr   )r+   r;   rf   ri   r\   r_   is_compatibler   r>   r   r   r   insertr  _hook	meta_pathr5   )r0   r   r3   msgr4   r&   r&   r(   mount  s    '
zWheel.mountc             C   s   t  j j t  j j |  j |  j   } | t j k rI t j d |  n] t j j	 |  | t
 j k rx t
 j	 |  n  t
 j s t
 t j k r t j j	 t
  q n  d  S)Nz%s not in path)r+   r;   rf   ri   r\   r_   r>   r   r   r9   r  r.   r  )r0   r3   r&   r&   r(   unmount  s    '	zWheel.unmount)r   r   )rI   rJ   rK   __doc__r   r   r1   propertyr_   rj   r   rz   rh   r   r   r   r   r  r  r  r!  r"  r&   r&   r&   r(   rL   z   s"   (wrL   c        
      C   s   t  g }  t  d } xG t t j d d d
 d  D]( } |  j d j | t |  g   q1 Wg  } xL t j   D]> \ } } } | j	 d  rp | j | j
 d d  d  qp qp W| j   t d k r | j d t  n  | j d  g  } x7 | D]/ } | j d j t |  d f  | t f  q Wxw t |   D]i \ } }	 | j d j t |	 f  d d f  | d k r5| j d j t |	 d f  d d f  q5q5Wxw t |   D]i \ } }	 | j d j d	 |	 f  d d f  | d k r| j d j d	 |	 d f  d d f  qqW| S)zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    r   r   rN   z.abir"   r   r$   rO   r   r%  )
VER_SUFFIXranger>   version_infor   ri   r   rA   get_suffixesr   rd   sortr   r  
IMP_PREFIXr   r   )
versionsmajorminorabisr   r!   r<   rY   r   r^   r&   r&   r(   compatible_tags  s0    	
$&$
-%0%0r0  c             C   s   t  |  t  s t |   }  n  d } | d  k r9 t } n  xN | D]F \ } } } | |  j k r@ | |  j k r@ | |  j k r@ d } Pq@ q@ W| S)NFT)r   rL   COMPATIBLE_TAGSrX   rY   rZ   )wheelrj   r<   verrY   rZ   r&   r&   r(   r    s    	-r  )I
__future__r   r   rm   r  distutils.util	distutilsemailr   r   rA   r   loggingr+   ro   rer   r>   r   r   rN   r   r   compatr   r   r	   r
   r   Zdatabaser   rz   r   r   utilr   r   r   r   r   r   r   	getLoggerrI   r   hasattrr+  platformr   get_config_varr&  r(  rW   r   get_platformr*   r   r   compile
IGNORECASEVERBOSEre   ra   r~   r,   r   objectr-   r  rL   r0  r1  r  r&   r&   r&   r(   <module>   sp   (4			

'#	  '%	