
    *,h              	          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jB                  e"      Z#dedee$   fdZ%dedede&dee'   fdZ(de&de&fdZ)de&de&de&fdZ*dedede&fdZ+dededefdZ, G d d      Z- G d d      Z.y)z)Download files with progress indicators.
    N)IterableOptionalTuple)CONTENT_CHUNK_SIZEResponse)get_download_progress_renderer)NetworkConnectionError)PyPI)Link)is_from_cache)
PipSession)HEADERSraise_for_statusresponse_chunks)format_sizeredact_auth_from_urlsplitextrespreturnc                 h    	 t        | j                  d         S # t        t        t        f$ r Y y w xY w)Nzcontent-length)intheaders
ValueErrorKeyError	TypeError)r   s    `/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pip/_internal/network/download.py_get_http_response_sizer      s5    4<< 0122), s    11linkprogress_barc                     t        |       }|j                  t        j                  k(  r|j                  }n|j
                  }t        |      }|rdj                  |t        |            }t        |       rt        j                  d|       nt        j                  d|       t        j                         t        j                  kD  rd}nt        |       rd}n|sd}n
|dkD  rd}nd}t        | t               }|s|S t#        ||      } ||      S )Nz{} ({})zUsing cached %szDownloading %sFTi@  )bar_typesize)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chunksrenderers	            r   _prepare_downloadr3      s    
 +40L{{d...mm''%c*J%%j+l2KL
T%z2$j1!GLL0	t			#T#56F-|,WHF    filenamec                 @    t         j                  j                  |       S )zJ
    Sanitize the "filename" value from a Content-Disposition header.
    )ospathbasename)r5   s    r   sanitize_content_filenamer:   H   s     77H%%r4   content_dispositiondefault_filenamec                     t         j                  j                         }| |d<   |j                  d      }|rt	        t        |            }|xs |S )z
    Parse the "filename" value from a Content-Disposition header, and
    return the default filename if the result is empty.
    content-typer5   )emailmessageMessage	get_paramr:   str)r;   r<   mr5   s       r   parse_content_dispositionrE   O   sM    
 	A+An{{:&H -S];'''r4   c                    |j                   }| j                  j                  d      }|rt        ||      }t	        |      d   }|s6t        j                  | j                  j                  dd            }|r||z  }|sL|j                  | j                  k7  r3t        j                  j	                  | j                        d   }|r||z  }|S )zoGet an ideal filename from the given HTTP response, falling back to
    the link filename if not provided.
    zcontent-disposition   r>    )
r5   r   getrE   r   	mimetypesguess_extensionr.   r7   r8   )r   r   r5   r;   exts        r   _get_http_response_filenamerM   ^   s     }}H,,**+@A,-@(K!(+A.C''(8(8(LMOH488txx'ggtxx(+OHOr4   sessionc                     |j                   j                  dd      d   }| j                  |t        d      }t	        |       |S )N#rG   r   T)r   stream)r.   splitrI   r   r   )rN   r   
target_urlr   s       r   _http_get_downloadrT   s   s<    Q'*J;;z74;@DTKr4   c                   >    e Zd ZdededdfdZdededeeef   fdZy)	
DownloaderrN   r   r   Nc                      || _         || _        y N_session_progress_barselfrN   r   s      r   __init__zDownloader.__init__{       
  )r4   r   locationc                     	 t        | j                  |      }t        ||      }t        j                  j                  ||      }t        ||| j                        }t        |d      5 }|D ]  }	|j                  |	        	 ddd       |j                  j!                  dd      }
||
fS # t        $ r?}|j                  J t        j                  d|j                  j                  |        d}~ww xY w# 1 sw Y   txY w)z.Download the file given by link into location.NHTTP error %s while getting %swbContent-TyperH   rT   rZ   r	   responser(   criticalstatus_coderM   r7   r8   joinr3   r[   openwriter   rI   )r]   r   r`   r   er5   filepathr1   content_filechunkcontent_types              r   __call__zDownloader.__call__   s    	%dmmT:D /tT:77<<(3"4t/A/AB(D! 	*\ *""5)*	* ||'';%% & 	::))OO0!**2H2H$ 		* 	*s#   B) 'C4)	C12:C,,C14C=)	__name__
__module____qualname__r   rC   r^   r   r   rq    r4   r   rV   rV   z   sE    ** * 
	*&T &S &U38_ &r4   rV   c                   T    e Zd ZdededdfdZdee   dedeeeeeef   f      fdZ	y)	BatchDownloaderrN   r   r   Nc                      || _         || _        y rX   rY   r\   s      r   r^   zBatchDownloader.__init__   r_   r4   linksr`   c              #      K   |D ]  }	 t        | j                  |      }t        ||      }t        j                  j                  ||      }t        ||| j                        }t        |d      5 }	|D ]  }
|	j                  |
        	 ddd       |j                  j!                  dd      }|||ff  y# t        $ r?}|j                  J t        j                  d|j                  j                  |        d}~ww xY w# 1 sw Y   {xY ww)z0Download the files given by links into location.Nrb   rc   rd   rH   re   )r]   ry   r`   r   r   rl   r5   rm   r1   rn   ro   rp   s               r   rq   zBatchDownloader.__call__   s
      	1D	)$--> 34>Hww||Hh7H&tT43E3EFFh% .# .E &&u-..  <<++NB?L<000)	1 * zz--4JJ**
 . .s@   DB7AD.D/D7	C? :C::C??DD	D)
rr   rs   rt   r   rC   r^   r   r   r   rq   ru   r4   r   rw   rw      s[    ** * 
	*1d^1/21	%eCHo-.	/1r4   rw   )/__doc__email.messager?   r+   rJ   r7   typingr   r   r   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   	getLoggerrr   r(   r   r   rC   bytesr3   r:   rE   rM   rT   rV   rw   ru   r4   r   <module>r      s
      	 , , D J ; + * 5 4 R R P P			8	$( x} '
'
' ' e_	'T& & &(3 (# (RU (h d s *
 $ 8 & &>!1 !1r4   