î
½1kdÛW  ã            
   @   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?   ú;/var/www/pythonscrapper/code/venv/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)z�Gets 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%%  %séd   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