� ��abc@s�ddlmZddlZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlm Z m!Z!dd l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-m.Z.e j/e0�Z1e2a3e4ed �r�d Z5n9ej6j7d �r�dZ5nej6dkr�dZ5ndZ5ej8d�Z9e9 rdej:d Z9nde9Z;e5e9Z<ej"j=�j>dd�j>dd�Z?ej8d�Z@e@oze@j7d�r�e@j>dd�Z@nd�ZAeA�Z@[AejBdejCejDB�ZEejBdejCejDB�ZFejBd�ZGejBd�ZHd ZId!ZJe jKd"kr$d#�ZLn d$�ZLd%eMfd&��YZNeN�ZOd'eMfd(��YZPd)�ZQeQ�ZR[Qe2d*�ZSdS(+i����(tunicode_literalsN(tmessage_from_filei(t __version__tDistlibException(t sysconfigtZipFiletfsdecodet text_typetfilter(tInstalledDistribution(tMetadatatMETADATA_FILENAME( t FileOperatort convert_patht CSVReadert CSVWritertCachetcached_propertytget_cache_baset read_exportsttempdir(tNormalizedVersiontUnsupportedVersionErrorupypy_version_infouppujavaujyucliuipucpupy_version_nodotu%s%siupyu-u_u.uSOABIucpython-cCs|dtg}tjd�r+|jd�ntjd�rJ|jd�ntjd�dkro|jd�nd j|�S( NucpuPy_DEBUGudu WITH_PYMALLOCumuPy_UNICODE_SIZEiuuu(t VER_SUFFIXRtget_config_vartappendtjoin(tparts((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt _derive_abi;s uz (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+(\.\w+)*) \.whl$ u7 (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ s \s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons #!pythonwu/cCs|S(N((to((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt]tcCs|jtjd�S(Nu/(treplacetostsep(R((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR_RtMountercBs8eZd�Zd�Zd�Zdd�Zd�ZRS(cCsi|_i|_dS(N(t impure_wheelstlibs(tself((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt__init__cs cCs!||j|<|jj|�dS(N(R$R%tupdate(R&tpathnamet extensions((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytaddgs cCsI|jj|�}x0|D](\}}||jkr|j|=qqWdS(N(R$tpopR%(R&R)R*tktv((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytremovekscCs"||jkr|}nd}|S(N(R%tNone(R&tfullnametpathtresult((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt find_moduleqs cCs�|tjkrtj|}nx||jkrAtd|��ntj||j|�}||_|jdd�}t|�dkr�|d|_ n|S(Nuunable to find extension for %su.ii( tsystmodulesR%t ImportErrortimpt load_dynamict __loader__trsplittlent __package__(R&R1R3R((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt load_modulexs N(t__name__t __module__R'R+R/R0R4R>(((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR#bs     tWheelcBseZdZdZdZdeed�Zed��Z ed��Z ed��Z e d��Z d�Ze d ��Zd �Zdd �Zd �Zd �Zd�Zddd�Zd�Zd�Zd�Zd�Zd�Zed�Zd�Zd�Zdd�ZRS(u@ Class to build and install from Wheel files (PEP 427). iusha256cCs�||_||_d|_tg|_dg|_dg|_tj�|_ |dkr{d|_ d|_ |j |_nEtj|�}|r�|jd�}|d|_ |djdd �|_ |d |_|j |_n�tjj|�\}}tj|�}|s!td |��n|r?tjj|�|_ n||_|jd�}|d|_ |d|_ |d |_|d jd �|_|djd �|_|djd �|_dS(uB Initialise an instance using a (valid) filename. uunoneuanyudummyu0.1unmuvnu_u-ubnuInvalid name or filename: %rupyu.ubiuarN(tsignt should_verifytbuildvertPYVERtpyvertabitarchR!tgetcwdtdirnameR0tnametversiontfilenamet _filenametNAME_VERSION_REtmatcht groupdictR R2tsplitt FILENAME_RERtabspath(R&RMRBtverifytmtinfoRJ((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR'�sB                cCs�|jrd|j}nd}dj|j�}dj|j�}dj|j�}|jjdd�}d|j|||||fS(uJ Build and return a filename from the various components. u-uu.u_u%s-%s%s-%s-%s-%s.whl(RDRRFRGRHRLR RK(R&RDRFRGRHRL((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyRM�s cCs+tjj|j|j�}tjj|�S(N(R!R2RRJRMtisfile(R&R2((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytexists�sccsNxG|jD]<}x3|jD](}x|jD]}|||fVq*WqWq WdS(N(RFRGRH(R&RFRGRH((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyttags�sc Cs8tjj|j|j�}d|j|jf}d|}tjd�}t |d���}|j |�}|dj dd�}t g|D]}t |�^q��} | d kr�d} nt} yItj|| �} |j| ��"} || �} td | �}WdQXWn!tk r-td | ��nXWdQX|S( Nu%s-%su %s.dist-infouutf-8uru Wheel-Versionu.iuMETADATAtfileobju$Invalid wheel, because %s is missing(ii(R!R2RRJRMRKRLtcodecst getreaderRtget_wheel_metadataRRttupletintR t posixpathtopenR tKeyErrort ValueError(R&R)tname_vertinfo_dirtwrappertzftwheel_metadatatwvtit file_versiontfntmetadata_filenametbftwfR3((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytmetadata�s( %    cCsud|j|jf}d|}tj|d�}|j|��(}tjd�|�}t|�}WdQXt|�S(Nu%s-%su %s.dist-infouWHEELuutf-8( RKRLRaRRbR\R]Rtdict(R&RhReRfRnRoRptmessage((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR^�s cCsFtjj|j|j�}t|d��}|j|�}WdQX|S(Nur(R!R2RRJRMRR^(R&R)RhR3((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyRW�sc Cstj|�}|r�|j�}|| ||}}d|j�krQt}nt}tj|�}|r�d|j�d}nd}||}||}ns|jd�}|jd�} |dks�|| kr�d} n&|||d!d kr�d } nd} t| |}|S( Ntpythonwt i����Rs s iis ( t SHEBANG_RERPtendtlowertSHEBANG_PYTHONWtSHEBANG_PYTHONtSHEBANG_DETAIL_REtgroupstfind( R&tdataRVRwtshebangtdata_after_shebangtshebang_pythontargstcrtlftterm((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytprocess_shebang�s,      cCs�|dkr|j}nytt|�}Wn!tk rNtd|��nX||�j�}tj|�j d�j d�}||fS(NuUnsupported hash algorithm: %rt=uascii( R0t hash_kindtgetattrthashlibtAttributeErrorRtdigesttbase64turlsafe_b64encodetrstriptdecode(R&R~R�thasherR3((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytget_hashs   !cCs~t|�}ttjj||��}|j|ddf�|j�t|��%}x|D]}|j|�q]WWdQXdS(Nu( tlisttto_posixR!R2trelpathRtsortRtwriterow(R&trecordst record_pathtbasetptwritertrow((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt write_record's   cCs�g}|\}}tt|j�}xs|D]k\}} t| d��} | j�} WdQXd|j| �} tjj| �} |j || | f�q+Wtjj |d�} |j || |�t tjj |d��}|j || f�dS(Nurbu%s=%suRECORD( R�R�R�RbtreadR�R!R2tgetsizeRRR�R�(R&RWtlibdirt archive_pathsR�tdistinfoRfR�tapR�tfR~R�tsize((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt write_records0s c Cs\t|dtj��A}x7|D]/\}}tjd||�|j||�qWWdQXdS(NuwuWrote %s to %s in wheel(Rtzipfilet ZIP_DEFLATEDtloggertdebugtwrite(R&R)R�RhR�R�((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt build_zip@sc! s�|dkri}ntt�fd�d#��d}|dkrgd}tg}tg}tg}n!d}tg}dg}dg}|jd |�|_|jd |�|_ |jd |�|_ �|} d |j |j f} d | } d| } g} xKd$D]C}|�kr qn�|}t jj|�rx t j|�D]�\}}}x�|D]�}tt jj||��}t jj||�}tt jj| ||��}| j||f�|dkrb|jd� rbt|d��}|j�}WdQX|j|�}t|d��}|j|�WdQXqbqbWqLWqqW| }d}x�t j|�D]�\}}}||kr�xXt|�D]G\}}t|�}|jd�r�t jj||�}||=Pq�q�Wnxl|D]d}t|�jd%�r q�nt jj||�}tt jj||��}| j||f�q�WqkWt j|�}xf|D]^}|d&krjtt jj||��}tt jj| |��}| j||f�qjqjWd|p�|jdtd|g}x4|jD])\}}}|jd |||f�q�Wt jj|d�}t|d!��}|jd"j|��WdQXtt jj| d��}| j||f�|j || f| | �t jj|j!|j"�} |j#| | �| S('u� Build a wheel from files in specified paths, and use any specified tags when determining the name of the wheel. cs |�kS(N((R(tpaths(s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyRNRupurelibuplatlibiufalseutrueunoneuanyupyveruabiuarchu%s-%su%s.datau %s.dist-infoudatauheadersuscriptsu.exeurbNuwbu .dist-infou.pycu.pyouRECORDu INSTALLERuSHAREDuWHEELuWheel-Version: %d.%duGenerator: distlib %suRoot-Is-Purelib: %su Tag: %s-%s-%suwu (upurelibuplatlib(udatauheadersuscripts(u.pycu.pyo(uRECORDu INSTALLERuSHAREDuWHEEL($R0R�RtIMPVERtABItARCHREtgetRFRGRHRKRLR!R2tisdirtwalkRRR�R�RtendswithRbR�R�R�t enumeratetlistdirt wheel_versionRRZR�RJRMR�(!R&R�RZR�tlibkeytis_puret default_pyvert default_abit default_archR�Retdata_dirRfR�tkeyR2troottdirstfilesRmR�trpR�R�R~R�RktdnRiRFRGRHR)((R�s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytbuildFs�  "              %      cCKs� |j}|jd�}|jdt�}tjj|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 jd d �}tg|D]}t|�^q�}||jkrY|rY||j|�n|ddkrv|d}n |d}i}|j| ��D}td|��,}x"|D]}|d}||||�jd.�}6|6r�|6jd/�}6nWd QXWnt1k r�t+j2d0�nX|6r�|6jd1i�}>|6jd2i�}?|>s�|?r�|jdd�}@tjj?|@�st@d3��n|@|_xF|>jA�D]8\}:}<d4|:|<f}A|j4|A�}4|j5|4�q(W|?r�itd(6}BxL|?jA�D];\}:}<d4|:|<f}A|j4|A|B�}4|j5|4�q�Wq�q�ntjj|| �}tB|�}5tC|�}|d=|d=||d5<|5jD||�}|r9 |!j/|�n|5jE|!|d6|�|5SWn+t1k r� t+jFd7�|jG��nXWd tHjI|"�XWd QXd S(9u� 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``. uwarnerulib_onlyu%s-%su%s.datau %s.dist-infouWHEELuRECORDuutf-8urNu Wheel-Versionu.iuRoot-Is-Purelibutrueupurelibuplatlibtstreamiuuscriptstdry_runu /RECORD.jwsiusize mismatch for %su=udigest mismatch for %sulib_only: skipping %su.exeu/urbudigest mismatch on write for %su.pyuByte-compilation failedtexc_infoulib_only: returning Noneu1.0uentry_points.txtuconsoleuguiu %s_scriptsuwrap_%su%s:%su %suAUnable to read legacy script metadata, so cannot generate scriptsu extensionsupython.commandsu8Unable to read JSON metadata, so cannot generate scriptsu wrap_consoleuwrap_guiuValid script path not specifiedu%s = %sulibuprefixuinstallation failed.(uconsoleugui(JR�R�tFalseR!R2RRJRMRKRLRaR R\R]RRbRRRR_R`R�RR tTruetrecordR5tdont_write_bytecodettempfiletmkdtempt source_dirR0t target_dirtinfolistt isinstanceRR�R�tstrt file_sizeRR�R�t startswithR�R�R t copy_streamRt byte_compilet Exceptiontwarningtbasenametmaketset_executable_modetextendRWRtvaluestprefixtsuffixtflagstjsontloadR�RdtitemsR Rrtwrite_shared_locationstwrite_installed_filest exceptiontrollbacktshutiltrmtree(CR&R�tmakertkwargsR�twarnertlib_onlyR)ReR�Rft metadata_nametwheel_metadata_namet record_nameRgRhtbwfRpRsRjRkRlR�R�RotreaderR�R�tdata_pfxtinfo_pfxt script_pfxtfileoptbctoutfilestworkdirtzinfotarcnamet u_arcnametkindtvalueR~t_R�t is_scripttwhereR�toutfilet newdigesttpycRmtworknameR�t filenamestdisttcommandsteptepdataR�R-tdR.tstconsole_scriptst gui_scriptst script_dirtscripttoptions((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytinstall�sD    %            #   "                            cCsGtdkrCtjjt�td�tjd �}t |�antS(Nu dylib-cachei( tcacheR0R!R2RRR�R5RLR(R&R�((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt_get_dylib_cache�s  c Cs�tjj|j|j�}d|j|jf}d|}tj|d�}tj d�}g}t |d��w}y\|j |��G}||�} t j | �} |j�} | j|�} tjj| j| �} tjj| �s�tj| �nx�| j�D]�\}}tjj| t|��}tjj|�sHt}nQtj|�j}tjj|�}|j|�}tj|j�}||k}|r�|j|| �n|j||f�qWWdQXWntk r�nXWdQX|S(Nu%s-%su %s.dist-infou EXTENSIONSuutf-8ur( R!R2RRJRMRKRLRaR\R]RRbR�R�Rt prefix_to_dirR�R�tmakedirsR�R RYR�tstattst_mtimetdatetimet fromtimestamptgetinfot date_timetextractRRc(R&R)ReRfR�RgR3RhRoRpR*RR�t cache_baseRKR�tdestRt file_timeRWt wheel_time((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt_get_extensions�s>     !  cCs t|�S(uM Determine if a wheel is compatible with the running system. (t is_compatible(R&((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR$�scCstS(uP Determine if a wheel is asserted as mountable by its metadata. (R�(R&((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyt is_mountable�scCs tjjtjj|j|j��}|j�sLd|}t|��n|j�sqd|}t|��n|t jkr�t j d|�ns|r�t jj |�nt jj d|�|j�}|rtt jkr�t jj t�ntj||�ndS(Nu)Wheel %s not compatible with this Python.u$Wheel %s is marked as not mountable.u%s already in pathi(R!R2RTRRJRMR$RR%R5R�R�RtinsertR#t_hookt meta_pathR+(R&RR)tmsgR*((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytmount�s"'     cCs�tjjtjj|j|j��}|tjkrItjd|�n]tjj |�|t j krxt j |�nt j s�t tj kr�tj j t �q�ndS(Nu%s not in path( R!R2RTRRJRMR5R�R�R/R'R$R((R&R)((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytunmount�s' cCs�tjj|j|j�}d|j|jf}d|}d|}tj|t�}tj|d�}tj|d�}t j d�}t |d�� } | j |��} || �} t | �} WdQX| djd d �} tg| D]}t|�^q��}i}| j |��D}td |��,}x"|D]}|d }|||Fsu0Cannot update non-compliant (PEP-440) version %rR2tlegacyuVersion updated from %r to %r(R0RR}RRR`RRR�R�R RLR�R R�( RLR2tupdatedR.RkR RtmdR/((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytupdate_version;s(   0 !     u%s-%su %s.dist-infouRECORDuruutf-8u..uinvalid entry in wheel: %rNR�u.whlR�u wheel-update-tdiruNot a directory: %r(R!R2RRJRMRKRLRaRRR�R�RR�RRR R0R�tmkstemptcloseR�R�R�R�R�R�tcopyfile(R&tmodifiertdest_dirR�R-R2R)ReRfR�R�RhR,R�R�R�R2toriginal_versionRtmodifiedtcurrent_versiontfdtnewpathR�R�RW((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR( sX           (iiN(R?R@t__doc__R�R�R0R�R'tpropertyRMRYRZRRqR^RWR�R�R�R�R�R�RRR#R$R%R*R+RUR((((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyRA�s2)    h � "    6cCs�tg}td}xGttjdddd�D](}|jdj|t|�g��q1Wg}xLtj�D]>\}}}|j d�rp|j|j dd�d�qpqpW|j �t dkr�|j dt �n|jd�g}tg}tjd kr=tjd t�}|r=|j�\} }}} t|�}| g} | dkrg| jd �n| dkr�| jd�n| dkr�| jd�n| dkr�| jd�n| dkr�| jd�nx`|dkr6x@| D]8} d| ||| f} | tkr�|j| �q�q�W|d8}q�Wq=nxH|D]@}x7|D]/} |jdjt|df�|| f�qQWqDWxwt|�D]i\}}|jdjt|f�ddf�|dkr�|jdjt|df�ddf�q�q�Wxwt|�D]i\}}|jdjd|f�ddf�|dkr|jdjd|df�ddf�qqWt|�S(uG Return (pyver, abi, arch) tuples compatible with this Python. iii����uu.abiu.iunoneudarwinu(\w+)_(\d+)_(\d+)_(\w+)$ui386uppcufatux86_64ufat3uppc64ufat64uintelu universalu %s_%s_%s_%suanyupy(ui386uppc(ui386uppcux86_64(uppc64ux86_64(ui386ux86_64(ui386ux86_64uinteluppcuppc64(RtrangeR5t version_infoRRR�R8t get_suffixesR�RRR�R�R&R�tplatformtreRPR|R`t IMP_PREFIXR�tset(tversionstmajortminortabisR�RR3tarchesRVRKRHtmatchesRPR RGRkRL((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pytcompatible_tags�s`  $&$               1% 0% 0cCs�t|t�st|�}nt}|dkr9t}nxN|D]F\}}}||jkr@||jkr@||jkr@t}Pq@q@W|S(N( R�RAR�R0tCOMPATIBLE_TAGSRFRGRHR�(twheelRZR3tverRGRH((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyR$�s  -(Tt __future__RR�R\Rtdistutils.utilt distutilstemailRR�R8R�tloggingR!RaRDR�R5R�R�RRRtcompatRRRRRtdatabaseR RqR R tutilR R RRRRRRRRLRRt getLoggerR?R�R0RthasattrRERCR�RRRARER�t get_platformR R�R�Rtcompilet IGNORECASEtVERBOSERSRORvR{RzRyR"R�tobjectR#R'RARMRNR$(((s=/usr/lib/python2.7/site-packages/pip/_vendor/distlib/wheel.pyts�               (@     '   # ��� >