
 XW              
   @   sO  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" Z" d  d l# 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 l0 m1 Z1 d d d d d d d d d d g
 Z2 d d   Z3 Gd d   d e'  Z4 Gd d   d e5  Z6 Gd d   d e%  Z7 Gd d    d  e" j8  Z9 d d d! d  Z: e j; d" e j<  Z= e j; d# e j<  Z> d$ d   Z? d% d   Z@ e j; d& e j<  ZA e j; d' e j<  ZB d( d   ZC d) d   ZD d* d+ d  ZE d, d-   ZF d. d   ZG d/ d   ZH d0 d1   ZI d2 d3   ZJ d4 d5   ZK d6 d7   ZL d d d8 d  ZM d d9 d  ZN 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)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 r?   7/home/ubuntu/projects/ifolica/build/pip/pip/download.py
user_agent$   s2    	rA   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)selfrC   r?   r?   r@   __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
urlunparserD   getparse_credentialsr   register_hook
handle_401)rE   reqparsedrM   usernamepasswordr?   r?   r@   __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_coderC   r   rL   r   rM   getpassrD   contentrawrelease_connr   request
connectionsendhistoryappend)rE   respkwargsrU   rV   rW   rT   new_respr?   r?   r@   rS   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)NrG   rH   r   :)NN)rsplitrN   )rE   rM   userinfor?   r?   r@   rQ      s    
z&MultiDomainBasicAuth.parse_credentialsN)__name__
__module____qualname__rF   rX   rS   rQ   r?   r?   r?   r@   rB   F   s   "rB   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)rE   rm   r?   r?   r@   rF      s    zLocalFSResponse.__init__c             C   s   t  |  j |  S)N)getattrrm   )rE   namer?   r?   r@   __getattr__   s    zLocalFSResponse.__getattr__NFc             C   s   |  j  j |  S)N)rm   read)rE   amtdecode_contentcache_contentr?   r?   r@   rq      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)Nr?   )rE   headerr?   r?   r@   
getheaders   s    zBLocalFSResponse._original_response.<locals>.FakeMessage.getheadersc             S   s   g  S)Nr?   )rE   ru   defaultr?   r?   r@   get_all   s    z?LocalFSResponse._original_response.<locals>.FakeMessage.get_allN)ri   rj   rk   rv   rx   r?   r?   r?   r@   FakeMessage   s   ry   c                   s(   e  Z d  Z e   f d d    Z d S)z8LocalFSResponse._original_response.<locals>.FakeResponsec                s       S)Nr?   )rE   )ry   r?   r@   msg   s    z<LocalFSResponse._original_response.<locals>.FakeResponse.msgN)ri   rj   rk   propertyrz   r?   )ry   r?   r@   FakeResponse   s   r|   )object)rE   r|   r?   )ry   r@   _original_response   s    z"LocalFSResponse._original_response)ri   rj   rk   rF   rp   rq   r{   r~   r?   r?   r?   r@   rl      s   rl   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 allowedrH   r'   rI      usegmtTr   z
text/plainzContent-TypezContent-LengthzLast-Modifiedrb)r'   )r   rL   rM   lowerr   rO   r   r   rY   osstatemailutils
formatdatest_mtimer   	mimetypes
guess_typest_sizeheadersrl   openr\   close)rE   r^   streamtimeoutverifycertproxies
parsed_urlreal_urlpathnamerc   statsmodifiedr?   r?   r@   r`      s$    +			
zLocalFSAdapter.sendc             C   s   d  S)Nr?   )rE   r?   r?   r@   r      s    zLocalFSAdapter.close)ri   rj   rk   r`   r   r?   r?   r?   r@   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   rF   rA   r   rB   authmountr   )rE   argsrd   )	__class__r?   r@   rF      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filerH   r   rI   r   )z	localhost)r   schemerO   
setdefaultr   r   r   r^   )rE   methodrL   r   rd   rU   )r   r?   r@   r^      s
    .zPipSession.request)ri   rj   rk   r   rF   r^   r?   r?   )r   r@   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.NrH   r   httpz6Requirements file %s references URL %s, which is localrf   \/|z$Could not open requirements file: %s)r   
_scheme_researchgroupr   
startswithr   rN   replace_url_slash_drive_rematchr   unquotelstriprP   raise_for_statussixPY3rL   textr[   r   rq   r8   r/   exc_infostrr   )
rL   
comes_fromsessionr   r   pathrc   fr[   er?   r?   r@   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 URLrf   FrH   r   r   httpsr   ftp)rN   r   r   all_schemes)ro   r   r?   r?   r@   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   rf   rI   )r   AssertionErrorlenr   r   r   _url_drive_rer   )rL   r   r?   r?   r@   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 Sr?   )r   quote).0partr?   r?   r@   
<listcomp>C  s   	 zpath_to_url.<locals>.<listcomp>zfile:///)	r   r   normpathabspath
splitdriverN   sepr5   r   )r   drivefilepathrL   r?   r?   r@   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.whlrH   TF)r   r   r   r   r   r   r   )r   r   )ro   archivesextr?   r?   r@   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_backendr?   r?   r@   r   S  s    c             C   s=   x6 t  j D]+ } |  j | j k r
 | |  j  } | Sq
 Wd  S)N)r   backendsr   schemesrL   )r   backendr   r?   r?   r@   r   [  s    r   c             C   s   t  t |    S)N)boolr   )r   r?   r?   r@   r!   b  s    c             C   s   |  j  j   j d  S)Nzfile:)rL   r   r   )r   r?   r?   r@   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   r?   r?   r@   _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   rq   updater   )target_filer   r   fpchunkr?   r?   r@   _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)Nrs   F)r\   r   r   r   AttributeErrorrq   )
chunk_sizer   r   )rc   r?   r@   	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)rc   r   temp_locationr   r   total_length
downloadedr   r   r   r   r?   )rc   r@   _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   r5   filenameexistsr   r
   r   r   remover   shutilmovecopyr   )r  r   content_typer   r  download_locationrJ   	dest_filer?   r?   r@   
_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-#rH   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mkdtemprL   rN   r   r   r5   r   r   r	  isdirr   r  r   r   r   r   r   r   r   r   r   unlinkr   rq   stripr   rP   r   requests	HTTPErrorr   rJ   rY   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   rc   excr  content_dispositiontypeparamsr   r?   r?   r@   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   r5   r  r	  r   r   r   r   r   r   r  r   r  )
r   r   r  	link_pathr%  link_path_hashdownload_pathr  r   	from_pathr?   r?   r@   r    R  sB    		
	)Or  email.utilsr   r   rZ   r   r   r,   rer  r/   r  r9   Zpip.backwardcompatr   r   r   pip.exceptionsr   r   pip.utilr   r   r	   r
   r   r   r   r   r   pip.vcsr   pip.logr   r  r   Zrequests.adaptersr   Zrequests.authr   r   Zrequests.compatr   Zrequests.exceptionsr   r   Zrequests.modelsr   Zrequests.structuresr   __all__rA   rB   r}   rl   r   Sessionr   r   compileIr   r   r   r   	_drive_rer   r   r   r   r   r!   r"   r   r   r  r  r#   r    r?   r?   r?   r@   <module>   sh   @	"M#,
<y