o
    |ŸŽi8  ã                	   @   sj  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  e!¡Z"dedee# fdd„Z$dedede%dee& fdd„Z'de%de%fdd„Z(de%de%de%fdd„Z)dedede%fdd„Z*dededef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,   zt | jd ƒW S  tttfy   Y d S w )Nzcontent-length)ÚintÚheadersÚ
ValueErrorÚKeyErrorÚ	TypeError)r   © r   úhC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\pip/_internal/network/download.pyÚ_get_http_response_size   s
   ÿr   ÚlinkÚprogress_barc                 C   sÀ   t | ƒ}|jtjkr|j}n|j}t|ƒ}|rd |t|ƒ¡}t	| ƒr*t
 d|¡ nt
 d|¡ t
 ¡ tjkr:d}nt	| ƒrAd}n|sFd}n	|dkrMd}nd}t| tƒ}|sX|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   r   r   Útotal_lengthÚurlÚ
logged_urlÚshow_progressÚchunksr   r   r   Ú_prepare_download   s.   
r/   Úfilenamec                 C   s   t j | ¡S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    N)ÚosÚpathÚbasename)r0   r   r   r   Úsanitize_content_filenameG   s   r4   Úcontent_dispositionÚdefault_filenamec                 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.
    r0   N)ÚcgiÚparse_headerÚgetr4   )r5   r6   Ú_typeÚparamsr0   r   r   r   Úparse_content_dispositionN   s
   
r<   c                 C   s‚   |j }| j d¡}|rt||ƒ}t|ƒd }|s(t | j dd¡¡}|r(||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Ú N)
r0   r   r9   r<   r   Ú	mimetypesÚguess_extensionr+   r1   r2   )r   r   r0   r5   Úextr   r   r   Ú_get_http_response_filename\   s   
rB   Úsessionc                 C   s.   |j  dd¡d }| j|tdd�}t|ƒ |S )Nú#r=   r   T)r   Ústream)r+   Úsplitr9   r   r   )rC   r   Ú
target_urlr   r   r   r   Ú_http_get_downloadq   s   rH   c                   @   s@   e Zd Zdededdfdd„Zdededeeef fd	d
„ZdS )Ú
DownloaderrC   r   r   Nc                 C   ó   || _ || _d S ©N©Ú_sessionÚ_progress_bar©ÚselfrC   r   r   r   r   Ú__init__y   ó   
zDownloader.__init__r   Úlocationc              
   C   sÆ   zt | j|ƒ}W n ty% } z|jdusJ ‚t d|jj|¡ ‚ d}~ww t||ƒ}tj	 
||¡}t||| jƒ}t|dƒ�}|D ]}	| |	¡ qAW d  ƒ n1 sSw   Y  |j dd¡}
||
fS )z.Download the file given by link into location.NúHTTP error %s while getting %sÚwbúContent-Typer>   ©rH   rM   r   Úresponser%   ÚcriticalÚstatus_coderB   r1   r2   Újoinr/   rN   ÚopenÚwriter   r9   )rP   r   rS   r   Úer0   Úfilepathr.   Úcontent_fileÚchunkÚcontent_typer   r   r   Ú__call__�   s(   
ÿ€û
ÿÿzDownloader.__call__)	Ú__name__Ú
__module__Ú__qualname__r   ÚstrrQ   r
   r   rc   r   r   r   r   rI   x   s    þý
ü"rI   c                   @   sP   e Zd Zdededdfdd„Zdee dedeeeeeef f  fd	d
„Z	dS )ÚBatchDownloaderrC   r   r   Nc                 C   rJ   rK   rL   rO   r   r   r   rQ   ˜   rR   zBatchDownloader.__init__ÚlinksrS   c                 c   sÜ   � |D ]h}zt | j|ƒ}W n ty* } z|jdusJ ‚t d|jj|¡ ‚ d}~ww t||ƒ}tj	 
||¡}t||| jƒ}t|dƒ�}	|D ]}
|	 |
¡ qFW d  ƒ n1 sXw   Y  |j dd¡}|||ffV  qdS )z0Download the files given by links into location.NrT   rU   rV   r>   rW   )rP   ri   rS   r   r   r^   r0   r_   r.   r`   ra   rb   r   r   r   rc       s2   €ý€ù
	ÿÿìzBatchDownloader.__call__)
rd   re   rf   r   rg   rQ   r   r
   r   rc   r   r   r   r   rh   —   s    þý
üÿÿþrh   ).Ú__doc__r7   r(   r?   r1   Ú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   Ú	getLoggerrd   r%   r   r   rg   Úbytesr/   r4   r<   rB   rH   rI   rh   r   r   r   r   Ú<module>   s@    
ÿþý
ü)