
[Y4X              
   @   sM  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 d   Z4 Gd d   d e(  Z5 Gd d   d e6  Z7 Gd d   d e&  Z8 Gd  d!   d! e# j9  Z: d d d" d  Z; e j< d# e j=  Z> e j< d$ e j=  Z? d% d   Z@ d& d   ZA e j< d' e j=  ZB e j< d( e j=  ZC d) d   ZD d* d   ZE d+ d, d  ZF d- d.   ZG d/ d   ZH d0 d   ZI d1 d2   ZJ d3 d4   ZK d5 d6   ZL d7 d8   ZM d d d9 d  ZN d d: d  ZO d S);    N)urlliburlparse	raw_input)InstallationErrorHashMismatch)	splitextrmtreeformat_sizedisplay_path
backup_dirask_path_existsunpack_filecreate_download_cache_foldercache_download)vcs)logger)requestssix)BaseAdapter)AuthBaseHTTPBasicAuth)IncompleteRead)
InvalidURLChunkedEncodingError)Response)CaseInsensitiveDictget_file_contentis_urlurl_to_pathpath_to_urlis_archive_fileunpack_vcs_linkunpack_file_url
is_vcs_urlis_file_urlunpack_http_urlc              C   s5  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 } Yn Xd	 j	 d
 t j d |  | f d | | f g  S)z,Return a string representing the user agent.CPythonPyPyz%s.%s.%sfinal Jython
IronPythonUnknown zpip/%sz%s/%s)platformpython_implementationpython_versionsyspypy_version_infomajorminormicroreleaseleveljoinsystemreleaseIOErrorpip__version__)_implementation_implementation_versionp_system	p_release rA   8/home/kubikplay/www/django_dtb/build/pip/pip/download.py
user_agent$   s2    	rC   c               @   sC   e  Z d  Z d d d  Z d d   Z d d   Z d d	   Z d
 S)MultiDomainBasicAuthTc             C   s   | |  _  i  |  _ d  S)N)	prompting	passwords)selfrE   rA   rA   rB   __init__H   s    	zMultiDomainBasicAuth.__init__c             C   s   t  j  | j  } | j j d d  d } t  j | d  d  | f | d d    | _ |  j j | d  \ } } | d  k r |  j | j  \ } } n  | s | r | | f |  j | <t | p d | p d  |  } n  | j	 d |  j
  | S)N@      r)   response)NN)r   urlnetlocsplit
urlunparserF   getparse_credentialsr   register_hook
handle_401)rG   reqparsedrO   usernamepasswordrA   rA   rB   __call__L   s    1$zMultiDomainBasicAuth.__call__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  zUser for %s: z
Password: r)   )status_coderE   r   rN   r   rO   getpassrF   contentrawrelease_connr   request
connectionsendhistoryappend)rG   respkwargsrW   rX   rY   rV   new_resprA   rA   rB   rU   h   s    	$zMultiDomainBasicAuth.handle_401c             C   sL   d | k rH | j  d d  d } d | k r> | j d d  S| d  f Sd S)NrI   rJ   r   :)NN)rsplitrP   )rG   rO   userinforA   rA   rB   rS      s    
z&MultiDomainBasicAuth.parse_credentialsN)__name__
__module____qualname__rH   rZ   rU   rS   rA   rA   rA   rB   rD   F   s   "rD   c               @   sO   e  Z d  Z d d   Z d d   Z d d d d d  Z e d	 d
    Z d S)LocalFSResponsec             C   s   | |  _  d  S)N)fileobj)rG   ro   rA   rA   rB   rH      s    zLocalFSResponse.__init__c             C   s   t  |  j |  S)N)getattrro   )rG   namerA   rA   rB   __getattr__   s    zLocalFSResponse.__getattr__NFc             C   s   |  j  j |  S)N)ro   read)rG   amtdecode_contentcache_contentrA   rA   rB   rs      s    zLocalFSResponse.readc                s9   Gd d   d t     G  f d d   d t   } |   S)Nc               @   s(   e  Z d  Z d d   Z d d   Z d S)z7LocalFSResponse._original_response.<locals>.FakeMessagec             S   s   g  S)NrA   )rG   headerrA   rA   rB   
