+
     hF+  c                   s   R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	H
t
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHtH t H!t! ^ RI"H#t#H$t$H%t% ]PL                  ! ]'4      t(R R lt)R R lt*R R R llt+R R lt,R R lt-R R lt.R!R R llt/ ! R R4      t0 ! R R4      t1R# )"z(Download files with progress indicators.N)
HTTPStatus)BinaryIOIterableOptionalTuple)Response)ReadTimeoutError)get_download_progress_renderer)IncompleteDownloadErrorNetworkConnectionError)PyPI)Link)is_from_cache)
PipSession)HEADERSraise_for_statusresponse_chunks)format_sizeredact_auth_from_urlsplitextc                F    V ^8  d   QhR\         R\        \        ,          /#    respreturn)r   r   intformat   "C/usr/lib/python3.14/site-packages/pip/_internal/network/download.py__annotate__r      s      ( x}     c                 sv     \        V P                  R ,          4      #   \        \        \        3 d     R# i ; i)zcontent-lengthN)r   headersZ
ValueErrorZKeyErrorZ	TypeErrorr      &r   _get_http_response_sizer#      s5    4<< 0122), s    88c                r   r   )r   r   strr   r   r   r   r       s"     G G8 G Gr   c                sl    V P                   P                  RV P                   P                  R4      4      # )z
Return either the ETag or Last-Modified header (or None if neither exists).
The return value can be used in an If-Range header.
Zetagzlast-modified)r    getr!   r"   r   (_get_http_response_etag_or_last_modifiedr&       s*    
 <<FDLL$4$4_$EFFr   c                s    V ^8  d   QhR\         R\        R\        R\        \        ,          R\        \        ,          R\
        \        ,          /# )r   r   linkprogress_bartotal_lengthrange_startr   )r   r   r$   r   r   r   bytesr   r   r   r   r   (   sP     0 0
0
0 0 3-	0
 #0 e_0r   c                 s   VP                   \        P                  8X  d   VP                  pMVP                  p\        V4      pV'       d8   V'       d   V R \        V4       R\        V4       R2pMV R \        V4       R2p\        V 4      '       d   \        P                  RV4       M5V'       d   \        P                  RV4       M\        P                  RV4       \        P                  4       \        P                  8  d   RpM+\        V 4      '       d   RpMV'       g   RpMVR	8  d   RpMRp\        V 4      pV'       g   V# \        W#VR7      p	V	! V4      # )
z (Z/Z)zUsing cached %szResuming download %szDownloading %sFT)Zbar_typeZsizeZinitial_progressi   )Znetlocr
   Zfile_storage_domainZshow_urlZurl_without_fragmentr   r   r   loggerZinfoZgetEffectiveLevelloggingZINFOr   r   )
