
    uki@                         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m	Z	m
Z
 ddlmZmZmZmZmZmZ ddlmZ  G d	 d
e      Zy)    N   )FileDownloader   )Request)CertificateVerifyError	HTTPErrorTransportError)ContentTooShortErrorRetryManagerThrottledDownloadint_or_noneparse_http_rangetry_call)HTTPHeaderDictc                       e Zd Zd Zy)HttpFDc                    
 d   j                  dd       i  j                        }||d<    G d dt              } |       |_         j	                  |      _        d _        t        ddij                  d             j                  j                  d	d
      r j                  nA j                  j                  d      xs% j                  di       j                  d      xs dd_
        d_         j                  j                  dd      _        t        j                         _        t        j                  d            \  } j                  j                  dd      rWt         j"                  j%                  j
                        r.t         j"                  j'                  j
                        _        j                  dkD  _         G d dt*               G d dt*               G d dt*              
 fd}fd
 fd}t-         j                  j                  d       j.                        D ]  }	  |         |       c S  y
# $ r}	|	j0                  |_        Y d }	~	1d }	~	w
$ r d |_        |xj4                  dz  c_        Y W$ r Y  y           xY w)Nurlrequest_dataimpersonatec                   T    e Zd Zej                  Zej                  Zej                  Z	y)-HttpFD.real_download.<locals>.DownloadContextN)
__name__
__module____qualname__dictget__getattr____setitem____setattr____delitem____delattr__     Q/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/downloader/http.pyDownloadContextr       s!    ((K**K**Kr$   r&   zAccept-Encodingidentityhttp_headerstestFhttp_chunk_sizedownloader_optionsr   wb
buffersizei   Range
continuedlTc                       e Zd Zy)-HttpFD.real_download.<locals>.SucceedDownloadNr   r   r   r#   r$   r%   SucceedDownloadr1   B       r$   r3   c                       e Zd Zd Zy)+HttpFD.real_download.<locals>.RetryDownloadc                     || _         y N)source_error)selfr9   s     r%   __init__z4HttpFD.real_download.<locals>.RetryDownload.__init__F   s
    $0!r$   N)r   r   r   r;   r#   r$   r%   RetryDownloadr6   E   s    1r$   r<   c                       e Zd Zy)*HttpFD.real_download.<locals>.NextFragmentNr2   r#   r$   r%   NextFragmentr>   I   r4   r$   r?   c            	      ,  	
 s$r"t        j                  t        dz              n_        j                  dkD  rBj                  

z  
j
                  rj                  j                         d_        n
nj                  dkD  rd
nd 
d_        j                  r#
j                  z   dz
  } | nt        |       	n	nd 	t        	
fd      r&d_        d_         t        d
 d		 d
            t        	fd      rj                  dz
  	t              }
d u}|r+dt        
       dt        	      xs d |j                  d<   	 j                  j!                  |      _        |rj"                  j                  j%                  d      }t'        |      \  }}}
