U
    fmft                     @   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   /home/dh_an3skk/arjun-chandrasekhar-teaching.com/tomato/tomatoenvy/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   netlocr   file_storage_domainshow_urlurl_without_fragmentr   formatr   r   loggerinfogetEffectiveLevelloggingINFOr   r   r   )r   linkprogress_bar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.   )cgiparse_headergetr/   )content_dispositionZdefault_filename_typeparamsr.   r   r   r   parse_content_disposition]   s
    
r6   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   r2   r6   r	   	mimetypesguess_extensionr(   r+   r,   )r   r%   r.   r3   extr   r   r   _get_http_response_filenamel   s     
r<   c                 C   s2   |j ddd }| j|ddidd}|  |S )N#r7   r   zAccept-EncodingidentityT)r   stream)r(   splitr2   raise_for_status)sessionr%   Z
target_urlr   r   r   r   _http_get_download   s    rC   c                   @   s   e Zd Zdd ZdS )Downloadc                 C   s   || _ || _|| _d S N)responser.   r)   )selfrF   r.   r)   r   r   r   __init__   s    zDownload.__init__N)__name__
__module____qualname__rH   r   r   r   r   rD      s   rD   c                   @   s   e Zd Zdd Zdd ZdS )
Downloaderc                 C   s   || _ || _d S rE   )_session_progress_bar)rG   rB   r&   r   r   r   rH      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)rC   rM   r   	HTTPErrorr    criticalrF   status_coderD   r<   r*   rN   )rG   r%   r   er   r   r   __call__   s      zDownloader.__call__N)rI   rJ   rK   rH   rS   r   r   r   r   rL      s   	rL   )+__doc__r0   r#   r9   r+   pip._vendorr   Zpip._vendor.requests.modelsr   pip._internal.models.indexr   Zpip._internal.network.cacher   Z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   	getLoggerrI   r    r   r*   r/   r6   r<   rC   objectrD   rL   r   r   r   r   <module>   s4   
,