
    VGhgA                         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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XAttrMetadataErrorXAttrUnavailableErrorint_or_noneparse_http_rangetry_callwrite_xattr)HTTPHeaderDictc                       e Zd Zd Zy)HttpFDc                 x   	
 d   j                  d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}|j.                  |_        Y d }~1d }~w	$ r d |_        |xj2                  dz  c_        Y W$ r Y  y           xY w)Nurlrequest_datac                   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__     _/var/www/it7/html/youtubeDownloader/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'   SucceedDownloadr3   A       r&   r5   c                       e Zd Zd Zy)+HttpFD.real_download.<locals>.RetryDownloadc                     || _         y N)source_error)selfr;   s     r'   __init__z4HttpFD.real_download.<locals>.RetryDownload.__init__E   s
    $0!r&   N)r   r   r   r=   r%   r&   r'   RetryDownloadr8   D   s    1r&   r>   c                       e Zd Zy)*HttpFD.real_download.<locals>.NextFragmentNr4   r%   r&   r'   NextFragmentr@   H   r6   r&   rA   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 r:   r%   )	range_endrange_starts   r'   <lambda>zDHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>h   s    i 7 r&   r.   zConflicting range. (start=z > end=)c                  "     j                   k\  S r:   )content_len)ctxrE   s   r'   rG   zDHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>m   s    	S__ < r&   zbytes=- r0   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   	ExceptionrJ   r   r   headersydlurlopendatar   r   data_lenreport_unable_to_resumer   rR   report_file_already_downloadedrQ   
try_renametmpfilename_hook_progressr   r	   )chunk_aware_endrequest	has_rangecontent_rangecontent_range_startcontent_range_endrJ   errcontent_lengthrE   rF   r>   r5   rX   rK   r_   	info_dictis_testreq_end	req_startr   r<   r   s            @@r'   establish_connectionz2HttpFD.real_download.<locals>.establish_connectionK   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<9G#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0O/ANC	O/	OO ;O/ O*O//PPPc                       j                   1 j                  dk7  r j                   j                          d  _         y y )NrL   )streamrg   close)rK   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                  dd      r1| /	 t/        j                   dt1        |       j3                                	 j                  j9                  |       j=                  ||j
                  z
         t        j                         }|}
j                  j                  dd      sj?                  |
|z
  t        |            }|
}jA                  ||j
                  z
        }jB                  d }nJjE                  |t        j                         jB                  j
                  z
  j
                  z
        }jG                  djB                  j                   j&                  |||jH                  z
  j                  d      d	       | | k(  rn|r|j                  j                  d      xs dk  rajJ                  |_%        nV|jJ                  z
  dkD  rDj                  )j                   dk7  rj                  jM                          tN        |rd _%        j                  #j;                  d       j-                  d       ys0jP                  r$jR                  jR                  k  r	_        j                   dk7  rj                  jM                          | "| k7  rtU        t        |             }	 ||	       jW                  j                   j&                         j                  j                  dd      rCjY                  j&                  j                   j                  j                  dd             d<   jG                  j&                  dt        j                         jH                  z
  j                  d      d        y# t        $ r}	 ||	       Y d }	~	d }	~	ww xY w# t*        $ r}	j-                  d|	        Y d }	~	yd }	~	ww xY w# t4        t6        f$ r}	j-                  d|	        Y d }	~	d }	~	ww xY w# t*        $ r/}	j;                  d       j-                  d|	        Y d }	~	yd }	~	ww xY w)!NrN   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)NrL   r   )rg   rY   ospathgetsizeFileNotFoundError)er>   byte_counterry   rK   s    r'   retryz5HttpFD.real_download.<locals>.download.<locals>.retry   s]    ??c)%1CN+)+)I $A&& - +)*+s   .A A*)A*Tzunable to open for writing: xattr_set_filesizezuser.ytdl.filesizezunable to set filesize xattr: 
zunable to write data: noresizebufferdownloadingctx_id)	rR   rS   rT   rg   rQ   etaspeedelapsedr   throttledratelimit   rL   zDid not get any data blocks
updatetimezlast-modifiedfiletimerP   )rS   rT   rQ   rR   r   r   )-rb   r_   r   rW   _TEST_FILE_SIZErY   params	to_screen
block_sizetimereadr]   r	   lenrw   sanitize_openrg   r\   undo_temp_namerQ   report_destinationOSErrorreport_errorr   strencoder   r   write	to_stderr	slow_downbest_block_size
calc_speedrc   calc_etarh   
start_timethrottle_startrx   r   rX   rJ   r
   rf   	try_utime)rc   min_data_lenmax_data_lenr   startnowbeforer   
data_blockro   afterr   r   r   rA   r>   ry   rK   rq   rr   r<   s                @r'   downloadz&HttpFD.real_download.<locals>.download   s   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//=
 {{';UCH\V'9MsS[}OcOcOef!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&g j zz!t$!!"?@s~~#//2MR^adapapRp!-""#%

  "#(@*<XGc
OOCOOS\\: {{|T2(,s||SXXEUEUEYEYZikoEp(q	*%$0+LL$99;7#--1!  a & #JJ" # %)),H*NO$% !67IJ V --0Nse.TUUV
  !NN4(%%(>se&DE !sa   ,W A<W= 6.X' %Y 	W:'W55W:=	X$XX$'Y6YY	Z!%ZZretriesr   )r   r   rQ   	temp_namerg   rw   r   r   r   r\   rY   r   r   r   r   r~   r   isfiler   rZ   r^   r   report_retryr;   errorattempt)r<   rQ   rq   r(   _ru   r   r   ro   rA   r>   r5   rX   ry   rK   r_   rr   rs   rt   r   r   s   ` `      @@@@@@@@@@@@r'   real_downloadzHttpFD.real_download   sE    }}^T:	+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	)l	"d	 d	L "$++//)"<d>O>OP 	E$&z!	   ! !.. """ s$   I((J9-J$J9)J90	J9N)r   r   r   r   r%   r&   r'   r   r      s    br&   r   )r~   rU   r   commonr   
networkingr   networking.exceptionsr   r   r	   utilsr
   r   r   r   r   r   r   r   r   utils.networkingr   r   r%   r&   r'   <module>r      s@    	   "   

 
 
 .c^ cr&   