getheaders   s    zBLocalFSResponse._original_response.<locals>.FakeMessage.getheadersc             S   s   g  S)NrA   )rG   rw   defaultrA   rA   rB   get_all   s    z?LocalFSResponse._original_response.<locals>.FakeMessage.get_allN)rk   rl   rm   rx   rz   rA   rA   rA   rB   FakeMessage   s   r{   c                   s(   e  Z d  Z e   f d d    Z d S)z8LocalFSResponse._original_response.<locals>.FakeResponsec                s       S)NrA   )rG   )r{   rA   rB   msg   s    z<LocalFSResponse._original_response.<locals>.FakeResponse.msgN)rk   rl   rm   propertyr|   rA   )r{   rA   rB   FakeResponse   s   r~   )object)rG   r~   rA   )r{   rB   _original_response   s    z"LocalFSResponse._original_response)rk   rl   rm   rH   rr   rs   r}   r   rA   rA   rA   rB   rn      s   rn   c               @   s7   e  Z d  Z d d d d d d d  Z d d   Z d S)LocalFSAdapterNc             C   s  t  j  | j  } | j j   d k r= t d | j   n  t  j | d  d  d | d d    } t |  }	 t   }
 d |
 _ | |
 _ t	 j
 |	  } t j j | j d d } t i t j |	  d	 p d
 d 6| j d 6| d 6 |
 _ t t |	 d   |
 _ |
 j j |
 _ |
 S)N	localhostz)Invalid URL %r: Only localhost is allowedrJ   r)   rK      usegmtTr   z
text/plainzContent-TypezContent-LengthzLast-Modifiedrb)r)   )r   rN   rO   lowerr   rQ   r   r   r[   osstatemailutils
formatdatest_mtimer   	mimetypes
guess_typest_sizeheadersrn   openr^   close)rG   r`   streamtimeoutverifycertproxies
parsed_urlreal_urlpathnamere   statsmodifiedrA   rA   rB   rb      s$    +			
zLocalFSAdapter.sendc             C   s   d  S)NrA   )rG   rA   rA   rB   r      s    zLocalFSAdapter.close)rk   rl   rm   rb   r   rA   rA   rA   rB   r      s   r   c                   s:   e  Z d  Z d Z   f d d   Z   f d d   Z   S)
PipSessionNc                sL   t  t |   j | |   t   |  j d <t   |  _ |  j d t    d  S)Nz
User-Agentzfile://)	superr   rH   rC   r   rD   authmountr   )rG   argsrf   )	__class__rA   rB   rH      s    zPipSession.__init__c                s~   t  j  |  } | j d k rL t  j | d  d  d | d d    } n  | j d |  j  t t |   j | | | |  S)NfilerJ   r   rK   r   )z	localhost)r   schemerQ   
setdefaultr   r   r   r`   )rG   methodrN   r   rf   rW   )r   rA   rB   r`      s
    .zPipSession.request)rk   rl   rm   r   rH   r`   rA   rA   )r   rB   r      s   r   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   } Wn8 t k
 rt j   d }	 t d
 t |	    Yn X| j   |  | f S)zGets the content of a file; it may be a filename, file: URL, or
    http: URL.  Returns (location, content).  Content is unicode.NrJ   r   httpz6Requirements file %s references URL %s, which is localrh   \/|z$Could not open requirements file: %s)r   
_scheme_researchgroupr   
startswithr   rP   replace_url_slash_drive_rematchr   unquotelstriprR   raise_for_statusr   PY3rN   textr]   r   rs   r:   r1   exc_infostrr   )
rN   
comes_fromsessionr   r   pathre   fr]   erA   rA   rB   r      sB    *	
	
