
}_m                 @   s  d  d l  m 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 Z d  d l Z d  d l Z d  d l m Z d  d l m Z 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" d  d	 l# m$ Z$ d  d
 l% m& Z& e$ rud  d l m' Z( n d  d l m( Z( d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ g Z) e	 j* e+  Z, dy Z- dz Z. d{ Z/ d| Z0 e/ e- e0 e. Z1 e/ e0 Z2 y d  d l3 Z3 e2 e- 7Z2 Wn e4 k
 rQe, j5 d1  Yn Xy d  d l6 Z6 e2 e. 7Z2 Wn e4 k
 re, j5 d2  Yn Xd3 d4   Z7 d5 d!   Z8 d6 d   Z9 e& d7 d8 d9 d:  d; d< d   Z: d= d>   Z; d? d   Z< d@ dA d  Z= dB dC   Z> dD d   Z? dE d   Z@ dF d   ZA dG d   ZB dH d   ZC e jD dI dJ  ZE dK d   ZF dL d   ZG dM dN d  ZH dO d   ZI dP d   ZJ dQ dR   ZK dS dT   ZL dU dV   ZM dW dX   ZN dY dZ   ZO dM e dM d; d; d[ d\  ZP d] d^   ZQ d_ d`   ZR da d   ZS db dc   ZT dM dd d  ZU de d   ZV df d   ZW dM d dg d d d dh d  ZX di dj   ZY dk dl   ZZ Gdm dn   dn e[  Z\ Gdo dp   dp e(  Z] e j^ dq dr    Z_ ds d    Z` Gdt du   du e[  Za d dv d$  Zb dw dx   Zc d S)}    )absolute_import)dequeN)InstallationError)console_to_str
expanduserstdlib_pkgs)site_packages	user_siterunning_under_virtualenvvirtualenv_no_globalwrite_delete_marker_file)pkg_resources)input)PY2)retry)BytesIO)StringIOrmtreedisplay_path
backup_dirasksplitextformat_sizeis_installable_diris_svn_pagefile_contentssplit_leading_dirhas_leading_dirnormalize_pathrenamesget_terminal_sizeget_prog
unzip_file
untar_fileunpack_filecall_subprocesscaptured_stdout
ensure_dirARCHIVE_EXTENSIONSSUPPORTED_EXTENSIONSget_installed_version.tar.bz2.tbz.tar.xz.txz.tlz.tar.lz	.tar.lzma.zip.whl.tar.gz.tgz.tarzbz2 module is not availablezlzma module is not availablec             O   s6   y t  |   SWn! t k
 r1 | | |    Yn Xd  S)N)
__import__ImportError)pkg_or_module_stringExceptionTypeargskwargs r=   1/tmp/pip-build-3_sjtvrs/pip/pip/utils/__init__.pyimport_or_raiseI   s    r?   c             C   sR   y t  j |   Wn: t k
 rM } z | j t j k r;   WYd d } ~ Xn Xd S)z os.path.makedirs without EEXIST.N)osmakedirsOSErrorerrnoEEXIST)pather=   r=   r>   r'   P   s
    c               C   sP   y. t  j j t j d  d k r- d t j SWn t t t f k
 rK Yn Xd S)Nr   __main__.py-cz	%s -m pippip)rG   rH   )	r@   rE   basenamesysargv
executableAttributeError	TypeError
IndexErrorr=   r=   r=   r>   r!   Y   s    stop_max_delayi  
wait_fixedi  Fc             C   s   t  j |  d | d t d  S)Nignore_errorsonerror)shutilr   rmtree_errorhandler)dirrS   r=   r=   r>   r   c   s    c             C   sA   t  j |  j t j @r: t  j | t j  |  |  d S  d S)zOn Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems.N)r@   statst_modeS_IREADchmodS_IWRITE)funcrE   exc_infor=   r=   r>   rV   i   s
    