r   r'   r(   r)   r*   urlZ
logged_urlZshow_progresschunksZrenderers
   &&&&&     r   _prepare_downloadr0   (   s)    {{d...mm''%c*J,b[!9 :!K<U;VVWX  '<r+l*C)DAFJT%z2	*J7$j1!GLL0	t				$T"F-;H Fr   c                s0    V ^8  d   QhR\         R\         /# )r   filenamer   r$   r   r   r   r   r   [   s     & & & &r   c                s@    \         P                  P                  V 4      # )zB
Sanitize the "filename" value from a Content-Disposition header.
)ospathZbasename)r1   r"   r   sanitize_content_filenamer5   [   s     77H%%r   c                s<    V ^8  d   QhR\         R\         R\         /# )r   content_dispositiondefault_filenamer   r2   r   r   r   r   r   b   s"     ( (3 (# (RU (r   c                s    \         P                  P                  4       pWR&   VP                  R4      pV'       d   \	        \        V4      4      pT;'       g    T# )zw
Parse the "filename" value from a Content-Disposition header, and
return the default filename if the result is empty.
content-typer1   )emailZmessageZMessageZ	get_paramr5   r$   )r6   r7   Zmr1   s   &&  r   parse_content_dispositionr:   b   sN    
 	A+n{{:&H -S];''''r   c                s<    V ^8  d   QhR\         R\        R\        /# )r   r   r'   r   )r   r   r$   r   r   r   r   r   q   s!      h d s r   c                s   VP                   pV P                  P                  R4      pV'       d   \        W24      p\	        V4      ^,          pV'       gA   \
        P                  ! V P                  P                  RR4      4      pV'       d	   W$,          pV'       g\   VP                  V P                  8w  dA   \        P                  P	                  V P                  4      ^,          pV'       d	   W$,          pV# )zgGet an ideal filename from the given HTTP response, falling back to
the link filename if not provided.
zcontent-dispositionr8    )
r1   r    r%   r:   r   	mimetypesZguess_extensionr.   r3   r4   )r   r'   r1   r6   Zexts   &&   r   _get_http_response_filenamer=   q   s     }}H,,**+@A,-@K!(+A.C''(8(8(LMOH488txx'ggtxx(+OHOr   c          
      s    V ^8  d   QhR\         R\        R\        \        ,          R\        \        ,          R\
        /# )r   sessionr'   r*   if_ranger   )r   r   r   r   r$   r   r   r   r   r   r      sB      
 # sm	
 r   c                 s   VP                   P                  R ^4      ^ ,          p\        P                  ! 4       pV'       d
   RV R2VR&   V'       d   W5R&    V P	                  WERR7      p\        V4       V#   \         dB   pTP                  f   Q h\        P                  RTP                  P                  T4       h Rp?ii ; i)	Z#zbytes=Z-ZRangezIf-RangeT)r    ZstreamNzHTTP error %s while getting %s)r.   Zsplitr   Zcopyr%   r   r	   Zresponser,   Zcriticalstatus_code)r>   r'   r*   r?   Z
target_urlr    r   es   &&&&    r   _http_get_downloadrB      s     Q'*JllnG#K=2&
{{:t{D
 K	 " zz%%%8!**:P:PRVWs   A7 7C<B>>Cc                   s   a  ] tR t^t o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	Rt
V tR# )
Downloaderc                0   < V ^8  d   QhRS[ RS[RS[RR/# r   r>   r(   resume_retriesr   Nr   r$   r   r   __classdict__   "r   r   Downloader.__annotate__   s3     . .. . 	.
 
.r   c                sF    V^ 8  g   Q R4       hWn         W n        W0n        R# )    z<Number of max resume retries must be bigger or equal to zeroN)_session_progress_bar_resume_retriesselfr>   r(   rF      &&&&r   __init__ZDownloader.__init__   s/     a	JI	J)-r   c                sB   < V ^8  d   QhRS[ RS[RS[S[S[3,          /# )r   r'   locationr   )r   r$   r   rH   rJ   r   r   rK      s*     & &T &S &U38_ &r   c           	     s   \        V P                  V4      p\        V4      pVP                  P	                  RR4      p\        W14      p\        P                  P                  W&4      p\        VR4      ;_uu_ 4       pV P                  W1V^ V4      p	V'       d   W8  d   V P                  W1WV	4       RRR4       Wu3#   + '       g   i     Yu3# ; i)z.Download the file given by link into location.zContent-Typer;   ZwbN)rB   rM   r#   r    r%   r=   r3   r4   ZjoinZopen_process_response_attempt_resume)
rQ   r'   rT   r   r)   content_typer1   filepathcontent_filebytes_receiveds
   &&&       r   __call__ZDownloader.__call__   s    !$--6 /t4||'';.t:77<<3(D!!\!33L!\N  =$$N " %% "! %%s   <6B==C	c                sN   < V ^8  d   QhRS[ RS[RS[RS[RS[S[,          RS[/# )r   r   r'   rY   rZ   r)   r   )r   r   r   r   r   rH   rJ   r   r   rK      sK     
 

 
 	

 
 sm
 

r   c                sj    \        WV P                  WTR7      pV P                  Wc\        V4      R7      # )z6Process the response and write the chunks to the file.)r*   )allow_partial)r0   rN   _write_chunks_to_filebool)rQ   r   r'   rY   rZ   r)   r/   s   &&&&&& r   rU   ZDownloader._process_response   s?     #**L
 ))\0B * 
 	
r   c                sB   < V ^8  d   QhRS[ S[,          RS[RS[RS[/# )r   r/   rY   r\   r   )r   r+   r   r^   r   rH   rJ   r   r   rK      s1      uo5=QU	r   c               s    ^ p V F&  pV\        V4      ,          pVP                  V4       K(  	  V#   \         d+   pT'       g   Th\        P	                  R4        Rp?T# Rp?ii ; i)zEWrite the chunks to the file and return the number of bytes received.z'Connection timed out while downloading.N)ZlenZwriter   r,   warning)rQ   r/   rY   r\   rZ   ZchunkrA   s   &&&$   r   r]   Z Downloader._write_chunks_to_file   sq     
	F#e*,""5)      	F  NNDEE	Fs   ,2 A'A""A'c                sL   < V ^8  d   QhRS[ RS[RS[RS[S[,          RS[RR/# )r   r   r'   rY   r)   rZ   r   N)r   r   r   r   r   rH   rJ   r   r   rK      sK     3 33 3 	3
 sm3 3 
3r   c                s   \        V4      pV P                  pV'       d   V'       d   WT8  d   V^,          p\        P                  R\	        V4      \	        V4      V P                  V,
          4        \        V P                  VVVR7      pVP                  \        P                  8g  p	V	'       d   V P                  W4      w  rTpWPP                  WW5V4      ,          pK  V'       d@   WT8  d8   \        P                   ! VP"                  4       \%        W%W@P                  R7      hR# R#   \        \        \        3 d     EK+  i ; i)z9Attempt to resume the download if connection was dropped.z<Attempting to resume incomplete download (%s/%s, attempt %d))r*   r?   )ZretriesN)r&   rO   r,   r_   r   rB   rM   r@   r    ZPARTIAL_CONTENT_reset_download_staterU   ZConnectionErrorr   ZOSErrorr3   ZremoveZnamer   )
rQ   r   r'   rY   r)   rZ   etag_or_last_modifiedZattempts_leftZresume_respZmust_restarts
   &&&&&&    r   rV   ZDownloader._attempt_resume   s$    !I N,,}1NQMNNNN+L)%%5	0MM .2	  +66*:T:TT22;M HN2G "8"8|\#  N9IIl''()l<P<P  :<	 $%5w? s   3A+D) )EEc          
      sf   < V ^8  d   QhRS[ RS[RS[S[S[S[,          S[S[,          3,          /# )r   r   rY   r   )r   r   r   r   r   r$   rH   rJ   r   r   rK     sB     C CC C 
sHSM8C=0	1	Cr   c                s|    VP                  ^ 4       VP                  4        ^ p\        V4      p\        V4      pW4V3# )zCReset the download state to restart downloading from the beginning.)ZseekZtruncater#   r&   )rQ   r   rY   rZ   r)   ra      &&&   r   r`   Z Downloader._reset_download_state  sD     	!.t4 H N-BBBr   )rN   rO   rM   N)__name__
__module____qualname____firstlineno__rS   r[   rU   r]   rV   r`   __static_attributes____classdictcell__rI      @r   rC   rC      sD     . .& &0
 
  &3 3jC Cr   rC   c                   sD   a  ] tR tRt o V 3R lR ltV 3R lR ltRtV tR# )BatchDownloaderi+  c                rD   rE   rG   rH   rJ   r   r   BatchDownloader.__annotate__,  s9     M MM M 	M
 
Mr   c                s(    \        WV4      V n        R # )N)rC   _downloaderrP   rR   r   rS   ZBatchDownloader.__init__,  s     &g^Lr   c                sx   < V ^8  d   QhRS[ S[,          RS[RS[ S[S[S[S[S[3,          3,          ,          /# )r   linksrT   r   )r   r   r$   r   rH   rJ   r   r   rl   4  s@     1 1d^1/21	%eCHo-.	/1r   c              #  sT   "   V F  pV P                  W24      w  rEW4V33x  K  	  R# 5i)z0Download the files given by links into location.Nrm   )rQ   rn   rT   r'   rX   rW   rb   r   r[   ZBatchDownloader.__call__4  s2      D%)%5%5d%E"H<000 s   &(ro   N)rc   rd   re   rf   rS   r[   rg   rh   ri   rj   r   rk   rk   +  s     M M1 1r   rk   )rL   )rL   N)2Z__doc__Zemail.messager9   r-   r<   r3   Zhttpr    Ztypingr   r   r   r   Zpip._vendor.requests.modelsr   Zpip._vendor.urllib3.exceptionsr   Zpip._internal.cli.progress_barsr   Zpip._internal.exceptionsr   r	   Zpip._internal.models.indexr
   Zpip._internal.models.linkr   Zpip._internal.network.cacher   Zpip._internal.network.sessionr   Zpip._internal.network.utilsr   r   r   Zpip._internal.utils.miscr   r   r   Z	getLoggerrc   r,   r#   r&   r0   r5   r:   r=   rB   rC   rk   ) r   r   <module>rp      s    .    	  6 6 0 ; J T + * 5 4 R R P P			8	$G0f&(*0JC JCZ1 1r   