
    V|h@                         S SK r S SKrS SKrSSKJr  SSKJr  SSKJrJ	r	J
r
  SSKJrJrJrJrJrJr  SSKJr   " S	 S
\5      rg)    N   )FileDownloader   )Request)CertificateVerifyError	HTTPErrorTransportError)ContentTooShortErrorRetryManagerThrottledDownloadint_or_noneparse_http_rangetry_call)HTTPHeaderDictc                       \ rS rSrS rSrg)HttpFD   c                   ^ ^^
^^^^^^^^^^^^ TS   mTR                  SS 5      m0 mT R                  T5      nUb  UTS'    " S S[        5      nU" 5       mUTl        T R	                  U5      Tl        S Tl        [        SS0TR                  S5      5      mT R                  R                  S	S
5      mT(       a  T R                  OKT R                  R                  S5      =(       d*    TR                  S0 5      R                  S5      =(       d    SmSTl
        STl        T R                  R                  SS5      Tl        [        R                  " 5       Tl        [        TR                  S5      5      u  mmnT R                  R                  SS5      (       a\  [         R"                  R%                  TR
                  5      (       a.  [         R"                  R'                  TR
                  5      Tl        TR                  S:  Tl         " S S[*        5      m " S S[*        5      m " S S[*        5      m
UUUUUUUUUUUU U4S jnU4S jmU
UUUUUU 4S jn[-        T R                  R                  S5      T R.                  5       H  n U" 5         U" 5       s  $    g
! T a  n	U	R0                  Ul         S n	A	M4  S n	A	fT
 a     S Ul        U=R4                  S-  sl         M\  T a       g  T" 5         e = f)Nurlrequest_dataimpersonatec                   \    \ rS rSr\R
                  r\R                  r\R                  r
Srg)-HttpFD.real_download.<locals>.DownloadContext     N)__name__
__module____qualname____firstlineno__dictget__getattr____setitem____setattr____delitem____delattr____static_attributes__r       P/home/james-whalen/.local/lib/python3.13/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                       \ rS rSrSrg)-HttpFD.real_download.<locals>.SucceedDownloadB   r   Nr   r   r   r   r'   r   r(   r)   SucceedDownloadr5   B       r(   r8   c                       \ rS rSrS rSrg)+HttpFD.real_download.<locals>.RetryDownloadE   c                     Xl         g Nsource_error)selfr@   s     r)   __init__4HttpFD.real_download.<locals>.RetryDownload.__init__F   s    $0!r(   r?   N)r   r   r   r   rB   r'   r   r(   r)   RetryDownloadr;   E   s    1r(   rD   c                       \ rS rSrSrg)*HttpFD.real_download.<locals>.NextFragmentI   r   Nr7   r   r(   r)   NextFragmentrF   I   r9   r(   rH   c            	        >^	^
 T(       d*  T(       a#  [         R                  " [        TS-  5      T5      OTTl        TR                  S:  aH  TR                  m
Tb  T
T-  m
TR
                  (       a  TR                  TR                  5        STl        OTb  Tm
OTR                  S:  a  Sm
OS m
STl        TR                  (       a$  T
TR                  -   S-
  n Tc  U O[        U T5      m	OTb  Tm	OS m	[        U	U
4S j5      (       a&  STl        STl        T" [        ST
 S	T	 S
35      5      e[        UU	4S j5      (       a  TR                  S-
  m	[        TTTTS9nT
S LnU(       a0  S[        T
5       S[        T	5      =(       d    S 3UR                  S'    TR                  R!                  U5      Tl        U(       a  TR"                  R                  R%                  S5      n['        U5      u  pEnT
U:X  ab  TR                  (       a  UT	:X  d  UT	:  aE  UTl        U(       d  T(       a/  [        U=(       d    TT=(       d    U5      T=(       d    S-
  Tl        g T
S:  a  TR+                  5         STl        STl        [        TR"                  R                  R%                  SS 5      5      =Tl        Tl        g ! [,         Ga  nUR.                  S:X  GaN   TR                  R!                  [        TTT5      5      Tl        TR"                  R                  S   nUb  TR                  S-
  [        U5      s=:  a  TR                  S-   :  a{  O  OxTR1                  TR2                  5        TR5                  TR6                  TR2                  5        TR9                  TR2                  STR                  TR                  S.T5        TeTR+                  5         STl        STl         S nAg ! [,         a+  nUR.                  S:  d  UR.                  S:  a  e  S nAO)S nAff = fUR.                  S:  d  UR.                  S:  a  e T" W5      eS nAf[:         a    e [<         a  nT" U5      eS nAff = f)Ngffffff?r   abFr   c                     > TT :  $ r>   r   )	range_endrange_starts   r)   <lambda>DHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>i   s
    i 7r(   r0   zConflicting range. (start=z > end=)c                  "   > TT R                   :  $ r>   )content_len)ctxrL   s   r)   rN   rO   n   s    	S__ <r(   )
extensionszbytes=- r2   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   	ExceptionrR   r   r   headersydlurlopendatar!   r   data_lenreport_unable_to_resumer   r[   report_file_already_downloadedrZ   
try_renametmpfilename_hook_progressr   r	   )chunk_aware_endrequest	has_rangecontent_rangecontent_range_startcontent_range_endrR   errcontent_lengthrL   rM   rD   r8   ra   rS   rh   	info_dictis_testreq_end	req_startr   request_extensionsrA   r   s            @@r)   establish_connection2HttpFD.real_download.<locals>.establish_connectionL   s   %, %nnSd1B-CZPAK N~~!!nn(9,K==--cnn= $&'!#"!CM~~"-">"B/6OCY`Da	$#	 	78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   CJ< AJ< <Q3QAO.CQ.
P#8!PQP##,QQ3&Q..Q3c                     > T R                   b2  T R                  S:w  a  T R                   R                  5         S T l         g g )NrU   )streamrp   close)rS   s   r)   close_stream*HttpFD.real_download.<locals>.close_stream   s5    zz%??c)JJ$$&!
 &r(   c                    >^ TR                   R                  R                  S5      n TR                   R                  R                  S5      (       a  S n T(       a(  U b  [        U 5      TR                  :  a  TR                  n U b  [        U 5      TR
                  -   n TR                  R                  S5      nTR                  R                  S5      nUb  X:  a  TR                  SU  SU S35        gUb  X:  a  TR                  S	U  S
U S35        gSTR
                  -   mTR                  n[        R                  " 5       nS nUnUUUU4S jn  TR                   R                  T(       d  UO[        X0T-
  5      5      nT[        W5      -  m[        U5      S:X  a  GOTR                  c~   TR                  TR                   TR"                  5      u  Tl        Tl        TR                  c   eTR%                  TR                   5      Tl        TR)                  TR&                  5         TR                  R/                  U5        TR3                  XETTR
                  -
  5        [        R                  " 5       nUn
TR                  R                  SS5      (       d  TR5                  X-
  [        U5      5      nU
nTR7                  XETTR
                  -
  5      nTR8                  c  S nOKTR;                  U[        R                  " 5       TR8                  TR
                  -
  TTR
                  -
  5      nTR=                  STTR8                  TR                   TR&                  UUUTR>                  -
  TR                  S5      S.	T5        U b  TU :X  a  OU(       a  UTR                  R                  S5      =(       d    S:  af  TR@                  c  UTl         O_UTR@                  -
  S:  a=  TR                  b*  TR                   S:w  a  TR                  RC                  5         [D        eOU(       a  S Tl         GM  TR                  c#  TR1                  S5        TR-                  S5        gT(       d7  TRF                  (       a&  TRH                  b  TTRH                  :  a	  TTl        TeTR                   S:w  a  TR                  RC                  5         U b#  TU :w  a  [K        T[        U 5      5      n	U" U	5        TRM                  TR                   TR&                  5        TR                  R                  S5      (       aC  TRO                  TR&                  TR                   R                  R                  SS 5      5      TS'   TR=                  TTTR&                  S[        R                  " 5       TR>                  -
  TR                  S5      S.T5        g! [         a  n	U" U	5         S n	A	GNnS n	A	ff = f! [*         a  n	TR-                  SU	 35         S n	A	gS n	A	ff = f! [*         a/  n	TR1                  S5        TR-                  SU	 35         S n	A	gS n	A	ff = f)NrW   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                    > T" 5         TR                   S:X  a  TTl        O/ [        R                  R	                  TR                   5      Tl        T" U 5      e! [
         a
    STl         Nf = f)NrU   r   )rp   rb   ospathgetsizeFileNotFoundError)erD   byte_counterr   rS   s    r)   retry5HttpFD.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)	r[   r\   r]   rp   rZ   etaspeedelapsedr   throttledratelimit   rU   zDid not get any data blocks
updatetimezlast-modifiedfiletimerY   )r\   r]   rZ   r[   r   r   )(rk   rh   r!   r`   _TEST_FILE_SIZErb   params	to_screen
block_sizetimereadrf   r	   lenr   sanitize_openrp   re   undo_temp_namerZ   report_destinationOSErrorreport_errorwrite	to_stderr	slow_downbest_block_size
calc_speedrl   calc_etarq   
start_timethrottle_startr   r   ra   rR   r
   ro   	try_utime)rl   min_data_lenmax_data_lenr   startnowbeforer   
data_blockrx   afterr   r   r   rH   rD   r   rS   rz   r{   rA   s                @r)   download&HttpFD.real_download.<locals>.download   sw   xx''++,<=Hxx##$67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\iu^uNv!wJ J/ z?a' ::%%6:6H6HOOS]]7<3
CO"zz555'+':':3??'K//=
!JJ$$Z0 u<#..+HI iik {{'7??!%!5!5enc*o!VJ L3>>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,,.// 6 )-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   0W 2A=W; 0X& 
W8%W33W8;
X#XX#&
Y0%YYretriesr   )r!   _get_impersonate_targetr    rZ   	temp_namerp   r   r   r   r   re   rb   r   r   r   r   r   r   isfiler   rc   rg   r   report_retryr@   errorattempt)rA   rZ   rz   impersonate_targetr*   _r   r   r   rx   rH   rD   r8   ra   r   rS   rh   r{   r|   r}   r   r~   r   s   ` `       @@@@@@@@@@@@@r)   real_downloadHttpFD.real_download   su    }}^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PE$&z! Q   ! !.. """ s$   J##K9)K  %K9(K90	K9r   N)r   r   r   r   r   r'   r   r(   r)   r   r      s    `r(   r   )r   r^   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(   