ó
^\kdc        
   @   s  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 m Z 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 m Z m Z d  d l m Z d  d l  m! Z! d  d l" m# Z# m$ Z$ d  d l% m& Z& d  d	 l' m( Z( m) Z) d  d
 l* m+ Z+ d  d l, m- Z- m. Z. d  d l/ m0 Z0 d  d l1 m2 Z2 d d d d d d d d d d g
 Z3 d „  Z4 d e( f d „  ƒ  YZ5 d e6 f d „  ƒ  YZ7 d e& f d „  ƒ  YZ8 d e# j9 f d  „  ƒ  YZ: d d d! „ Z< e j= d" e j> ƒ Z? e j= d# e j> ƒ Z@ d$ „  ZA d% „  ZB e j= d& e j> ƒ ZC e j= d' e j> ƒ ZD d( „  ZE d) „  ZF eG d* „ ZH d+ „  ZI d, „  ZJ d- „  ZK d. „  ZL d/ „  ZM d0 „  ZN d1 „  ZO d d d2 „ ZP d d3 „ ZQ d S(4   iÿÿÿÿN(   t   urllibt   urlparset	   raw_input(   t   InstallationErrort   HashMismatch(	   t   splitextt   rmtreet   format_sizet   display_patht
   backup_dirt   ask_path_existst   unpack_filet   create_download_cache_foldert   cache_download(   t   vcs(   t   logger(   t   requestst   six(   t   BaseAdapter(   t   AuthBaset   HTTPBasicAuth(   t   IncompleteRead(   t
   InvalidURLt   ChunkedEncodingError(   t   Response(   t   CaseInsensitiveDictt   get_file_contentt   is_urlt   url_to_patht   path_to_urlt   is_archive_filet   unpack_vcs_linkt   unpack_file_urlt
   is_vcs_urlt   is_file_urlt   unpack_http_urlc          C   s4  t  j ƒ  }  |  d k r' t  j ƒ  } n  |  d k r‹ d t j j t j j t j j f } t j j d k rÇ d j	 | t j j g ƒ } qÇ n< |  d k r¦ t  j ƒ  } n! |  d k rÁ t  j ƒ  } n d } y t  j
 ƒ  } t  j ƒ  } Wn t k
 rd } d } n Xd	 j	 d
 t j d |  | f d | | f g ƒ S(   s,   Return a string representing the user agent.t   CPythont   PyPys   %s.%s.%st   finalt    t   Jythont
   IronPythont   Unknownt    s   pip/%ss   %s/%s(   t   platformt   python_implementationt   python_versiont   syst   pypy_version_infot   majort   minort   microt   releaselevelt   joint   systemt   releaset   IOErrort   pipt   __version__(   t   _implementationt   _implementation_versiont   p_systemt	   p_release(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt
   user_agent$   s2    	
t   MultiDomainBasicAuthc           B   s/   e  Z e d  „ Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  i  |  _ d  S(   N(   t	   promptingt	   passwords(   t   selfRA   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   __init__H   s    	c         C   sì   t  j  | j ƒ } | j j d d ƒ d } t  j | d  | f | d ƒ | _ |  j j | d ƒ \ } } | d  k r’ |  j | j ƒ \ } } n  | sž | rÕ | | f |  j | <t	 | p½ d | pÆ d ƒ | ƒ } n  | j
 d |  j ƒ | S(   Nt   @i   iÿÿÿÿi   R'   t   response(   NN(   R   t   urlt   netloct   splitt
   urlunparseRB   t   gett   Nonet   parse_credentialsR   t   register_hookt
   handle_401(   RC   t   reqt   parsedRH   t   usernamet   password(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   __call__L   s    %$c         K   sÚ   | j  d k r | S|  j s  | St j | j ƒ } t d | j ƒ } t j d ƒ } | s` | ry | | f |  j | j <n  | j | j	 j
 ƒ  t | p™ d | p¢ d ƒ | j ƒ } | j j | | � } | j j | ƒ | S(   Ni‘  s   User for %s: s
   Password: R'   (   t   status_codeRA   R   RG   R   RH   t   getpassRB   t   contentt   rawt   release_connR   t   requestt
   connectiont   sendt   historyt   append(   RC   t   respt   kwargsRQ   RR   RS   RP   t   new_resp(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRO   h   s    	$c         C   sL   d | k rH | j  d d ƒ d } d | k r> | j d d ƒ S| d  f Sd S(   NRE   i   i    t   :(   NN(   t   rsplitRI   RL   (   RC   RH   t   userinfo(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRM   Š   s    
(   t   __name__t
   __module__t   TrueRD   RT   RO   RM   (    (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR@   F   s   		"t   LocalFSResponsec           B   s;   e  Z d  „  Z d „  Z d d e d „ Z e d „  ƒ Z RS(   c         C   s   | |  _  d  S(   N(   t   fileobj(   RC   Ri   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRD   •   s    c         C   s   t  |  j | ƒ S(   N(   t   getattrRi   (   RC   t   name(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   __getattr__˜   s    c         C   s   |  j  j | ƒ S(   N(   Ri   t   read(   RC   t   amtt   decode_contentt   cache_content(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRm   ›   s    c            s9   d t  f d „  ƒ  Y‰  d t  f ‡  f d †  ƒ  Y} | ƒ  S(   Nt   FakeMessagec           B   s   e  Z d  „  Z d „  Z RS(   c         S   s   g  S(   N(    (   RC   t   header(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt
   getheaders¢   s    c         S   s   g  S(   N(    (   RC   Rr   t   default(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   get_all¥   s    (   Re   Rf   Rs   Ru   (    (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRq   ¡   s   	t   FakeResponsec              s   e  Z e ‡  f d  †  ƒ Z RS(   c            s   ˆ  ƒ  S(   N(    (   RC   (   Rq   (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   msg©   s    (   Re   Rf   t   propertyRw   (    (   Rq   (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRv   ¨   s   (   t   object(   RC   Rv   (    (   Rq   s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   _original_responseŸ   s    N(	   Re   Rf   RD   Rl   RL   t   FalseRm   Rx   Rz   (    (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRh   “   s   		t   LocalFSAdapterc           B   s)   e  Z d d d d d d  „ Z d „  Z RS(   c         C   s  t  j  | j ƒ } | j j ƒ  d k r= t d | j ƒ ‚ n  t  j | d  d | d ƒ } t | ƒ }	 t ƒ  }
 d |
 _ | |
 _ t	 j
 |	 ƒ } t j j | j d t ƒ} t i t j |	 ƒ d pÉ d	 d
 6| j d 6| d 6ƒ |
 _ t t |	 d ƒ ƒ |
 _ |
 j j |
 _ |
 S(   Nt	   localhosts)   Invalid URL %r: Only localhost is allowedi   R'   i   iÈ   t   usegmti    s
   text/plains   Content-Types   Content-Lengths   Last-Modifiedt   rb(   R'   (   R   RG   RH   t   lowerR   RJ   R   R   RU   t   ost   statt   emailt   utilst
   formatdatet   st_mtimeRg   R   t	   mimetypest
   guess_typet   st_sizet   headersRh   t   openRX   t   close(   RC   RZ   t   streamt   timeoutt   verifyt   certt   proxiest
   parsed_urlt   real_urlt   pathnameR_   t   statst   modified(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR\   ²   s$    			
c         C   s   d  S(   N(    (   RC   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRŒ   Ï   s    N(   Re   Rf   RL   R\   RŒ   (    (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR|   °   s   t
   PipSessionc           B   s    e  Z d Z d  „  Z d „  Z RS(   c         O   sL   t  t |  ƒ j | | Ž  t ƒ  |  j d <t ƒ  |  _ |  j d t ƒ  ƒ d  S(   Ns
   User-Agents   file://(	   t   superR—   RD   R?   RŠ   R@   t   autht   mountR|   (   RC   t   argsR`   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRD   ×   s    c         O   sr   t  j  | ƒ } | j d k r@ t  j | d  d | d ƒ } n  | j d |  j ƒ t t |  ƒ j | | | | Ž S(   Nt   filei   R}   i   RŽ   (   s	   localhost(   R   t   schemeRJ   t
   setdefaultRŽ   R˜   R—   RZ   (   RC   t   methodRG   R›   R`   RQ   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRZ   ã   s
    "N(   Re   Rf   RL   RŽ   RD   RZ   (    (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR—   Ó   s   	c   
      C   sÛ  | d
 k r t ƒ  } n  t j |  ƒ } | rq| j d ƒ j ƒ  } | d k r| | r| | j d ƒ r| t d | |  f ƒ ‚ n  | d k r,|  j d d ƒ d } | j	 d d ƒ } t
 j | ƒ } | rï | j d ƒ d | j d d ƒ d } n  t j | ƒ } | j d ƒ r#d | j d ƒ } n  | }  qq| j |  ƒ } | j ƒ  t j r^| j | j f S| j | j f Sn  y t |  ƒ } | j ƒ  } Wn7 t k
 rÆt j ƒ  d }	 t d	 t |	 ƒ ƒ ‚ n X| j ƒ  |  | f S(   s�   Gets the content of a file; it may be a filename, file: URL, or
    http: URL.  Returns (location, content).  Content is unicode.i   Rœ   t   https6   Requirements file %s references URL %s, which is localRb   s   \t   /t   |s$   Could not open requirements file: %sN(   RL   R—   t
   _scheme_ret   searcht   groupR€   t
   startswithR   RI   t   replacet   _url_slash_drive_ret   matchR    t   unquotet   lstripRK   t   raise_for_statusR   t   PY3RG   t   textRW   R‹   Rm   R8   R/   t   exc_infot   strRŒ   (
   RG   t
   comes_fromt   sessionR©   R�   t   pathR_   t   fRW   t   e(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR   ð   sB    *	
	
s   ^(http|https|file):s   /*([a-z])\|c         C   sI   d |  k r t  S|  j d d ƒ d j ƒ  } | d d d d g t j k S(   s)   Returns true if the name looks like a URLRb   i   i    R    t   httpsRœ   t   ftp(   R{   RI   R€   R   t   all_schemes(   Rk   R�   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR      s    c         C   s}   |  j  d ƒ s t d |  ƒ ‚ |  t d ƒ j d ƒ } t j | ƒ } t j | ƒ ro | d d | d } n
 d | } | S(   s(   
    Convert a file: URL to a path.
    s   file:s4   You can only turn file: urls into filenames (not %r)R¡   i    Rb   i   (   R¦   t   AssertionErrort   lenR«   R    Rª   t   _url_drive_reR©   (   RG   R³   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR   (  s    
s	   ^([a-z]):s   ^([a-z])[:|]c         C   sš   t  j j t  j j |  ƒ ƒ }  t  j j |  ƒ \ } }  |  j t  j j ƒ } d j g  | D] } t j	 | ƒ ^ qX ƒ } | sŽ | j
 d ƒ } n  d | | S(   sh   
    Convert a path to a file: URL.  The path will be made absolute and have
    quoted path parts.
    R¡   s   file:///(   R�   R³   t   normpatht   abspatht
   splitdriveRI   t   sepR5   R    t   quoteR«   (   R³   t   drivet   filepatht   partRG   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR   ;  s    +c         C   s0   d	 } t  |  ƒ d j ƒ  } | | k r, t St S(
   s9   Return True if `name` is a considered as an archive file.s   .zips   .tar.gzs   .tar.bz2s   .tgzs   .tars	   .pybundles   .whli   (   s   .zips   .tar.gzs   .tar.bz2s   .tgzs   .tars	   .pybundles   .whl(   R   R€   Rg   R{   (   Rk   t   archivest   ext(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR   I  s     c         C   s3   t  |  ƒ } | r" | j | ƒ n | j | ƒ d  S(   N(   t   _get_used_vcs_backendt   exportt   unpack(   t   linkt   locationt   only_downloadt   vcs_backend(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR   S  s    c         C   s=   x6 t  j D]+ } |  j | j k r
 | |  j ƒ } | Sq
 Wd  S(   N(   R   t   backendsR�   t   schemesRG   (   RÉ   t   backendRÌ   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyRÆ   [  s    c         C   s   t  t |  ƒ ƒ S(   N(   t   boolRÆ   (   RÉ   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR!   b  s    c         C   s   |  j  j ƒ  j d ƒ S(   Ns   file:(   RG   R€   R¦   (   RÉ   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR"   f  s    c         C   s©   |  j  t j | j ƒ j  k rQ t j d |  j  | | j f ƒ t d | ƒ ‚ n  |  j ƒ  | j k r¥ t j d | |  j ƒ  | j f ƒ t d | j | f ƒ ‚ n  d  S(   NsP   Hash digest size of the package %d (%s) doesn't match the expected hash name %s!s!   Hash name mismatch for package %ss?   Hash of the package %s (%s) doesn't match the expected hash %s!s   Bad %s hash for package %s(	   t   digest_sizet   hashlibt   newt	   hash_nameR   t   fatalR   t	   hexdigestt   hash(   t   download_hashRÉ   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   _check_hashj  s    		c         C   s›   y t  j | j ƒ } Wn2 t t f k
 rJ t j d | j | f ƒ d  SXt |  d ƒ } x0 t	 rŒ | j
 d ƒ } | s| Pn  | j | ƒ q] W| j ƒ  | S(   Ns'   Unsupported hash name %s for package %sR   i   (   RÒ   RÓ   RÔ   t
   ValueErrort	   TypeErrorR   t   warnRL   R‹   Rg   Rm   t   updateRŒ   (   t   target_fileRÉ   RØ   t   fpt   chunk(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   _get_hash_from_fileu  s    	
c      	      s  t  | d ƒ } d  } | j rn | j rn y t j | j ƒ } Wqn t k
 rj t j d | j | f ƒ qn Xn  y t	 ˆ  j
 d ƒ } Wn  t t t f k
 r§ d } n Xd } | d k p¾ | } | j } z| r| rù t j d | t | ƒ f ƒ qt j d | ƒ n t j d	 | ƒ t j d
 | ƒ ‡  f d †  }	 x› |	 d ƒ D]� }
 | t |
 ƒ 7} | r¯| s‡t j d t | ƒ ƒ q¯t j d d | | t | ƒ f ƒ n  | d  k	 rË| j |
 ƒ n  | j |
 ƒ qKW| j ƒ  Wd  | r
t j d t | ƒ ƒ n  X| S(   Nt   wbs'   Unsupported hash name %s for package %ss   content-lengthi    i(   iè  s   Downloading %s (%s): s   Downloading %s (unknown size): s   Downloading %ss   Downloading from URL %sc         3   s˜   yR y, x% ˆ  j  j |  d t ƒD] } | Vq WWn t k
 rP } t | ƒ ‚ n XWn? t k
 r“ x/ t r� ˆ  j  j |  ƒ } | s‡ Pn  | Vqe Wn Xd  S(   NRo   (   RX   R�   R{   R   R   t   AttributeErrorRg   Rm   (   t
   chunk_sizeRà   Rµ   (   R_   (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt	   resp_read   s    	i   s   %ss	   %3i%%  %sid   s   %s downloadedi@œ  (   R‹   RL   R×   RÔ   RÒ   RÓ   RÚ   R   RÜ   t   intRŠ   t   KeyErrorRÛ   t   show_urlt   start_progressR   t   notifyt   infoRº   t   show_progressRÝ   t   writeRŒ   t   end_progress(   R_   RÉ   t   temp_locationRß   RØ   t   total_lengtht
   downloadedRì   Rè   Rå   Rà   (    (   R_   s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   _download_url†  sF    !
	 (c         C   s  t  } t j j | | j ƒ } t j j | ƒ râ t d t | ƒ d ƒ } | d k r^ t } qâ | d k r‘ t	 j
 d t | ƒ ƒ t j | ƒ qâ | d k râ t | ƒ } t	 j
 d t | ƒ t | ƒ f ƒ t j | | ƒ qâ n  | rt j |  | ƒ t	 j d t | ƒ ƒ n  d  S(	   Ns/   The file %s exists. (i)gnore, (w)ipe, (b)ackup t   it   wt   bs   Deleting %ss   Backing up %s to %ss   Saved %s(   Ró   Rô   Rõ   (   Rg   R�   R³   R5   t   filenamet   existsR
   R   R{   R   RÜ   t   removeR	   t   shutilt   movet   copyRê   (   Rö   RÊ   t   content_typeRÉ   Rû   t   download_locationRF   t	   dest_file(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt
   _copy_fileÂ  s&    		c         C   sœ  | d  k r t ƒ  } n  t j d d ƒ } d  } |  j j d d ƒ d } t } d  }	 d  }
 d  } | rØ t j j	 | t
 j | d ƒ ƒ }	 |	 d }
 t j j |	 ƒ o³ t j j |
 ƒ } t j j | ƒ sØ t | ƒ qØ n  d  } | rt j j	 | |  j ƒ } t j j | ƒ sd  } qn  | r·| } t j | ƒ d } t j d | ƒ |  j r·t | |  ƒ } y t | |  ƒ Wq´t k
 r°t j d	 | ƒ d  } t j | ƒ d  } q´Xq·n  | r…| r…t |
 ƒ � } | j ƒ  j ƒ  } Wd  QX|	 } t j d
 |	 ƒ |  j r…|  j r…t |	 |  ƒ } y t | |  ƒ Wq‚t k
 r~t j d | ƒ d  } t j |	 ƒ t j |
 ƒ t } q‚Xq…n  | sy# | j | d t ƒ} | j  ƒ  Wn6 t! j" k
 ræ} t j# d | j$ j% |  f ƒ ‚  n X| j& j d d ƒ } |  j } | j& j d ƒ } | rJt' j( | ƒ \ } } | j d ƒ pD| } n  t) | ƒ d } | s…t j* | ƒ } | r…| | 7} q…n  | rÍ|  j | j k rÍt j j) | j ƒ d } | rÍ| | 7} qÍn  t j j	 | | ƒ } t+ | |  | ƒ } |  j r|  j rt | |  ƒ qn  | r<| r<t, | | | |  ƒ n  t- | | | |  ƒ |	 ro| rot. |	 | | ƒ n  | px| s‹t j | ƒ n  t j/ | ƒ d  S(   Ns   -unpacks   pip-t   #i   i    R'   s   .content-types   File was already downloaded %ss;   Previously-downloaded file %s has bad hash, re-downloading.s   Using download cache from %ss,   Cached file %s has bad hash, re-downloading.R�   s   HTTP error %s while getting %ss   content-types   content-dispositionRö   (0   RL   R—   t   tempfilet   mkdtempRG   RI   R{   R�   R³   R5   R    RÀ   R÷   t   isdirR   Rö   R‡   Rˆ   R   Rê   R×   Rá   RÙ   R   RÜ   t   unlinkR‹   Rm   t   stripRÔ   RK   Rg   R¬   R   t	   HTTPErrorRÕ   RF   RU   RŠ   t   cgit   parse_headerR   t   guess_extensionRò   Rÿ   R   R   t   rmdir(   RÉ   RÊ   t   download_cachet   download_dirR²   t   temp_dirRï   t
   target_urlt   already_cachedt
   cache_filet   cache_content_type_fileRØ   t   already_downloadedRü   Rß   R_   t   excRö   t   content_dispositiont   typet   paramsRÅ   (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR#   Ø  s²    
			c   
      C   s®  t  |  j ƒ } t } t j j | ƒ r` t j j | ƒ rF t | ƒ n  t j | | d t	 ƒd  S|  j
 rˆ t | |  ƒ } t | |  ƒ n  | rLt j j | |  j ƒ } t j j | ƒ rLt j | ƒ d } t j d | ƒ |  j
 r@t | |  ƒ } y t | |  ƒ t	 } WqFt k
 r<t j d | ƒ t j | ƒ qFXqIt	 } qLn  | r[| }	 n | }	 t j |	 ƒ d } t |	 | | |  ƒ | rª| rªt |	 | | |  ƒ n  d  S(   Nt   symlinksi    s   File was already downloaded %ss;   Previously-downloaded file %s has bad hash, re-downloading.(   R   t   url_without_fragmentR{   R�   R³   R  R   Rù   t   copytreeRg   R×   Rá   RÙ   R5   Rö   R÷   R‡   Rˆ   R   Rê   R   RÜ   R  R   Rÿ   (
   RÉ   RÊ   R  t	   link_pathR  t   link_path_hasht   download_pathRü   RØ   t	   from_path(    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyR    R  sB    		
	(R   R  t   email.utilsRƒ   RÒ   RV   R‡   R�   R,   t   reRù   R/   R  R9   t   pip.backwardcompatR    R   R   t   pip.exceptionsR   R   t   pip.utilR   R   R   R   R	   R
   R   R   R   t   pip.vcsR   t   pip.logR   t   pip._vendorR   R   t   pip._vendor.requests.adaptersR   t   pip._vendor.requests.authR   R   t   pip._vendor.requests.compatR   t   pip._vendor.requests.exceptionsR   R   t   pip._vendor.requests.modelsR   t   pip._vendor.requests.structuresR   t   __all__R?   R@   Ry   Rh   R|   t   SessionR—   RL   R   t   compilet   IR£   R¨   R   R   t	   _drive_reR»   R   R   R{   R   RÆ   R!   R"   RÙ   Rá   Rò   Rÿ   R#   R    (    (    (    s3   /var/www/testScraper/venv/build/pip/pip/download.pyt   <module>   sh   @		"M#,				
						<	y