rV   c             C   s   t  j j t  j j |    }  t j d d k ra |  j t j   d  }  |  j t j	   d  }  |  j
 t  j   t  j j  r d |  t t  j    d  }  |  S)zTGives the display value for a given path, making it relative to cwd
    if possible.r      replace.N)r@   rE   normcaseabspathrK   version_infodecodegetfilesystemencodingencodegetdefaultencoding
startswithgetcwdseplen)rE   r=   r=   r>   r   x   s     z.bakc             C   sK   d } | } x4 t  j j |  |  rB | d 7} | t |  } q W|  | S)z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)   )r@   rE   existsstr)rW   extn	extensionr=   r=   r>   r      s    
c             C   sC   x3 t  j j d d  j   D] } | | k r | Sq Wt |  |  S)NPIP_EXISTS_ACTION )r@   environgetsplitr   )messageoptionsactionr=   r=   r>   ask_path_exists   s    "r{   c             C   s{   xt t  j j d  r% t d |    t |   } | j   j   } | | k ro t d | d j |  f  q | Sq Wd S)z@Ask the message interactively, with the given possible responsesPIP_NO_INPUTz7No input was expected ($PIP_NO_INPUT set); question: %sz<Your response (%r) was not one of the expected responses: %sz, N)	r@   ru   rv   	Exceptionr   striplowerprintjoin)rx   ry   responser=   r=   r>   r      s    
c             C   sX   |  d k r d |  d d S|  d	 k r4 d |  d S|  d k rL d |  d Sd |  Sd  S)
Ni  z%.1fMBg     @@
   z%ikBz%.1fkBz%ibytesi@B i'  r=   )bytesr=   r=   r>   r      s    c             C   sE   t  j j |   s d St  j j |  d  } t  j j |  rA d Sd S)z@Return True if `path` is a directory containing a setup.py file.Fzsetup.pyT)r@   rE   isdirr   isfile)rE   setup_pyr=   r=   r>   r      s    c             C   s(   t  j d |   o' t  j d |  t  j  S)zT
    Returns true if the page appears to be the index page of an svn repository
    z<title>[^<]*Revision \d+:z#Powered by (?:<a[^>]*?>)?Subversion)researchI)htmlr=   r=   r>   r      s    c          	   C   s0   t  |  d   } | j   j d  SWd  QRXd  S)Nrbzutf-8)openreadre   )filenamefpr=   r=   r>   r      s    c             c   s&   x |  j  |  } | s P| Vq Wd S)z7Yield pieces of data from a file-like object until EOF.N)r   )filesizechunkr=   r=   r>   read_chunks   s
    r   c             C   s   |  j  d  j  d  }  d |  k rj d |  k rN |  j d  |  j d  k  sZ d |  k rj |  j d d  Sd |  k r |  j d d  S|  d f Sd  S)N/\rm   rt   )lstripfindrw   )rE   r=   r=   r>   r      s    6c             C   s\   d } xO |  D]G } t  |  \ } } | s/ d S| d k rD | } q | | k r d Sq Wd S)zyReturns true if all the paths have the same leading path name
    (i.e., everything is in one subdirectory in an archive)NFT)r   )pathscommon_prefixrE   prefixrestr=   r=   r>   r      s    	Tc             C   sI   t  |   }  | r' t j j |   }  n t j j |   }  t j j |   S)zN
    Convert a path to its canonical, case-normalized, absolute version.

    )r   r@   rE   realpathrc   rb   )rE   resolve_symlinksr=   r=   r>   r      s
    c             C   sX   t  j |   \ } } | j   j d  rN | d d  | } | d d  } | | f S)z,Like os.path.splitext, but take off .tar tooz.tar   Nr   )	posixpathr   r   endswith)rE   baserp   r=   r=   r>   r      s
    c             C   s   t  j j |  \ } } | rD | rD t  j j |  rD t  j |  t j |  |  t  j j |   \ } } | r | r y t  j |  Wn t k
 r Yn Xd S)z7Like os.renames(), but handles renaming across devices.N)	r@   rE   rw   rn   rA   rU   move