|k(  rBj                  r
|	k(  s|	k  r,|_        |sr t        |xs xs |      xs dz
  _        y 
dkD  rj+                          d_        d_        t        j"                  j                  j%                  dd             x_        _        y # t,        $ r}|j.                  dk(  rH	 j                  j!                  t                    _        j"                  j                  d   }|j                  dz
  t        |      cxk  rj                  dz   k  r{n nxj1                  j2                         j5                  j6                  j2                         j9                  j2                  dj                  j                  d       j+                          d_        d_        Y d }~y # t,        $ r)}|j.                  dk  s|j.                  dk\  r Y d }~n'd }~ww xY w|j.                  dk  s|j.                  dk\  r        d }~wt:        $ r  t<        $ r} |      d }~ww xY w)Ngffffff?r   abFr   c                       kD  S r8   r#   )	range_endrange_starts   r%   <lambda>zDHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>i   s    i 7 r$   r,   zConflicting range. (start=z > end=)c                  "     j                   k\  S r8   )content_len)ctxrC   s   r%   rE   zDHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>n   s    	S__ < r$   )
extensionszbytes=- r.   zContent-RangeContent-lengthi  zContent-Lengthd   finished)filenamestatusdownloaded_bytestotal_bytesi  iX  )randomrandintint
chunk_size
resume_len	is_resumereport_resuming_byte	open_modeminr   	ExceptionrH   r   r   headersydlurlopendatar   r   data_lenreport_unable_to_resumer   rQ   report_file_already_downloadedrP   
try_renametmpfilename_hook_progressr   r	   )chunk_aware_endrequest	has_rangecontent_rangecontent_range_startcontent_range_endrH   errcontent_lengthrC   rD   r<   r3   rW   rI   r^   	info_dictis_testreq_end	req_startr   request_extensionsr:   r   s            @@r%   establish_connectionz2HttpFD.real_download.<locals>.establish_connectionL   s   %, %nnSd1B-CZPAK N~~!!nn(9,K==--cnn= $&'!#"!CM~~"-">"B/6OCY`Da	$#	 	78!" $#I0J;-W^_h^iij.k$lmm<=OOa/	c<EWXG#4/I-3C4D3EQ{S\G]GcacFd+e(J)88++G4 $'HH$4$4$8$8$IMJZ[hJiG'):K"&99 #  1I=*Y6*5&'+.{/EgwG]R]+^bkbpop+qCL %q446%&CN$(CM1<SXX=M=M=Q=QRbdh=i1jjs ()::$!##'88#3#3#Cw?$A),)9)9:J)K +6%(^^c%9C<O%fRUR`R`cfRf%f !??M OOCOOS\\J //,/LL*447NN/2~~	1
  )* #21 !88:-.CN,0CM"9 % "::+szzS/@! 0A": ZZ#%s):#C(() ! )#C(()sX   ,BI( 	AI( (
P2O1ANC	O1	OO=O1O*O11PPPc                       j                   1 j                  dk7  r j                   j                          d  _         y y )NrK   )streamrf   close)rI   s   r%   close_streamz*HttpFD.real_download.<locals>.close_stream   s5    zz%??c)JJ$$&!
 &r$   c                  (   j                   j                  j                  d      } j                   j                  j                  d      rd } r&| t        |       j                  kD  rj                  } | t        |       j
                  z   } j                  j                  d      }j                  j                  d      }|| |k  rj                  d|  d| d       y|| |kD  rj                  d	|  d
| d       ydj
                  z   j                  }t        j                         }d }|}fd}	 	 j                   j                  s|nt        || z
              }t              z  t        |      dk(  rn~j                  }	 j                  j                   j"                        \  _        _        j                  J j%                  j                         _        j)                  j&                         	 j                  j/                  |       j3                  ||j
                  z
         t        j                         }|}
j                  j                  dd      sj5                  |
|z
  t        |            }|
}j7                  ||j
                  z
        }j8                  d }nJj;                  |t        j                         j8                  j
                  z
  j
                  z
        }j=                  dj8                  j                   j&                  |||j>                  z
  j                  d      d	       | | k(  rn|r|j                  j                  d      xs dk  raj@                  |_         nV|j@                  z
  dkD  rDj                  )j                   dk7  rj                  jC                          tD        |rd _         ɉj                  #j1                  d       j-                  d       ys0jF                  r$jH                  jH                  k  r	_        j                   dk7  rj                  jC                          | "| k7  rtK        t        |             }	 ||	       jM                  j                   j&                         j                  j                  d      rCjO                  j&                  j                   j                  j                  dd             d<   j=                  j&                  dt        j                         j>                  z
  j                  d      d       y# t        $ r}	 ||	       Y d }	~	7d }	~	ww xY w# t*        $ r}	j-                  d|	        Y d }	~	yd }	~	ww xY w# t*        $ r/}	j1                  d       j-                  d|	        Y d }	~	yd }	~	ww xY w)NrM   zContent-encodingmin_filesizemax_filesizez/[download] File is smaller than min-filesize (z	 bytes < z bytes). Aborting.Fz.[download] File is larger than max-filesize (z	 bytes > r   c                              j                   dk(  r_        n/	 t        j                  j	                  j                         _         |       # t
        $ r
 d_        Y w xY w)NrK   r   )rf   rX   ospathgetsizeFileNotFoundError)er<   byte_counterry   rI   s    r%   retryz5HttpFD.real_download.<locals>.download.<locals>.retry   s]    ??c)%1CN+)+)I $A&& - +)*+s   .A A*)A*Tzunable to open for writing: 
