U
    Eht                     @   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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   s2   zt | jd W S  tttfk
r,   Y d S X d S )Nzcontent-length)intheaders
ValueErrorKeyError	TypeError)resp r   D./venv/lib/python3.8/site-packages/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|t|}t	| rTt
d| nt
d| t
 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 %sFTi@  )max)r   Znetlocr   Zfile_storage_domainZshow_urlZurl_without_fragmentr   formatr   r   loggerinfoZgetEffectiveLevelloggingINFOr   r   r   )r   linkprogress_barZtotal_lengthurlZ
logged_urlZshow_progresschunksr   r   r   _prepare_download)   s8    
 r$   c                 C   s   t j| S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ospathbasename)filenamer   r   r   sanitize_content_filenameU   s    r)   c                 C   s,   t | \}}|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(   )cgiZparse_headergetr)   )content_dispositionZdefault_filenameZ_typeparamsr(   r   r   r   parse_content_disposition]   s
    
r.   c                 C   s   |j }| jd}|r t||}t|d }|sPt| jdd}|rP||7 }|s~|j| jkr~t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   r+   r.   r	   	mimetypesZguess_extensionr"   r%   r&   )r   r    r(   r,   extr   r   r   _get_http_response_filenamel   s     
r3   c                 C   s2   |j ddd }| j|ddidd}|  |S )N#r/   r   zAccept-EncodingidentityT)r   stream)r"   splitr+   Zraise_for_status)sessionr    Z
target_urlr   r   r   r   _http_get_download   s    r9   c                   @   s   e Zd Zdd ZdS )Downloadc                 C   s   || _ || _|| _d S N)responser(   r#   )selfr<   r(   r#   r   r   r   __init__   s    zDownload.__init__N)__name__
__module____qualname__r>   r   r   r   r   r:      s   r:   c                   @   s   e Zd Zdd Zdd ZdS )
Downloaderc                 C   s   || _ || _d S r;   )_session_progress_bar)r=   r8   r!   r   r   r   r>      s    zDownloader.__init__c              
   C   sf   zt | j|}W n8 tjk
rH } ztd|jj|  W 5 d }~X Y nX t|t	||t
||| jS )NzHTTP error %s while getting %s)r9   rC   r   Z	HTTPErrorr   Zcriticalr<   Zstatus_coder:   r3   r$   rD   )r=   r    r   er   r   r   __call__   s      zDownloader.__call__N)r?   r@   rA   r>   rF   r   r   r   r   rB      s   	rB   )+__doc__r*   r   r1   r%   Zpip._vendorr   Zpip._vendor.requests.modelsr   Zpip._internal.models.indexr   Zpip._internal.network.cacher   Zpip._internal.network.utilsr   Zpip._internal.utils.miscr   r   r	   Zpip._internal.utils.typingr
   Zpip._internal.utils.uir   typingr   r   r   Zpip._internal.models.linkr   Zpip._internal.network.sessionr   Z	getLoggerr?   r   r   r$   r)   r.   r3   r9   objectr:   rB   r   r   r   r   <module>   s4   
,