z^(http|https|file):z/*([a-z])\|c             C   sI   d |  k r d S|  j  d d  d j   } | d d d d g t j k S)	z)Returns true if the name looks like a URLrh   FrJ   r   r   httpsr   ftp)rP   r   r   all_schemes)rq   r   rA   rA   rB   r      s    c             C   s   |  j  d  s t d |    |  t d  d  j d  } t j |  } t j |  r{ | d d | d d  } n
 d | } | S)z(
    Convert a file: URL to a path.
    zfile:z4You can only turn file: urls into filenames (not %r)Nr   r   rh   rK   )r   AssertionErrorlenr   r   r   _url_drive_rer   )rN   r   rA   rA   rB   r   (  s    
z	^([a-z]):z^([a-z])[:|]c             C   s   t  j j t  j j |    }  t  j j |   \ } }  |  j t  j j  } d j d d   | D  } | s | j d  } n  d | | S)zh
    Convert a path to a file: URL.  The path will be made absolute and have
    quoted path parts.
    r   c             S   s   g  |  ] } t  j |   q SrA   )r   quote).0partrA   rA   rB   
<listcomp>C  s   	 zpath_to_url.<locals>.<listcomp>zfile:///)	r   r   normpathabspath
splitdriverP   sepr7   r   )r   drivefilepathrN   rA   rA   rB   r   ;  s    c             C   s0   d } t  |   d j   } | | k r, d	 Sd
 S)z9Return True if `name` is a considered as an archive file..zip.tar.gz.tar.bz2.tgz.tar	.pybundle.whlrJ   TF)r   r   r   r   r   r   r   )r   r   )rq   archivesextrA   rA   rB   r    I  s     Fc             C   s3   t  |   } | r" | j |  n | j |  d  S)N)_get_used_vcs_backendexportunpack)linklocationonly_downloadvcs_backendrA   rA   rB   r!   S  s    c             C   s=   x6 t  j D]+ } |  j | j k r
 | |  j  } | Sq
 Wd  S)N)r   backendsr   schemesrN   )r   backendr   rA   rA   rB   r   [  s    r   c             C   s   t  t |    S)N)boolr   )r   rA   rA   rB   r#   b  s    c             C   s   |  j  j   j d  S)Nzfile:)rN   r   r   )r   rA   rA   rB   r$   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)NzPHash digest size of the package %d (%s) doesn't match the expected hash name %s!z!Hash name mismatch for package %sz?Hash of the package %s (%s) doesn't match the expected hash %s!zBad %s hash for package %s)	digest_sizehashlibnew	hash_namer   fatalr   	hexdigesthash)download_hashr   rA   rA   rB   _check_hashj  s    		r   c             C   s   y t  j | j  } Wn6 t t f k
 rN t j d | j | f  d  SYn Xt |  d  } x* | j d  } | sz Pn  | j	 |  qa W| j
   | S)Nz'Unsupported hash name %s for package %sr   i   )r   r   r   
ValueError	TypeErrorr   warnr   rs   updater   )target_filer   r   fpchunkrA   rA   rB   _get_hash_from_fileu  s    	
r   c                s  t  | d  } d  } | j ro | j ro y t j | j  } Wqo t k
 rk t j d | j | f  Yqo Xn  y t   j	 d  } Wn! t t
 t f k
 r d } Yn 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 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 |
  qPW| j   Wd  | rt j d t |   n  X| S)Nwbz'Unsupported hash name %s for package %szcontent-lengthr   (   i  zDownloading %s (%s): zDownloading %s (unknown size): zDownloading %szDownloading from URL %sc             3   s   yd y, x%   j  j |  d d D] } | Vq WWn1 t k
 rb } z t |   WYd  d  } ~ Xn XWn: t k
 r x%   j  j |   } | s Pn  | Vqw WYn Xd  S)Nru   F)r^   r   r   r   AttributeErrorrs   )
chunk_sizer   r   )re   rA   rB   	resp_read  s    #z _download_url.<locals>.resp_readi   z%sz	%3i%%  %sd   z%s downloadedi@  )r   r   r   r   r   r   r   r   intr   KeyErrorr   show_urlstart_progressr	   notifyinfor   show_progressr   writer   end_progress)re   r   temp_locationr   r   total_length
downloadedr   r   r   r   rA   )re   rB   _download_url  sF    "	 (r  c             C   s  d } t  j j | | j  } t  j j |  r t d t |  d
  } | d k r^ d } 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)NTz/The file %s exists. (i)gnore, (w)ipe, (b)ackup iwbFzDeleting %szBacking up %s to %szSaved %s)r  r  r  )r   r   r7   filenameexistsr   r
   r   r   remover   shutilmovecopyr   )r	  r   content_typer   r  download_locationrL   	dest_filerA   rA   rB   
_copy_file  s&    		r  c          )   C   s  | d  k r t    } n  t j d d  } d  } |  j j d d  d } d } 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  } Yq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 |
  d } YqXqn  | s-y# | j | d d } | j   WnH t j k
 r} z% t j  d | j! j" |  f    WYd  d  } ~ Xn X| j# j d d  } |  j } | j# j d  } | r^t$ j% |  \ } } | j d  pX| } 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  | rP| rPt) | | | |   n  t* | | | |   |	 r| rt+ |	 | |  n  | p| st j |  n  t j, |  d  S)Nz-unpackzpip-#rJ   r   Fr)   z.content-typezFile was already downloaded %sz;Previously-downloaded file %s has bad hash, re-downloading.zUsing download cache from %sz,Cached file %s has bad hash, re-downloading.r   TzHTTP error %s while getting %szcontent-typezcontent-dispositionr	  )-r   tempfilemkdtemprN   rP   r   r   r7   r   r   r
  isdirr   r	  r   r   r   r   r   r   r   r   r   unlinkr   rs   stripr   rR   r   r   	HTTPErrorr   rL   r[   r   cgiparse_headerr   guess_extensionr  r  r   r   rmdir)r   r   download_cachedownload_dirr   temp_dirr  
target_urlalready_cached
cache_filecache_content_type_filer   already_downloadedr  r   re   excr	  content_dispositiontypeparamsr   rA   rA   rB   r%     s    
			c       
      C   s  t  |  j  } d } t j j |  r` t j j |  rF t |  n  t j | | d d d  S|  j r t	 | |   } t
 | |   n  | rMt j j | |  j  } t j j |  rMt j |  d } t j d |  |  j rAt	 | |   } y t
 | |   d } WqGt k
 r=t j d |  t j |  YqGXqJd } qMn  | r\| }	 n | }	 t j |	  d } t |	 | | |   | r| rt |	 | | |   n  d  S)NFsymlinksTr   zFile was already downloaded %sz;Previously-downloaded file %s has bad hash, re-downloading.)r   url_without_fragmentr   r   r  r   r  copytreer   r   r   r7   r	  r
  r   r   r   r   r   r   r  r   r  )
r   r   r  	link_pathr%  link_path_hashdownload_pathr  r   	from_pathrA   rA   rB   r"   R  sB    		
	)Pr  email.utilsr   r   r\   r   r   r.   rer  r1   r  r;   Zpip.backwardcompatr   r   r   pip.exceptionsr   r   pip.utilr   r   r	   r
   r   r   r   r   r   pip.vcsr   pip.logr   pip._vendorr   r   Zpip._vendor.requests.adaptersr   Zpip._vendor.requests.authr   r   Zpip._vendor.requests.compatr   Zpip._vendor.requests.exceptionsr   r   Zpip._vendor.requests.modelsr   Zpip._vendor.requests.structuresr   __all__rC   rD   r   rn   r   Sessionr   r   compileIr   r   r   r   	_drive_rer   r   r    r!   r   r#   r$   r   r   r  r  r%   r"   rA   rA   rA   rB   <module>   sh   @	"M#,
<y