zunable to write data: noresizebufferdownloadingctx_id)	rQ   rR   rS   rf   rP   etaspeedelapsedr   throttledratelimit   rK   zDid not get any data blocks
updatetimezlast-modifiedfiletimerO   )rR   rS   rP   rQ   r   r   )(ra   r^   r   rV   _TEST_FILE_SIZErX   params	to_screen
block_sizetimereadr\   r	   lenrw   sanitize_openrf   r[   undo_temp_namerP   report_destinationOSErrorreport_errorwrite	to_stderr	slow_downbest_block_size
calc_speedrb   calc_etarg   
start_timethrottle_startrx   r   rW   rH   r
   re   	try_utime)rb   min_data_lenmax_data_lenr   startnowbeforer   
data_blockrn   afterr   r   r   r?   r<   ry   rI   rp   rq   r:   s                @r%   downloadz&HttpFD.real_download.<locals>.download   so   xx''++,<=Hxx##$67   H,H@T@T0T//#x=3>>9#{{~>#{{~>+<0GNNJ8*T]^j]kk}~@ +<0GNNI(S\]i\jj|} s~~-LJIIKE CF	' !$zcR\^fiu^uNv!wJ J/ z?a' ::%%6:6H6HOOS]]7<3
CO"zz555'+':':3??'K//=
!JJ$$Z0 uc<#..+HI iik {{'7?!%!5!5efnc*o!VJ sL3>>4QR<<'C--tyy{CLL3>><Y[gjmjxjx[xyC##+(4#&<<#&?? #""S^^3'mmH5
% 
 'LH,DUdkkoo6J&K&PqQ ))1-0*s111A5::1coo6LJJ,,.//)-C&[ ^ zz!t$!!"?@s~~#//2MR^adapapRp!-""#%

  "#(@*<XGc
OOCOOS\\: {{|,(,s||SXXEUEUEYEYZikoEp(q	*%$0+LL$99;7#--1!  U & #JJ" # %)),H*NO$%  !NN4(%%(>se&DE !sI   ,V A<V/ W 	V,V''V,/	W8WW	X"%XXretriesr   )r   _get_impersonate_targetr   rP   	temp_namerf   rw   r   r   r   r[   rX   r   r   r   r   r~   r   isfiler   rY   r]   r   report_retryr9   errorattempt)r:   rP   rp   impersonate_targetr&   _ru   r   r   rn   r?   r<   r3   rW   ry   rI   r^   rq   rr   rs   r   rt   r   s   ` `       @@@@@@@@@@@@@r%   real_downloadzHttpFD.real_download   ss    }}^T:!99)D)0B}-	+d 	+
 ..2
 !"3Z!@)--P^B_`++//&%0-4T))KKOO-. }}126::;LM 	
 t< !1W1E F	7A;;??<.ww~~coo.!#!A*	i 		1I 	1	9 	t	) t	) t	)l	"^	 ^	@ "$++//)"<d>O>OP 	E$&z!	   ! !.. """ s$   2JK	J$KK	KN)r   r   r   r   r#   r$   r%   r   r      s    `r$   r   )r~   rT   r   commonr   
networkingr   networking.exceptionsr   r   r	   utilsr
   r   r   r   r   r   utils.networkingr   r   r#   r$   r%   <module>r      s;    	   "   
  .a^ ar$   