removedirsrB   )oldnewheadtailr=   r=   r>   r     s    c             C   s   t  |   }  t  t j  } t   r: |  j t  t j   Sd d l m } |  j |  r x3 | d  j   D] } |  j t  |   rl d Sql Wd Sd Sd S)aB  
    Return True if this is a path pip is allowed to modify.

    If we're in a virtualenv, sys.prefix points to the virtualenv's
    prefix; only sys.prefix is considered local.

    If we're not in a virtualenv, in general we can modify anything.
    However, if the OS vendor has configured distutils to install
    somewhere other than sys.prefix (which could be a subdirectory of
    sys.prefix, e.g. /usr/local), we consider sys.prefix itself nonlocal
    and the domain of the OS vendor. (In other words, everything _other
    than_ sys.prefix is considered local.)

    r   )distutils_schemert   TFN)r   rK   r   r
   ri   pip.locationsr   values)rE   r   r   
local_pathr=   r=   r>   is_local  s    	r   c             C   s   t  t |    S)zh
    Return True if given Distribution object is installed somewhere pip
    is allowed to modify.

    )r   dist_location)distr=   r=   r>   dist_is_local5  s    r   c             C   s%   t  t |    } | j t  t   S)zF
    Return True if given Distribution is installed in user site.
    )r   r   ri   r	   )r   	norm_pathr=   r=   r>   dist_in_usersite>  s    r   c             C   s   t  t |    j t  t   S)ze
    Return True if given Distribution is installed in
    distutils.sysconfig.get_python_lib().
    )r   r   ri   r   )r   r=   r=   r>   dist_in_site_packagesF  s    r   c             C   sJ   xC t  j D]8 } t j j | |  j d  } t j j |  r
 d Sq
 Wd S)z$Is distribution an editable install?z	.egg-linkTF)rK   rE   r@   r   project_namer   )r   	path_itemegg_linkr=   r=   r>   dist_is_editableP  s
    r   c                s   |  r t   n d d    | r0 d d     n d d     | rQ d d    n d d    | rl t  n d	 d
          f d d   t j D S)a  
    Return a list of installed Distribution objects.

    If ``local_only`` is True (default), only return installations
    local to the current virtualenv, if in a virtualenv.

    ``skip`` argument is an iterable of lower-case project names to
    ignore; defaults to stdlib_pkgs

    If ``editables`` is False, don't report editables.

    If ``editables_only`` is True , only report editables.

    If ``user_only`` is True , only report installations in the user
    site directory.

    c             S   s   d S)NTr=   )dr=   r=   r>   
local_testr  s    z/get_installed_distributions.<locals>.local_testc             S   s   d S)NTr=   )r   r=   r=   r>   editable_testv  s    z2get_installed_distributions.<locals>.editable_testc             S   s   t  |   S)N)r   )r   r=   r=   r>   r   y  s    c             S   s
   t  |   S)N)r   )r   r=   r=   r>   editables_only_test}  s    z8get_installed_distributions.<locals>.editables_only_testc             S   s   d S)NTr=   )r   r=   r=   r>   r     s    c             S   s   d S)NTr=   )r   r=   r=   r>   	user_test  s    z.get_installed_distributions.<locals>.user_testc                sU   g  |  ]K }  |  r | j   k r   |  r  |  r  |  r |  q Sr=   )key).0r   )r   r   r   skipr   r=   r>   
<listcomp>  s   	 z/get_installed_distributions.<locals>.<listcomp>)r   r   r   working_set)
local_onlyr   include_editableseditables_only	user_onlyr=   )r   r   r   r   r   r>   get_installed_distributionsY  s    		r   c             C   s   g  } t    rK t   r( | j t  qk | j t  t rk | j t  n  t r^ | j t  | j t  x@ | D]8 } t j j | |  j  d } t j j	 |  rr | Sqr Wd S)a  
    Return the path for the .egg-link file if it exists, otherwise, None.

    There's 3 scenarios:
    1) not in a virtualenv
       try to find in site.USER_SITE, then site_packages
    2) in a no-global virtualenv
       try to find in site_packages
    3) in a yes-global virtualenv
       try to find in site_packages, then site.USER_SITE
       (don't look in global location)

    For #1 and #3, there could be odd cases, where there's an egg-link in 2
    locations.

    This method will just return the first one found.
    z	.egg-linkN)
