
    iS                     V   S r SSKrSSKrSSKJrJrJr  SSKJr  SSK	J
r
JrJrJr  SSKJr  \R                   r " S	 S
\5      r0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S!_S#S!_S$S!_S%S&_0 S'S&_S(S&_S)S*_S+S,_S-S._S/S0_S1S0_S2S3_S4S5_S6S5_S7S*_S8S,_S9S:_S;S<_S=S<_S>S?_S@S?_ESASBSBSBSCSCSCSDSESESFSGS,SHSISJ.ErSK r0 SSL _SSM _SSN _SSO _SSP _SSQ _SSR _SSS _S!ST _SUSV _S&SW _S.SX _S0SY _S3SZ _S*S[ _S,S\ _S5S] _S^ S_ S` Sa Sb Sc Sd Se Sf \\Sg Sh Si Sj Sk.Er\rg)lz/Downloader module for http:// and https:// URLs    N)RequestExceptionConnectionErrorTimeout   )DownloaderBase   )textutiloutput	exception)SSLErrorc                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)HttpDownloader   httpc                    [         R                  " X5        UR                  nSU l        U R	                  SS5      U l        U R	                  SS5      U l        UR	                  S5      U l        U R	                  SS5      U l        U R	                  S	S5      U l	        U R	                  S
S5      U l
        U R	                  S5      U l        U R	                  S5      U l        U R	                  S5      U l        U R	                  SUR                  5      U l        U R	                  SUR                   5      U l        U R	                  SUR$                  5      U l        U R	                  SUR(                  5      U l        U R	                  SS5      U l        U R	                  S5      U l        U R	                  S5      nU R	                  SS5      (       a  U R0                  U l        OS U l        U R                  S:  a  [5        S5      U l        U R                  (       aS  [6        R8                  " U R                  5      nU(       d&  U R:                  R=                  SU R                  5        X@l        U R                  (       aS  [6        R8                  " U R                  5      nU(       d&  U R:                  R=                  SU R                  5        XPl        [?        U R                  [@        5      (       aU  [6        R8                  " U R                  5      nU(       d(  U R:                  R=                  SU R                  5        SnX`l        U R.                  (       a  [B        RD                  " U R.                  S[6        R8                  5      n[G        US5      (       a  URH                  S   OU" 5       =n(       a-  XR                  :  a  Xl        Xpl        U RJ                  U l&        O-U R:                  R=                  SU R.                  5        SU l        U R                  b(  U RJ                  U l&        U R                  S:  a  SU l        Uc  URN                  U l(        g [B        RR                  " U5      U l(        g ) NFzadjust-extensionsTz
chunk-sizei   zhttp-metadataprogressg      @validatezvalidate-htmlheaderszfilesize-minzfilesize-maxretrieszretry-codestimeoutverifymtimeratez	sleep-429zconsume-contentc                 "    U R                  5       $ )N)close)resps    G/app/mltbenv/lib/python3.13/site-packages/gallery_dl/downloader/http.py<lambda>)HttpDownloader.__init__.<locals>.<lambda>3   s
    TZZ\    r   infzInvalid minimum file size (%r)zInvalid maximum file size (%r)zInvalid chunk size (%r)argsr   zInvalid rate limit (%r)g        )*r   __init__	extractordownloadingconfigadjust_extension
chunk_sizemetadatar   r   validate_htmlr   minsizemaxsize_retriesr   _retry_codesretry_codes_timeoutr   _verifyr   r   r   _release_conn_implrelease_connfloatr	   parse_byteslogwarning
isinstancestrr
   build_selection_funchasattrr#   _receive_ratereceive_interval_429interval_429build_duration_func)	selfjobr%   r@   r,   r-   r)   funcrmaxs	            r   r$   HttpDownloader.__init__   s8   *MM	  $,? F++lE:!((9J4J5![[$?{{9-{{>2{{>2{{9i.@.@A;;}i6L6LM{{9i.@.@Akk(I,=,=>[[$/
KK'	{{;/;;(%00 $ 7 7D
 !:D<<! <DL<<&&t||4G  4dllD"L<<&&t||4G  4dllD"Ldoos++))$//:J  -t@"
(O99,,TYY4;K;KLD'.tV'<'<tyy|$&HtH//)&*O 	#11  !:DIIF!	==$--DL}}s" # ) 7 7D $ 8 8 FDr!   c                     U R                  X5      U R                  (       a3  U R                  (       d!  [        R                  " UR
                  5        $ $ $ ! [         aH  nU R                  (       a  [        R                  " S5        U R                  R                  U5        e S nAff = f! U R                  (       a3  U R                  (       d!  [        R                  " UR
                  5        f f f = f)N
)_download_implr&   partr
   remove_filetemppath	Exceptionr   stderr_writer7   	traceback)rB   urlpathfmtexcs       r   downloadHttpDownloader.download^   s    
	3&&s4 		  !1!12 )2  	##D)HHs#		 		  !1!12 )2s%   A 
B)!AB$$B))B, ,AC2c                    S nS=pESnU R                   nUR                  nUR                  SS5      n	UR                  SU R                  5      n
U R                  (       a"  U(       d  UR                  U R                  5         U(       a  U(       a  U R                  U5        S nU R                  R                  SXdU R                  S-   5        X@R                  :  a  g	US
:X  a?  U R                  (       a.  U R                  5       n[        R                  " X:  a  UOU5        O[        R                  " U5        SnUS-  nS nSS0nUR                  S5      =n(       a  UR                  U5        U R                  (       a  UR                  U R                  5        UR!                  5       =n(       a	  SU S3US'    U R"                  R%                  UR                  SS5      USUUR                  S5      U R&                  U R(                  U R*                  S9nUR@                  nUS:X  d  XY;   a  SnUR                  R                  S5      nGOUS:X  a$  UnUR                  S   RC                  S5      S   nOUS:X  a  U(       a  U RE                  U5        GOSU S UR0                   S!U S3n[F        RH                  " U5      nUb  U R                  R                  U5        XPRJ                  ;   d  S"Us=::  a  S#:  a  O  OGM  UR                  S$5      nU(       a  U" U5      (       a  GM  U R                  U5        U R                  R                  U5        g	U RL                  (       ap  UR                  S%5      =nb\   U" U5      n[O        U[6        5      (       a
  UnUS-  nGM%  U(       d-  U R                  U5        U R                  R                  S&5        g	U RP                  (       a  UR                  R                  S'S5      RS                  S(5      (       ad  URT                  S);  aT  URV                  (       a'  U R                  R                  S*URX                  5        g	U R                  R                  S+5        g	[Z        R\                  " US 5      nUb  U(       d-  U R                  U5        U R                  R                  S,5        g	U R^                  (       aP  UU R^                  :  a@  U R                  U5        U R                  R                  S-UU R^                  5        SUl0        gU Rb                  (       aP  UU Rb                  :  a@  U R                  U5        U R                  R                  S.UU Rb                  5        SUl0        gS	nURT                  (       d"  URe                  U Rg                  U5      5        SnU(       a  [F        Rh                  " U5      X'   SnU(       ar  URk                  5         URm                  5       (       a  SUl0        URo                  5         gU R                  (       a"  U(       a  UR                  U R                  5        S	nURq                  U Rr                  5      nUR                  S/5      nU
=(       a    URT                  [t        ;   nU(       d  U(       d  U(       a   [w        URx                  Rz                  (       a  UOURq                  S05      S15      nU(       aC  U" U5      nUSLa6  U R                  U5        U R                  R                  U=(       d    S25        g	U(       aC  U R                  X,5      (       a-  URm                  5       (       a  SUl0        URo                  5         gU(       d%  S3n U(       a  U R                  R                  S45        OS5n U R                  R                  S6U5        SU lB        UR                  U 5       n!U!c   S S S 5        GOGU(       a   U!R                  U5        U[        U5      -  nOTU(       aM  U
(       a5  URT                  [t        ;   a!  U R                  UU!R                  S05      5        U!R                  U5        U R                  R                  UR                  5         U R                  U!UUU5        U(       a  U!R                  5       =n"U:  al  UR                  S85      =n#(       a  U#SL d  U#U":X  a  US-  nS9n[        R                  " S:5        OS;U" S<U S=3n[        R                  " S75         S S S 5        GM  S S S 5         S	U lB        U R                  (       a/  S>U;   a	  US>   US?'   gUR                  R                  S@5      US?'    gS US?'   g! [,         a  n UR.                  S   R0                  nUR2                  R4                  n[7        UR.                  S   5      R9                  S5      u  nnnU SU=(       d    UR;                  5        3nO! [<         a    [7        U5      n Of = f S nAG	M  S nAf[>         a  n[7        U5      n S nAG	M  S nAf[<         a%  nU R                  R                  U5         S nAg	S nAff = f! [<         a    U R                  U5        e f = f! [|        [~        4 a  n[7        U5      n S nAG
MH  S nAff = f! [|        [~        4 a5  n[7        U5      n[        R                  " S75         S nAS S S 5        G
M  S nAf[        R                   a    URo                  5          S S S 5        g	[        R                   a    URo                  5         e f = f! , (       d  f       GN:= f)ANr    _http_expected_status _http_adjust_extensionTz
%s (%s/%s)r   Fi  Acceptz*/*_http_headerszbytes=-Range_http_methodGET
_http_data)streamr   datar   proxiesr   :z:    zContent-Length   zContent-Range/r   i  ' z' for 'i  iX  _http_retry_http_validatezInvalid responsezcontent-type	text/html)htmlhtmzHTTP redirect to '%s'zHTML responsez
Empty filez0File size smaller than allowed minimum (%s < %s)z/File size larger than allowed maximum (%s > %s)_http_signature   r!   zInvalid file signature byteszw+bz!Unable to resume partial downloadzr+bzResuming download at byte %drH   _http_segmentedzResuming segmented downloadzfile size mismatch (z < )_http_lastmodified_mtime_httpzLast-Modified)Tr*   kwdictgetr(   rJ   part_enablepartdirr4   r7   r8   r   r@   timesleepupdater   	part_sizesessionrequestr   rc   r   r   r#   reason	__class____name__r:   	partitionlstriprM   r   status_code
rpartitionr3   r
   detect_challenger0   r   r9   r+   
startswith	extensionhistoryrP   r	   	parse_intr,   rL   r-   set_extension_find_extensionextract_headers
build_pathexistsr   iter_contentr)   SIGNATURE_CHECKSnextrawchunkedr   r   _adjust_extensiondebugr&   openwritelenreadseekoutstartpathr>   r   rN   r   StopExtractionControlExceptiontellstdout_writer   )$rB   rP   rQ   responsetriescodemsgr*   rw   expected_statusr(   sfile_headerr   extra	file_sizerR   r   clspre_erroffsetsize	challengeretryr   resultr   contentvalidate_sigvalidate_extmodefpfsize	segmenteds$                                       r   rI   HttpDownloader._download_implk   s	   == **#R)!::$d&;&;= 99X-%%h/#H  s4<<>J<<' 3;4#4#4))+AJJAIq59JJu%QJEK  'G

?33u3u%||t||,#--//y/%+I;a#8 <<//JJ~u5s#L1 LL LL;; 0 4 ''Ds{d5''++,<="''8CCCHK''1$q 1Q? 11(;	(HH$$Y/+++sd/@S/@

=1U8__!!(+  % }}!',<!==XJ%h/F fc** CQJE%%h/HH$$%78 !!h&6&6&:&:"B'((2
;(?'@%%_<##HH$$%<hllK  HH$$_5 >>$-D%%h/HH$$\2 <<D4<<$7%%h/HH$$Jdll, (*G$<<D4<<$7%%h/HH$$Idll, (*G$J $$%%d&:&:8&DE!
 #'#7#7#A !
 ""$>>##')G$ NN$99''5 ++DOO<G!::&78L, B#--1AA  ||"&#+<<#7#7%2226#=K  )+6FT)))(3(("D&DF$D$:$:%. %.29..2B2B')G$NN$ HHNN#FG=vF  $Dd#r: $# HH[)c+..F'#--1AA..wDGGFOw||,LLWdF; bggi/U47%+ZZ0A%BB	B%-e1C
;++D1 4UG3tfAF++D1K $##N  ::#v-(./C(D}% 	 )1(8(8(<(<_(M}%  %)F=!c # # XXa[//F **33C"%fkk"o"6"@"@"EKCC ESZC$7$7$9#:;C  #c(C# #h   %H ! %%h/h )(3 c(CV )(3 c(C''-' $#( !// !NN$ - $#. !11 NN$/ $#s   ;Af ?j <8j' *m*9B m*k.A>m*
jA8hh3h)&h3(h))h33j iji??jj$'k7k		km'!!lm*'m'8m*%m''m**
m9c                 2    UR                  U R                  5       H  nM     g! [        [        4 aa  n[        R
                  " S5        U R                  R                  SUR                  R                  U5        UR                  5          SnAgSnAff = f)z:Release connection back to pool by consuming response bodyrH   zGUnable to consume response body (%s: %s); closing the connection anywayN)r   r)   r   r   r   rN   r7   r   r   r   r   )rB   r   r   rR   s       r   r3   !HttpDownloader._release_conn_implx  sz    	**4??; < (+ 	%HHNN0141G1GN NN	s   "% BABBc                     UR                   nU H3  nU" U5        [        R                  c  M  [        R                  S5        M5     g )NDOWNLOAD)r   FLAGSr   process)rB   r   r   bytes_totalbytes_startr   rb   s          r   r>   HttpDownloader.receive  s2    D$K~~)j)	 r!   c           	         U R                   (       a  U R                  5       OS nUR                  nU R                  nSn[        R                  " 5       n	U H  n
[        R                  " 5       U	-
  nU[        U
5      -  nU" U
5        [        R                  b  [        R                  S5        Ub/  X:  a*  U R                  R                  UXH-   [        X-  5      5        Uc  M  X-  nX:  d  M  [        R                  " X-
  5        M     g )Nr   r   )r   r   r   r{   	monotonicr   r   r   r   r   intr|   )rB   r   r   r   r   r   r   r   bytes_downloaded
time_startrb   time_elapsedtime_expecteds                r   r=   HttpDownloader._receive_rate  s    "iityy{T==^^%
D>>+j8LD	)$K~~)j)#*HH%%##6,;<  0 7 /JJ};<) r!   c                 6   UR                   R                  SS5      nUR                  S5      S   R                  5       nSU;  a  SU-   nU[        ;   a	  [        U   $ [
        R                  " USS9=n(       a  US	S
 $ U R                  R                  SU5        g)z%Get filename extension from MIME typezContent-Type
image/jpeg;r   rh   zimage/F)strictr   NzUnknown MIME type '%s'bin)	r   rx   r   lower
MIME_TYPES	mimetypesguess_extensionr7   r8   )rB   r   mtypeexts       r   r   HttpDownloader._find_extension  s      $$^\B$Q'--/eu$EJe$$++E%@@3@qr7N159r!   c                 (   [         UR                     " U5      (       dt  [         R                  5        H\  u  p4U" U5      (       d  M  U R                  R	                  SUR
                  U5        UR                  U5        UR                  5           g   g)z,Check filename extension against file headerz,Adjusting filename extension of '%s' to '%s'TF)r   r   itemsr7   r   filenamer   r   )rB   rQ   r   r   checks        r   r    HttpDownloader._adjust_extension  sz     1 12;??.446
%%HHNNF((#/ ))#.&&( 7 r!   )r(   r)   r&   r   r@   r-   r*   r,   r   r   r   r>   r4   r   r0   r   r   r+   r   N)r   
__module____qualname____firstlineno__schemer$   rS   rI   r3   r>   r=   r   r   __static_attributes__rX   r!   r   r   r      s4    FEGN3KZ
*=<"r!   r   r   jpgz	image/jpgz	image/pngpngz	image/gifgifz	image/bmpbmpzimage/x-bmpzimage/x-ms-bmpz
image/webpwebpz
image/avifavifz
image/heicheicz
image/heifheifzimage/svg+xmlsvgz	image/icoicoz
image/iconzimage/x-iconzimage/vnd.microsoft.iconzimage/x-photoshoppsdzapplication/x-photoshopzimage/vnd.adobe.photoshopz
video/webmwebmz	video/oggoggz	video/mp4mp4z	video/m4vm4vzvideo/x-m4vzvideo/quicktimemovz	audio/wavwavzaudio/x-wavz
audio/webmz	audio/oggz
audio/mpegmp3z	audio/aacaaczaudio/x-aaczapplication/vnd.apple.mpegurlm3u8zapplication/x-mpegurlmpdziprar7zpdfswfrn   objr   )zapplication/dash+xmlzapplication/zipzapplication/x-zipzapplication/x-zip-compressedzapplication/rarzapplication/x-rarzapplication/x-rar-compressedzapplication/x-7z-compressedzapplication/pdfzapplication/x-pdfzapplication/x-shockwave-flashrm   zapplication/oggz	model/objzapplication/octet-streamc                 x    U S S R                  5       n U =(       a    SR                  U R                  5       5      $ )N   s   <!doctype html)r   r   r   r   s    r   _signature_htmlr    s0    	#2A8"--aggi88r!   c                     U SS S:H  $ )Nr      s   rX   r  s    r   r   r         a!f/r!   c                     U SS S:H  $ )Nr      s   PNG

rX   r  s    r   r   r     s    a!f 44r!   c                     U SS S;   $ )Nr      )s   GIF87as   GIF89arX   r  s    r   r   r     s    a!f 66r!   c                     U SS S:H  $ )Nr   r   s   BMrX   r  s    r   r   r     s    a!for!   c                 0    U SS S:H  =(       a    U SS S:H  $ )Nr         RIFFr	     s   WEBPrX   r  s    r   r   r     '    q1v( *2w')*r!   c                 0    U SS S:H  =(       a    U S   S;   $ )Nr     s   ftypavis   fsrX   r  s    r   r   r     s    a"g+>">r!   c                 0    U SS S:H  =(       a    U SS S;   $ )Nr  
   s   ftypher  )s   ics   ims   iss   ixs   vcs   vms   vsrX   r  s    r   r   r     s/    q2w)+ H"R =H 1H Hr!   c                     U SS S:H  $ )Nr      s   <?xmlrX   r  s    r   r   r         a!f(r!   c                     U SS S:H  $ )Nr   r  s      rX   r  s    r   r   r         a!f 33r!   curc                     U SS S:H  $ )Nr   r  s      rX   r  s    r   r   r     r  r!   c                     U SS S:H  $ )Nr   r  s   8BPSrX   r  s    r   r   r         a!f'r!   c                 0    U SS S:H  =(       a    U SS S;   $ )Nr  r	  s   ftypr  )s   mp4s   avcs   isorX   r  s    r   r   r     s+    q1v( /QqW 9/ ./ /r!   c                     U SS S:H  $ )Nr  r  s   ftypM4VrX   r  s    r   r   r     s    a"g+r!   c                     U SS S:H  $ )Nr  r  s   ftypqt  rX   r  s    r   r   r     s    a"g,r!   c                     U SS S:H  $ )Nr   r  s   EߣrX   r  s    r   r   r     r  r!   c                     U SS S:H  $ )Nr   r  s   OggSrX   r  s    r   r   r     r  r!   c                 0    U SS S:H  =(       a    U SS S:H  $ )Nr   r  r  r	  r  s   WAVErX   r  s    r   r   r      r  r!   c                 0    U SS S:H  =(       d    U SS S;   $ )Nr   r  s   ID3r   )s   s   s   rX   r  s    r   r   r   "  s*    q1v' I1v!HHIr!   c                     U SS S;   $ )Nr   r   )s   s   rX   r  s    r   r   r   $  s    a!f ::r!   c                     U SS S:H  $ )Nr      s   #EXTM3UrX   r  s    r   r   r   %  s    a!f
*r!   c                     SU ;   $ )Ns   <MPDrX   r  s    r   r   r   &  s    glr!   c                     U SS S;   $ )Nr   r  )s   PKs   PKs   PKrX   r  s    r   r   r   '  s    a!f MMr!   c                     U SS S:H  $ )Nr   r  s   Rar!rX   r  s    r   r   r   (  r  r!   c                     U SS S:H  $ )Nr   r  s   7z'rX   r  s    r   r   r   )  s    a!f ;;r!   c                     U SS S:H  $ )Nr   r  s   %PDF-rX   r  s    r   r   r   *  r  r!   c                     U SS S;   $ )Nr   r  )s   CWSs   FWSrX   r  s    r   r   r   +  s    a!f 00r!   c                     U SS S:H  $ )Nr   r(  s   BLENDERrX   r  s    r   r   r   .  s    q1v+r!   c                     U SS S:H  $ )Nr   r  s   # Blender vrX   r  s    r   r   r   1  s    a"g/r!   c                     U SS S:H  $ )Nr   r	  s   CSFCHUNKrX   r  s    r   r   r   4  s    a!f+r!   c                     g)NFrX   r  s    r   r   r   6  s    er!   )r   r   r   r   r   r   r   r   r   rn   ro   blendr   clipr   )__doc__r{   r   requests.exceptionsr   r   r   commonr   rV   r	   r
   r   r   sslr   r   r   r   r  r   __downloader__rX   r!   r   <module>r:     sG   6   J J " , , 

r^ rj:e:e: e: e	:
 e: e: e: f: f: f: f: e: e: e: e:  !:" #:$ %:&  ':* &+:, %-:. %/:0 %1:2 53:4 u5:8 59:: 5;:< 6=:> 5?:@ 5A:B 5C:D 5E:H $VI:J VK:L &+$)$)$(%* %s:
z9+	/+	4+ 
6+ 
%	+
  ++ >+  I+ 
(+ 
3+ 
3+ 
'+ 
 0+  
+!+" 
,#+$ 3%+& 
''+( 
 +)+,J:*"M/;(0+ 0 ,U+ Z  r!   