3
g                 @   sT  d 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 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZmZmZ ej e!Z"eee# dddZ$eee%ee& dddZ'e%e%dddZ(e%e%e%dddZ)eee%dddZ*eeedddZ+G dd  d Z,G d!d" d"Z-dS )#z)Download files with progress indicators.
    N)IterableOptionalTuple)CONTENT_CHUNK_SIZEResponse)DownloadProgressProvider)NetworkConnectionError)PyPI)Link)is_from_cache)
PipSession)HEADERSraise_for_statusresponse_chunks)format_sizeredact_auth_from_urlsplitext)respreturnc             C   s.   yt | jd S  tttfk
r(   d S X d S )Nzcontent-length)intheaders
ValueErrorKeyError	TypeError)r    r   \/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/network/download.py_get_http_response_size   s    r   )r   linkprogress_barr   c             C   s   t | }|jtjkr|j}n|j}t|}|r>dj|t|}t	| rTt
jd| nt
jd| t
j tjkrtd}n*t	| rd}n|sd}n|d	krd}nd}t| t}|s|S t||d|S )
Nz{} ({})zUsing cached %szDownloading %sFT(   i  )maxi@  )r   netlocr	   file_storage_domainshow_urlurl_without_fragmentr   formatr   r   loggerinfogetEffectiveLevelloggingINFOr   r   r   )r   r   r   total_lengthurlZ
logged_urlZshow_progresschunksr   r   r   _prepare_download   s.    
r.   )filenamer   c             C   s   t jj| S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ospathbasename)r/   r   r   r   sanitize_content_filenameG   s    r3   )content_dispositiondefault_filenamer   c             C   s,   t j| \}}|jd}|r$t|}|p*|S )z
    Parse the "filename" value from a Content-Disposition header, and
    return the default filename if the result is empty.
    r/   )cgiparse_headergetr3   )r4   r5   _typeparamsr/   r   r   r   parse_content_dispositionN   s
    
r;   )r   r   r   c             C   s   |j }| jjd}|r t||}t|d }|sPtj| jjdd}|rP||7 }| r|j| jkrtj	j| jd }|r||7 }|S )zoGet an ideal filename from the given HTTP response, falling back to
    the link filename if not provided.
    zcontent-disposition   zcontent-type )
r/   r   r8   r;   r   	mimetypesguess_extensionr,   r0   r1   )r   r   r/   r4   extr   r   r   _get_http_response_filename\   s    
rA   )sessionr   r   c             C   s.   |j jddd }| j|tdd}t| |S )N#r<   r   T)r   stream)r,   splitr8   r   r   )rB   r   Z
target_urlr   r   r   r   _http_get_downloadq   s    rF   c               @   s8   e Zd ZeeddddZeeeeef dddZdS )
DownloaderN)rB   r   r   c             C   s   || _ || _d S )N)_session_progress_bar)selfrB   r   r   r   r   __init__y   s    zDownloader.__init__)r   locationr   c             C   s   yt | j|}W nD tk
rT } z(|jdk	s0ttjd|jj|  W Y dd}~X nX t||}t	j
j||}t||| j}t|d}x|D ]}	|j|	 qW W dQ R X |jjdd}
||
fS )z.Download the file given by link into location.NzHTTP error %s while getting %swbzContent-Typer=   )rF   rH   r   responseAssertionErrorr&   criticalstatus_coderA   r0   r1   joinr.   rI   openwriter   r8   )rJ   r   rL   r   er/   filepathr-   content_filechunkcontent_typer   r   r   __call__   s    

zDownloader.__call__)	__name__
__module____qualname__r   strrK   r
   r   rZ   r   r   r   r   rG   x   s   rG   c               @   sH   e Zd ZeeddddZee eeeeeeef f  dddZ	dS )BatchDownloaderN)rB   r   r   c             C   s   || _ || _d S )N)rH   rI   )rJ   rB   r   r   r   r   rK      s    zBatchDownloader.__init__)linksrL   r   c             c   s   x|D ]}yt | j|}W nD tk
r^ } z(|jdk	s:ttjd|jj|  W Y dd}~X nX t||}t	j
j||}t||| j}t|d}	x|D ]}
|	j|
 qW W dQ R X |jjdd}|||ffV  qW dS )z0Download the files given by links into location.NzHTTP error %s while getting %srM   zContent-Typer=   )rF   rH   r   rN   rO   r&   rP   rQ   rA   r0   r1   rR   r.   rI   rS   rT   r   r8   )rJ   r`   rL   r   r   rU   r/   rV   r-   rW   rX   rY   r   r   r   rZ      s$    


zBatchDownloader.__call__)
r[   r\   r]   r   r^   rK   r   r
   r   rZ   r   r   r   r   r_      s
   r_   ).__doc__r6   r)   r>   r0   typingr   r   r   Zpip._vendor.requests.modelsr   r   pip._internal.cli.progress_barsr   pip._internal.exceptionsr   pip._internal.models.indexr	   pip._internal.models.linkr
   pip._internal.network.cacher   pip._internal.network.sessionr   pip._internal.network.utilsr   r   r   pip._internal.utils.miscr   r   r   	getLoggerr[   r&   r   r   r^   bytesr.   r3   r;   rA   rF   rG   r_   r   r   r   r   <module>   s4   
%