r
   r   appendr   r	   r@   rE   r   r   r   )r   sitessiteegglinkr=   r=   r>   egg_link_path  s    		r   c             C   s   t  |   } | r | S|  j S)z
    Get the site-packages location of this distribution. Generally
    this is dist.location, except in the case of develop-installed
    packages, where dist.location is the source code location, and we
    want to know where the egg-link file is.

    )r   location)r   r   r=   r=   r>   r     s    r   c           
   C   s   d d   }  |  d  p- |  d  p- |  d  } | sy y8 t  j t  j   t  j  } |  |  } t  j |  Wn Yn X| s t  j j d d  t  j j d d	  f } t | d  t | d  f S)
zlReturns a tuple (x, y) representing the width(x) and the height(x)
    in characters of the terminal window.c             S   so   yL d d  l  } d d  l } d d  l } | j d | j |  | j d   } Wn d  SYn X| d k rk d  S| S)Nr   hh1234)r   r   )fcntltermiosstructunpackioctl
TIOCGWINSZ)fdr   r   r   crr=   r=   r>   ioctl_GWINSZ  s    	z'get_terminal_size.<locals>.ioctl_GWINSZr   rm   r_   LINES   COLUMNSP   )r@   r   ctermidO_RDONLYcloseru   rv   int)r   r   r   r=   r=   r>   r      s    $*c              C   s    t  j d  }  t  j |   |  S)zBGet the current umask which involves having to set it temporarily.r   )r@   umask)maskr=   r=   r>   current_umask  s    r   c             C   sx  t  |  t |  d  } zMt j | d d } t | j    oF | } x| j   D]} | j } | j |  } | }	 | r t	 |  d }	 t
 j j | |	  }	 t
 j j |	  }
 |	 j d  s |	 j d  r t  |	  qV t  |
  t |	 d  } z | j |  Wd | j   | j d	 ?} | r`t j |  r`| d
 @r`t
 j |	 d t   d
 B XqV WWd | j   Xd S)a  
    Unzip the file (with path `filename`) to the destination `location`.  All
    files are written based on system defaults and umask (i.e. permissions are
    not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written. Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    r   
allowZip64Trm   r   r   wbN   I   i  )r'   r   zipfileZipFiler   namelistinfolistr   r   r   r@   rE   r   dirnamer   writer   external_attrrX   S_ISREGr[   r   )r   r   flattenzipfpzipleadinginfonamedatafnrW   r   moder=   r=   r>   r"     s0    	
	

$c              C   s  t  |  |  j   j d  s4 |  j   j d  r= d } np |  j   j t  r[ d } nR |  j   j t  ry d } n4 |  j   j d  r d } n t j d |   d	 } t j |  |  } zt	 d
 d   | j
   D  } x| j
   D]} | j } | d k rq | r"t |  d } t j j | |  } | j   rPt  |  q | j   ry | j | |  Wqt k
 r} z! t j d |  | j |  w WYd d } ~ XqXq y | j |  }	 WnG t t f k
 r} z! t j d |  | j |  w WYd d } ~ Xn Xt  t j j |   t | d   }
 t j |	 |
  Wd QRX|	 j   | j | |  | j d @r t j | d t   d B q WWd | j   Xd S)a  
    Untar the file (with path `filename`) to the destination `location`.
    All files are written based on system defaults and umask (i.e. permissions
    are not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written.  Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    z.gzz.tgzzr:gzzr:bz2zr:xzz.tarrz-Cannot determine compression type for file %szr:*c             S   s(   g  |  ] } | j  d  k r | j   q S)pax_global_header)r   )r   memberr=   r=   r>   r   0  s   	 zuntar_file.<locals>.<listcomp>r   rm   z/In the tar file %s the member %s is invalid: %sNr   r   i  )r'   r   r   BZ2_EXTENSIONSXZ_EXTENSIONSloggerwarningtarfiler   r   
getmembersr   r   r@   rE   r   r   issym_extract_memberr}   extractfileKeyErrorrN   r   rU   copyfileobjr   utimer   r[   r   )r   r   r   tarr   r   r   rE   excr   destfpr=   r=   r>   r#     s`    	
*				
	
