
    yfA                         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mZ ddlmZ  G d	 d
e      Zy)    N   )FileDownloader   )Request)CertificateVerifyError	HTTPErrorTransportError)
ContentTooShortErrorRetryManagerThrottledDownloadXAttrMetadataErrorXAttrUnavailableErrorencodeFilenameint_or_noneparse_http_rangetry_callwrite_xattr)HTTPHeaderDictc                       e Zd Zd Zy)HttpFDc                    	
 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      rit        j                   j#                  t%        j                              r7t        j                   j'                  t%        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_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__     8/usr/lib/python3/dist-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(   SucceedDownloadr4   C       r'   r6   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__G   s
    $0!r'   N)r   r   r   r>   r&   r'   r(   RetryDownloadr9   F   s    1r'   r?   c                       e Zd Zy)*HttpFD.real_download.<locals>.NextFragmentNr5   r&   r'   r(   NextFragmentrA   J   r7   r'   rB   c            	      2  	
 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(  rM	 j                  j!                  t                    _        j"                  j                  d   }|j                  dz
  t        |      cxk  rj                  dz   k  rn n}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>j   s    i 7 r'   r/   zConflicting range. (start=z > end=)c                  "     j                   k\  S r;   )content_len)ctxrF   s   r(   rH   zDHttpFD.real_download.<locals>.establish_connection.<locals>.<lambda>o   s    	S__ < r'   zbytes=- r1   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   	ExceptionrK   r   r   headersydlurlopendatar    r   data_lenreport_unable_to_resumer   rS   report_file_already_downloadedrR   
try_renametmpfilename_hook_progressr   r	   )chunk_aware_endrequest	has_rangecontent_rangecontent_range_startcontent_range_endrK   errcontent_lengthrF   rG   r?   r6   rY   rL   r`   	info_dictis_testreq_end	req_startr   r=   r   s            @@r(   establish_connectionz2HttpFD.real_download.<locals>.establish_connectionM   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"33 !88:-.CN,0CM"9 % "::+szzS/@! 0A": ZZ#%s):#C(() ! )#C(()sX   *BI& AI& &
P0O4ANCO4	O
!O O4O

*O44P	PPc                       j                   1 j                  dk(  s j                   j                          d  _         y y )NrM   )streamrh   close)rL   s   r(   close_streamz*HttpFD.real_download.<locals>.close_stream   s5    zz%#-JJ$$&!
 &r'   c                  n   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| /	 t1        j                   dt/        |       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  rejJ                  |_%        nZ|jJ                  z
  dkD  rHj                  )j                   dk7  rj                  jM                          tO               |rd _%        j                  #j;                  d       j-                  d       ys5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t/        |	      z         Y d }	~	yd }	~	ww xY w# t4        t6        f$ r(}	j-                  dt/        |	      z         Y d }	~	d }	~	ww xY w# t*        $ r8}	j;                  d       j-                  dt/        |	      z         Y d }	~	yd }	~	ww xY w)!NrO   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_        n8	 t        j                  j	                  t        j                               _         |       # t        $ r
 d_        Y w xY w)NrM   r   )rh   rZ   ospathgetsizer   FileNotFoundError)er?   byte_counterrz   rL   s    r(   retryz5HttpFD.real_download.<locals>.download.<locals>.retry   sb    ??c)%1CN+)+9X)Y $A&& - +)*+s   7A   A32A3Tzunable to open for writing: %sxattr_set_filesizezuser.ytdl.filesizez unable to set filesize xattr: %s
zunable to write data: %snoresizebufferdownloadingctx_id)	rS   rT   rU   rh   rR   etaspeedelapsedr   throttledratelimit   rM   zDid not get any data blocks
updatetimezlast-modifiedfiletimerQ   )rT   rU   rR   rS   r   r   )-rc   r`   r    rX   _TEST_FILE_SIZErZ   params	to_screen
block_sizetimereadr^   r	   lenrx   sanitize_openrh   r]   undo_temp_namerR   report_destinationOSErrorreport_errorstrr   encoder   r   write	to_stderr	slow_downbest_block_size
calc_speedrd   calc_etari   
start_timethrottle_startry   r   rY   rK   r
   rg   	try_utime)rd   min_data_lenmax_data_lenr   startnowbeforer   
data_blockrp   afterr   r   r   rB   r?   rz   rL   rr   rs   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\]'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,,./11)-C&g j zz!t$!!"?@s~~#//2MR^adapapRp!-"n$#%

  "#(@*<XGc
OOCOOS\\: {{|T2(,s||SXXEUEUEYEYZikoEp(q	*%$0+LL$99;7#--1!  a & #JJ" # %))*JSQTX*UV$% !67IJ ] --.PSVWZS[.[\\]
  !NN4(%%&@3s8&KL !sa   ,W' A<X 6.X9 %Y3 '	X0W>>X	X6X11X69Y0Y++Y03	Z4<.Z//Z4retriesr   )r    r   rR   	temp_namerh   rx   r   r   r   r]   rZ   r   r   r   r   r   r   isfiler   r   r[   r_   r   report_retryr<   errorattempt)r=   rR   rr   r)   _rv   r   r   rp   rB   r?   r6   rY   rz   rL   r`   rs   rt   ru   r   r   s   ` `      @@@@@@@@@@@@r(   real_downloadzHttpFD.real_download   sT    }}^T:	+d 	+
 ..2
 !"3Z!@)--P^B_`++//&%0-4T))KKOO-. }}126::;LM 	
 t< !1W1E F	7A;;??<.ww~~nS__=>!#"3??3"5 *	i 		1I 	1	9 	t	) t	)l	"d	 d	L "$++//)"<d>O>OP 	E$&z!	   ! !.. """ s$   (I::K?J$K;K	KN)r   r   r   r   r&   r'   r(   r   r      s    cr'   r   )r   rV   r   commonr   
networkingr   networking.exceptionsr   r   r	   utilsr
   r   r   r   r   r   r   r   r   r   utils.networkingr   r   r&   r'   r(   <module>r      s@    	   "   
   .d^ dr'   