3

gt                 @   s"  d Z ddlZddlZddlZddl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 dd
lmZ erddlmZmZ ddlmZ ddlmZ ddlmZ eje Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'G dd de(Z)G dd de(Z*dS )z)Download files with progress indicators.
    N)requests)CONTENT_CHUNK_SIZE)PyPI)is_from_cache)response_chunks)format_sizeredact_auth_from_urlsplitext)MYPY_CHECK_RUNNING)DownloadProgressProvider)IterableOptional)Response)Link)
PipSessionc             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)resp r   B/tmp/pip-unpacked-wheel-v59g9nu1/pip/_internal/network/download.py_get_http_response_size!   s    r   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   linkprogress_bartotal_lengthurl
logged_urlshow_progresschunksr   r   r   _prepare_download)   s2    
r-   c             C   s   t jj| S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ospathbasename)filenamer   r   r   sanitize_content_filenameU   s    r2   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.
    r1   )cgiparse_headergetr2   )content_dispositiondefault_filename_typeparamsr1   r   r   r   parse_content_disposition]   s
    
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 )
r1   r   r5   r:   r	   	mimetypesguess_extensionr)   r.   r/   )r   r&   r1   r6   extr   r   r   _get_http_response_filenamel   s    
r@   c             C   s2   |j jddd }| j|ddidd}|j  |S )N#r;   r   zAccept-EncodingidentityT)r   stream)r)   splitr5   raise_for_status)sessionr&   
target_urlr   r   r   r   _http_get_download   s    rH   c               @   s   e Zd Zdd ZdS )Downloadc             C   s   || _ || _|| _d S )N)responser1   r,   )selfrJ   r1   r,   r   r   r   __init__   s    zDownload.__init__N)__name__
__module____qualname__rL   r   r   r   r   rI      s   rI   c               @   s   e Zd Zdd Zdd ZdS )
Downloaderc             C   s   || _ || _d S )N)_session_progress_bar)rK   rF   r'   r   r   r   rL      s    zDownloader.__init__c             C   sf   yt | j|}W n8 tjk
rH } ztjd|jj|  W Y d d }~X nX t|t	||t
||| jS )NzHTTP error %s while getting %s)rH   rQ   r   	HTTPErrorr!   criticalrJ   status_coderI   r@   r-   rR   )rK   r&   r   er   r   r   __call__   s    zDownloader.__call__N)rM   rN   rO   rL   rW   r   r   r   r   rP      s   	rP   )+__doc__r3   r$   r=   r.   pip._vendorr   Zpip._vendor.requests.modelsr   pip._internal.models.indexr   pip._internal.network.cacher   pip._internal.network.utilsr   pip._internal.utils.miscr   r   r	   pip._internal.utils.typingr
   pip._internal.utils.uir   typingr   r   r   pip._internal.models.linkr   pip._internal.network.sessionr   	getLoggerrM   r!   r   r-   r2   r:   r@   rH   objectrI   rP   r   r   r   r   <module>   s4   
,