#c             C   s(  t  j j |   }  | d k sB |  j   j t  sB t j |   rb t |  | d |  j d  n | d k s t	 j
 |   s |  j   j t t t  r t |  |  nz | r | j d  r t t |    r d d l m } | d | j  j |  n& t j d	 |  | |  t d
 |   d  S)Nzapplication/zipr   z.whlzapplication/x-gzipz	text/htmlr   )
Subversionzsvn+zZCannot unpack file %s (downloaded from %s, content-type: %s); cannot detect archive formatz%Cannot determine archive format of %s)r@   rE   r   r   r   ZIP_EXTENSIONSr   
is_zipfiler"   r   
is_tarfileTAR_EXTENSIONSr   r   r#   ri   r   r   pip.vcs.subversionr  urlr   r   criticalr   )r   r   content_typelinkr  r=   r=   r>   r$   a  s,    raisec             C   s  | r d  } n	 t  j } | d  k r g  } xa |  D]Y }	 d |	 k sg d |	 k sg d |	 k sg d |	 k r} d |	 j d d  }	 | j |	  q1 Wd j |  } t j d |  t j j	   }
 | r |
 j
 |  y4 t  j |  d t  j d	 d  d
 | d | d |
 } Wn; t k
 r@} z t j d | |    WYd  d  } ~ Xn X| d  k	 rg  } xx t | j j    } | srP| j   } | j | d  t j   t j k rt j |  qV| d  k	 rV| j   qVW| j   | d  k	 r
| j r| j d  n | j d  | j r| d k rt j   t j k re| ret j d |  t j d j |  d  t d | | j | f   nM | d k rt j d | | j |  n% | d k rn t d t |    | sd j |  Sd  S)N 
"'z"%s"z\"zRunning command %sstderrstdinstdoutcwdenvz#Error %s while executing command %serrordoner  z Complete output from command %s:rt   z)
----------------------------------------z,Command "%s" failed with error code %s in %swarnz$Command "%s" had error code %s in %signorezInvalid value: on_returncode=%s)
subprocessPIPEr`   r   r   r   debugr@   ru   copyupdatePopenSTDOUTr}   r  r   r  readlinerstripgetEffectiveLevelstd_loggingDEBUGspinwait
returncodefinishr   r   r   
ValueErrorrepr)cmdshow_stdoutr  on_returncodecommand_descextra_environspinnerr  	cmd_partspartr  procr	  
all_outputliner=   r=   r>   r%     sz    		0
		
c             C   s   t  |  d   } | j   } Wd QRXd t j d  d g } x: | D]2 } y | j |  } Wn t k
 rt wD Yn XPqD Wt |  t k s t  | S)aR  Return the contents of *filename*.

    Try to decode the file contents with utf-8, the preferred system encoding
    (e.g., cp1252 on some Windows machines), and latin1, in that order.
    Decoding a byte string with latin1 will never raise an error. In the worst
    case, the returned string will contain some garbage characters.

    r   Nzutf-8Flatin1)	r   r   localegetpreferredencodingre   UnicodeDecodeErrortyper   AssertionError)r   r   r   	encodingsencr=   r=   r>   read_text_file  s    	rH  c             C   s   t  j |   t |   d  S)N)r@   rA   r   )	build_dirr=   r=   r>   _make_build_dir  s    rJ  c               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	FakeFilezQWrap a list of lines in an object with readline() to make
    ConfigParser happy.c             C   s   d d   | D |  _  d  S)Nc             s   s   |  ] } | Vq d  S)Nr=   )r   lr=   r=   r>   	<genexpr>  s    z$FakeFile.__init__.<locals>.<genexpr>)_gen)selflinesr=   r=   r>   __init__  s    zFakeFile.__init__c             C   sT   y7 y t  |  j  SWn t k
 r5 |  j j    SYn XWn t k
 rO d SYn Xd  S)Nrt   )nextrN  	NameErrorStopIteration)rO  r=   r=   r>   r*    s    zFakeFile.readlinec             C   s   |  j  S)N)rN  )rO  r=   r=   r>   __iter__  s    zFakeFile.__iter__N)__name__
__module____qualname____doc__rQ  r*  rU  r=   r=   r=   r>   rK    s   	rK  c               @   s4   e  Z d  Z e d d    Z e d d    Z d S)StreamWrapperc             C   s   | |  _  |    S)N)orig_stream)clsr[  r=   r=   r>   from_stream  s    	zStreamWrapper.from_streamc             C   s
   |  j  j S)N)r[  encoding)rO  r=   r=   r>   r^    s    zStreamWrapper.encodingN)rV  rW  rX  classmethodr]  propertyr^  r=   r=   r=   r>   rZ    s   rZ  c             c   sR   t  t |   } t t |  t j |   z t  t |   VWd t t |  |  Xd S)zReturn a context manager used by captured_stdout/stdin/stderr
    that temporarily replaces the sys stream *stream_name* with a StringIO.

    Taken from Lib/support/__init__.py in the CPython repo.
    N)getattrrK   setattrrZ  r]  )stream_nameorig_stdoutr=   r=   r>   captured_output!  s
    re  c               C   s
   t  d  S)zCapture the output of sys.stdout:

       with captured_stdout() as stdout:
           print('hello')
       self.assertEqual(stdout.getvalue(), 'hello
')

    Taken from Lib/support/__init__.py in the CPython repo.
    r  )re  r=   r=   r=   r>   r&   0  s    	c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)cached_propertyzA property that is only computed once per instance and then replaces
       itself with an ordinary attribute. Deleting the attribute resets the
       property.

       Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175
    c             C   s   t  | d  |  _ | |  _ d  S)NrY  )ra  rY  r]   )rO  r]   r=   r=   r>   rQ  D  s    zcached_property.__init__c             C   s4   | d  k r |  S|  j  |  } | j |  j  j <| S)N)r]   __dict__rV  )rO  objr\  valuer=   r=   r>   __get__H  s     zcached_property.__get__N)rV  rW  rX  rY  rQ  rj  r=   r=   r=   r>   rf  <  s   rf  c             C   s\   t  j j |   } | d k r- t  j   } n t  j |  } | j |  } | rX | j Sd S)zCGet the installed version of dist_name avoiding pkg_resources cacheN)r   Requirementparse
WorkingSetr   version)	dist_namelookup_dirsreqr   r   r=   r=   r>   r*   P  s    c             C   s   t  |  d d d S)zConsume an iterable at C speed.maxlenr   N)r   )iteratorr=   r=   r>   consumed  s    rt  )r+   r,   )r-   r.   r/   r0   r1   )r2   r3   )r4   r5   r6   )d
__future__r   collectionsr   
contextlibrC   iorA  loggingr-  r   r@   r   rU   rX   r#  rK   r   r   pip.exceptionsr   
pip.compatr   r   r   r   r   r	   r
   r   r   pip._vendorr   Zpip._vendor.six.movesr   Zpip._vendor.sixr   Zpip._vendor.retryingr   r   r   __all__	getLoggerrV  r   r   r   r  r  r(   r)   bz2r8   r%  lzmar?   r'   r!   r   rV   r   r   r{   r   r   r   r   r   DEFAULT_BUFFER_SIZEr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r"   r#   r$   r%   rH  rJ  objectrK  rZ  contextmanagerre  r&   rf  r*   rt  r=   r=   r=   r>   <module>   s   (			
	

		 	
	5%+L!_