
    i3D                        S SK r S SKrS SKrS SKrS SKrSSKJrJrJr   \R                  R                  5       r \R                  R                  5       r \R                  R                  5       r0 r\ R$                  R'                  S5      (       + r\(       a,  \(       a
  S\S'   S\S	'   \(       a  S
\S'   S\S'   S\S'   S\S'   \R*                  (       a0  \=(       a    \ R$                  R'                  S5      S:H  rSrSrSrSrO
\rS rSrSrSrSrSr\R:                  rSr " S S\R@                  5      r  " S S5      r! " S  S!5      r" " S" S#5      r# " S$ S%\RH                  5      r$ " S& S'\RJ                  5      r&S( r'S) r(\\S*S4S+ jr)S, r*S- r+\," \R                  S.S5      (       a  S/ r-O\*r-\," \R                  S.S5      (       a  S0 r.O\+r.S1 r/S2 r0 " S3 S45      r1 " S5 S6\15      r2 " S7 S85      r3 " S9 S:\35      r4 " S; S<5      r5 " S= S>\65      r7SAS? jr8S\7" 5       4S@ jr9g! \ a    Sr GNf = f! \ a    Sr GNf = f! \ a    Sr GNf = f)B    N   )configutil	formatterFNO_COLOR1;32success2skipz0;37debugz1;37infoz1;33warningz1;31errorTERMANSIz# z* z...u   ✔    …z[{name}][{levelname}] {message}z%Y-%m-%d %H:%M:%Sr   r   r   r   c                   >    \ rS rSrSrSSS\R                  4S jrSrg)LoggerH   z5Custom Logger that includes extra info in log recordsNc                 b    U" XX4XVXxU
5	      nU	(       a  UR                   R                  U	5        U$ N)__dict__update)selfnamelevelfnlnomsgargsexc_infofuncextrasinfofactoryrvs                >/app/mltbenv/lib/python3.13/site-packages/gallery_dl/output.py
makeRecordLogger.makeRecordK   s0     T"3heLKKu%	     )	__name__
__module____qualname____firstlineno____doc__logging_logRecordFactoryr)   __static_attributes__r,   r+   r(   r   r   H   s    ? D"44r+   r   c                   @    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
rg)LoggerAdapterT   z.Trimmed-down version of logging.LoggingAdapter)loggerr$   c                 2    Xl         UR                  U l        g r   )r8   _logger_extrar$   )r   r8   jobs      r(   __init__LoggerAdapter.__init__X   s    &&
r+   c                     U R                   R                  [        R                  5      (       a5  U R                   R	                  [        R                  SS XR
                  S9  g g )N )r"   r$   )r8   isEnabledForr2   DEBUG_logr$   )r   excs     r(   	tracebackLoggerAdapter.traceback\   sI    ;;##GMM22KKr4#ZZ  I 3r+   c                     U R                   R                  [        R                  5      (       a<  U R                  US'   U R                   R
                  " [        R                  X40 UD6  g g Nr$   )r8   r@   r2   rA   r$   rB   r   r    r!   kwargss       r(   r   LoggerAdapter.debuga   J    ;;##GMM22"jjF7OKKW]]C@@ 3r+   c                     U R                   R                  [        R                  5      (       a<  U R                  US'   U R                   R
                  " [        R                  X40 UD6  g g rG   )r8   r@   r2   INFOr$   rB   rH   s       r(   r   LoggerAdapter.infof   sJ    ;;##GLL11"jjF7OKKW\\3?? 2r+   c                     U R                   R                  [        R                  5      (       a<  U R                  US'   U R                   R
                  " [        R                  X40 UD6  g g rG   )r8   r@   r2   WARNINGr$   rB   rH   s       r(   r   LoggerAdapter.warningk   sJ    ;;##GOO44"jjF7OKKW__cB6B 5r+   c                     U R                   R                  [        R                  5      (       a<  U R                  US'   U R                   R
                  " [        R                  X40 UD6  g g rG   )r8   r@   r2   ERRORr$   rB   rH   s       r(   r   LoggerAdapter.errorp   rK   r+   )r$   r8   N)r-   r.   r/   r0   r1   	__slots__r<   rD   r   r   r   r   r4   r,   r+   r(   r6   r6   T   s-    8#I'I
A
@
C
Ar+   r6   c                   *    \ rS rSrSrS rS rS rSrg)PathfmtProxyv   r;   c                     Xl         g r   rY   r   r;   s     r(   r<   PathfmtProxy.__init__y       r+   c                 l    [         R                  U S5      R                  nU(       a  [        X!S 5      $ S $ Nr;   )object__getattribute__pathfmtgetattrr   r   rb   s      r(   ra   PathfmtProxy.__getattribute__|   s.    ))$6>>/6wwd+@D@r+   c                     [         R                  U S5      R                  =n(       a  UR                  =(       d    UR                  $ g)Nr;   r?   )r`   ra   rb   path	directory)r   rb   s     r(   __str__PathfmtProxy.__str__   s8    --dE:BBB7B<<47#4#44r+   N)	r-   r.   r/   r0   rU   r<   ra   ri   r4   r,   r+   r(   rW   rW   v   s    IAr+   rW   c                   $    \ rS rSrSrS rS rSrg)KwdictProxy   rY   c                     Xl         g r   rY   r[   s     r(   r<   KwdictProxy.__init__   r]   r+   c                     [         R                  U S5      R                  nU(       a  UR                  R	                  U5      $ S $ r_   )r`   ra   rb   kwdictgetrd   s      r(   ra   KwdictProxy.__getattribute__   s6    ))$6>>+2w~~!!$'<<r+   N)r-   r.   r/   r0   rU   r<   ra   r4   r,   r+   r(   rl   rl      s    I=r+   rl   c                   $    \ rS rSrSrS rS rSrg)	Formatter   z=Custom formatter that supports different formats per loglevelc                 T   [        U[        5      (       aD  [         H9  nX1;   a  X   O[        n[        R
                  " U5      R                  SU;   4X'   M;     OCU[        :X  a  UR                  S4nO%[        R
                  " U5      R                  SU;   4nXXS.nXl        X l        g )Nz{asctimeFr   )	
isinstancedict
LOG_LEVELS
LOG_FORMATr   parse
format_mapformatsdatefmt)r   fmtr   keyvalues        r(   r<   Formatter.__init__   s    c4  !$'JJ%OOE2==&%/1 "
 j ~~u- s+66
c8IJKCr+   c                    UR                  5       Ul        U R                  UR                     u  p#U(       a   U R	                  XR
                  5      Ul        U" UR                  5      nUR                  (       a1  UR                  (       d   U R                  UR                  5      Ul	        UR                  (       a  U SUR                   3nUR                  (       a  U SUR                   3nU$ N
)
getMessagemessager~   	levelname
formatTimer   asctimer   r"   exc_textformatException
stack_info)r   recordr   r   r    s        r(   formatFormatter.format   s    **,||F$4$45!__V\\BFN&//"??6??"226??CFO??EFOO,-CEF--./C
r+   )r   r~   N)r-   r.   r/   r0   r1   r<   r   r4   r,   r+   r(   ru   ru      s    G r+   ru   c                   0    \ rS rSrSS jrS rS rS rSrg)	FileHandler   c                    Xl         X l        S U l        X0l        U(       a8  [        R
                  R                  U 5        S U l        U R                  U l	        g [        R                  R                  X R                  5       5        g r   )rg   modeerrorsencodingr2   Handlerr<   streamemit_delayedemitStreamHandler_open)r   rg   r   r   delays        r(   r<   FileHandler.__init__   s[    		 OO$$T*DK))DI!!**4>r+   c                 x   U R                       U R                  (       a2   U R                  5         U R                  R                  5         S U l        [        R
                  R                  U 5         S S S 5        g ! S U l        f = f! [        R
                  R                  U 5        f = f! , (       d  f       g = fr   )lockr   flushcloser2   r   r   s    r(   r   FileHandler.close   s}    YY2;;+

))+&*%%++D1 Y '+%%++D1 Ys9   B+B*A;BB+;	BB!B((B++
B9c                 n    [        U R                  U R                  U R                  U R                  S9$ ! [
         at    [        R                  " [        R                  R                  U R                  5      5        [        U R                  U R                  U R                  U R                  S9s $ f = f)N)r   r   )	openrg   r   r   r   FileNotFoundErrorosmakedirsdirnamer   s    r(   r   FileHandler._open   s    	D		499!%t{{D D  	DKK		23		499!%t{{D D	Ds   36 A;B43B4c                     U R                   S:w  d  U R                  (       d  U R                  5       U l        [        R
                  R                  R                  U 5      U l        U R                  U5        g )Nw)r   _closedr   r   r2   r   r   __get__)r   r   s     r(   r   FileHandler.emit_delayed   sK    994<<**,DK))..66t<			&r+   )r   r   r   r   rg   r   N)T)	r-   r.   r/   r0   r<   r   r   r   r4   r,   r+   r(   r   r      s    ?
2Dr+   r   c                 .   S H=  n[         R                  " U5      n[         R                  " XR                  5       5        M?     [         R                  R
                  R                  [        5        [        [        [        5      n[         R                  " 5       nUR                  U5        UR                  U 5        [         R                  " 5       nUR                  [         R                  5        UR                  U5        [         R                  " S5      $ )zESetup basic logging functionality before configfiles have been loaded)
         (   2   
gallery-dl)r2   getLevelNameaddLevelNamelowerr   managersetLoggerClassru   r{   LOG_FORMAT_DATEr   setFormattersetLevel	getLoggerNOTSET
addHandler)loglevelr   r   r   handlerroots         r(   initialize_loggingr      s     &##E*UJJL1 &
 NN))&1 *o6I##%G#XDMM'..!OOG\**r+   c           	         [         R                  " 5       nU nUR                  S   n[        R                  " SS5      n[        R                  " SS5      nUc  [
        nU(       a  U(       d  [        nU(       Ga   [        U[        5      (       a  Un0 nOSU;   a  US   nO[        n[        U[        5      (       dH  U(       aA  SR                  n0 n[         H'  n	UR                  U	5      n
U
(       a  U" X5      OUX'   M)     UnUR                  [        XdR                  S[        5      5      5        SU;   a(  UR                   ["        :X  a  UR%                  US   5        X#R                   :  a  UR                   n['        S	U S
9=n(       a,  UR)                  U5        X#R                   :  a  UR                   nUR%                  U5        g )Nr   outputlogcolorsr   z[{}m{}[0mformat-dater   logfile)lvl)r2   r   handlersr   interpolateCOLORS_DEFAULTr{   rx   strry   r   rz   rr   r   ru   r   r   	LOG_LEVELr   setup_logging_handlerr   )r   r   minlevelr   optsr   logfmtansifmtlfr   cs              r(   configure_loggingr      sv   DH mmAGk51DX6F~ddC  FD(^FF&$''F)00GB#JJu%23GA.	 $ FYHH]O<> 	? d?w}}	9T']+mm#}}H (	x@@w@ mm#}}HMM(r+   r   c           	          [         R                  " SU 5      nU(       d  g[        U[        5      (       d  SU0nUR	                  S5      nUR	                  SU5      nUR	                  SS5      nUR	                  SU5      n [
        R                  " U5      n[        XcXx5      n	U	R                  UR	                  SU5      5        U	R                  [!        UR	                  SU5      UR	                  S["        5      5      5        U	$ ! [        [        4 a0  n
[        R                  " S5      R                  S	X
5         Sn
A
gSn
A
f[         a0  n
[        R                  " S5      R                  S
X
5         Sn
A
gSn
A
ff = f)zSetup a new logging handlerr   Nrg   r   r   zutf-8deferr   z%s: %sz %s: missing or invalid path (%s)r   r   r   )r   r   rx   ry   rr   r   expand_pathr   OSError
ValueErrorr2   r   r   	TypeErrorr   r   ru   r   )r   r   r   r   r   r   rg   r   r   r   rC   s              r(   r   r   $  sF    k3/DdD!!~88FD88FD!Dxx
G,HHHWe$E
%d(: TXXgs+,30  N Z  ,'//c	  ,'//.	:s$   "D E=&E  E=&E88E=c                 ~    [         R                  R                  U 5        [         R                  R                  5         g r   )sysstdoutwriter   ss    r(   stdout_write_flushr   H  $    JJQJJr+   c                 ~    [         R                  R                  U 5        [         R                  R                  5         g r   )r   stderrr   r   r   s    r(   stderr_write_flushr   M  r   r+   line_bufferingc                 B    [         R                  R                  U 5        g r   )r   r   r   r   s    r(   stdout_writer   S      

r+   c                 B    [         R                  R                  U 5        g r   )r   r   r   r   s    r(   stderr_writer   Z  r   r+   c                      S H  n [        [        U S 5      nU(       d  M  [        R                  " SU 5      nU(       d  SS0nO6[	        U[
        5      (       a  SUS.nOUR                  S5      (       d  SUS'   UR                  " S0 UD6  M     g )N)r   r   stdinr   r   replace)r   r   r,   )rc   r   r   rr   rx   r   reconfigure)r   r   optionss      r(   configure_standard_streamsr   `  s~    -dD)**[$/+G%%!*@GX&& )GH%W% .r+   c                      [         R                  " SS5      n U b  U S:X  a7   [        (       a   [        (       a
  [	        5       O	[        5       nOu[        5       nOj[        U [        5      (       a  [        U 5      nOIU (       d  [        5       nO7[        [        [
        [
        [        [        S.U R                  5          " 5       n[         R                  " SSS5      (       d  [        R                  Ul        U$ ! [         a    [        5       n NJf = f)zSelect a suitable output classr   r   auto)defaultpipetermterminalcolornullr   T)r   rr   
TTY_STDOUTr   ColorOutputTerminalOutput
PipeOutput	Exceptionrx   ry   CustomOutput
NullOutputr   r   identityr   )r   r   s     r(   selectr  t  s    ::k6*D|tv~	"z*.$N4D# 
D$		d# #"&&#"
 **,  ::k6400mmM%  	"\F	"s   *C6 
C6 6DDc                   ,    \ rS rSrS rS rS rS rSrg)r	  i  c                     g)z2Print a message indicating the start of a downloadNr,   r   rg   s     r(   startNullOutput.start      r+   c                     g)z;Print a message indicating that a download has been skippedNr,   r  s     r(   r   NullOutput.skip  r  r+   c                     g)z7Print a message indicating the completion of a downloadNr,   r  s     r(   r	   NullOutput.success  r  r+   c                     g)zDisplay download progressNr,   )r   bytes_totalbytes_downloadedbytes_per_seconds       r(   progressNullOutput.progress  r  r+   r,   N)	r-   r.   r/   r0   r  r   r	   r  r4   r,   r+   r(   r	  r	    s    AJF(r+   r	  c                        \ rS rSrS rS rSrg)r  i  c                 ,    [        [         U S35        g r   )r   	CHAR_SKIPr  s     r(   r   PipeOutput.skip  s    	{4&+,r+   c                      [        U S35        g r   )r   r  s     r(   r	   PipeOutput.success  s    vR[!r+   r,   N)r-   r.   r/   r0   r   r	   r4   r,   r+   r(   r  r    s    -"r+   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	r  i  c                 
  ^^^ [         R                  " SSS5      =n(       aL  US:X  a  [        O[        m[        R
                  " 5       R                  [        -
  m[        mUUU4S jU l	        g [        R                  U l	        g )Nr   shortenTeawc                    > T" U TT5      $ r   r,   )txtr#   limitseps    r(   <lambda>)TerminalOutput.__init__.<locals>.<lambda>  s    tC'<r+   )r   rr   shorten_string_eawshorten_stringshutilget_terminal_sizecolumnsOFFSETCHAR_ELLIPSIESr$  r   r
  )r   r$  r#   r(  r)  s     @@@r(   r<   TerminalOutput.__init__  sZ    jji>>7>)0E)9%~D,,.66?E C<DL==DLr+   c                 >    [        U R                  SU 35      5        g )Nz  r   r$  r  s     r(   r  TerminalOutput.start  s    4<<"TF45r+   c                 L    [        U R                  [        U-   5       S35        g r   )r   r$  r  r  s     r(   r   TerminalOutput.skip  s     Y%567r:;r+   c                 N    [        SU R                  [        U-   5       S35        g )Nr   )r   r$  CHAR_SUCCESSr  s     r(   r	   TerminalOutput.success  s"    r$,,|d':;<B?@r+   c           	          [         R                  " U5      n[         R                  " U5      nUc  [        SUS SUS S35        g [        SUS-  U-  S SUS SUS S35        g )Nr:  z>7zB zB/s d   z>3z% )r   format_valuer   r   r  r  r  bdlbpss         r(   r  TerminalOutput.progress  sy     01 012c"XRBxt452.4CBGr82c"XT3 4r+   )r$  N)
r-   r.   r/   r0   r<   r  r   r	   r  r4   r,   r+   r(   r  r    s    )6<A4r+   r  c                   ,    \ rS rSrS rS rS rS rSrg)r  i  c                     [         R                  U 5        [        R                  " SS5      nUc  [        nSUR                  SS5       S3U l        SUR                  SS	5       S3U l        g )
Nr   r   z[r   r
   mz[r	   r   )r  r<   r   r   r   rr   
color_skipcolor_success)r   r   s     r(   r<   ColorOutput.__init__  se    %##K:>#F!&**VS"9!:!<&vzz)V'D&EQGr+   c                 8    [        U R                  U5      5        g r   r5  r  s     r(   r  ColorOutput.start  s    4<<-.r+   c                 V    [        U R                   U R                  U5       S35        g Nz[0m
)r   rG  r$  r  s     r(   r   ColorOutput.skip  s$    (d);(<IFGr+   c                 V    [        U R                   U R                  U5       S35        g rM  )r   rH  r$  r  s     r(   r	   ColorOutput.success  s&    **+DLL,>+?yIJr+   )rG  rH  N)	r-   r.   r/   r0   r<   r  r   r	   r4   r,   r+   r(   r  r    s    H/HKr+   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r  i  c                 L   UR                  S5      nUR                  S5      nUR                  S5      nS=n=pg[        U[        5      (       a  Uu  pR[        U[        5      (       a  Uu  pc[        U[        5      (       a  Uu  pt[        R                   " SSS5      =n(       a}  US:X  a  [        O[
        n	[        R                  " 5       R                  n
U R                  XX-
  5      U l
        U R                  XX-
  5      U l        U R                  XX-
  5      U l        O3UR                  U l
        UR                  U l        UR                  U l        UR                  S	5      =(       d    S
R                  U l        UR                  S5      =(       d    SR                  U l        g )Nr   r  r	   r   r   r$  Tr%  r  z{0:>7}B {1:>7}B/s zprogress-totalz{3:>3}% {0:>7}B {1:>7}B/s )rr   rx   listr   r,  r-  r.  r/  r0  
_make_func	_fmt_skip
_fmt_start_fmt_successr   _fmt_progress_fmt_progress_total)r   r   fmt_skip	fmt_startfmt_successoff_skip	off_startoff_successr$  r#   widths              r(   r<   CustomOutput.__init__  sf   ;;v&KK(	kk),-...9h%%!)Hi&&#, Ik4(('2$Kjji>>7>)0E)9%~D,,.66E!__ 02DN"oo!24DO $5#6!8D &__DN'..DO + 2 2D%kk*5 54ff 	$+KK0@$A %C$BFF 	 r+   c                 0   ^^^ UR                   mUUU4S j$ )Nc                 ,   > T" T" U T[         5      5      $ r   )r2  )r'  r   r(  r$  s    r(   r*  )CustomOutput._make_func.<locals>.<lambda>  s    3wsE>BCr+   )r   )r   r$  format_stringr(  r   s    ` `@r(   rT  CustomOutput._make_func  s    ""CCr+   c                 8    [        U R                  U5      5        g r   )r   rV  r  s     r(   r  CustomOutput.start  s    4??401r+   c                 8    [        U R                  U5      5        g r   )r   rU  r  s     r(   r   CustomOutput.skip
  s    T^^D)*r+   c                 8    [        U R                  U5      5        g r   )r   rW  r  s     r(   r	   CustomOutput.success  s    T&&t,-r+   c           	         [         R                  " U5      n[         R                  " U5      nUc  [        U R                  XE5      5        g [        U R	                  XE[         R                  " U5      US-  U-  5      5        g )Nr>  )r   r?  r   rX  rY  r@  s         r(   r  CustomOutput.progress  so     01 01++C5611$++K8 3&+57 8r+   )rX  rY  rU  rV  rW  N)r-   r.   r/   r0   r<   rT  r  r   r	   r  r4   r,   r+   r(   r  r    s#     KDD2+.8r+   r  c                       \ rS rSrS rSrg)EAWCachei  c                 J    [         R                  " U5      S;   a  SOS=o U'   U$ )NWF   r   )unicodedataeast_asian_width)r   r   r`  s      r(   __missing__EAWCache.__missing__  s*    --c2d:A	BS	r+   r,   N)r-   r.   r/   r0   rv  r4   r,   r+   r(   rp  rp    s    r+   rp  c                 n    [        U 5      U::  a  U $ U[        U5      -  nU SUS-    U XS-   S-  * S  3$ )z=Limit width of 'txt'; assume all characters have a width of 1Nrs  r   )len)r'  r(  r)  s      r(   r-  r-  #  sR    
3x5
	SXE+5A:uS!G>):);%<$=>>r+   c                 j   U  Vs/ s H  oCU   PM	     nn[        U5      nXa::  a  U $ U[        U5      -  nU[        U 5      :X  a  U SUS-    U XS-   S-  * S  3$ SnUS-  n XU   -  nUS:  a  OUS-  nM  Sn	US-   S-  XU   -   -   n
 XU	   -  n
U
S:  a  OU	S-  n	M  U SU  U X	S-   S  3$ s  snf )zDLimit width of 'txt'; check for east-asian characters with width > 1Nrs  r   r   )sumry  )r'  r(  r)  cacher   char_widths
text_widthleftlwidthrightrwidths              r(   r,  r,  +  s!   %()S8SK)[!J
	SXESXkuz"#C5aA~->-?)@(ABB DaZF
d##A:		  EAg!^vD(99:F
e$$A:
	  %4j\#s78}o..; *s   B0)r   ):r   r   r.  r2   rt  r?   r   r   r   r   isattyr  r  r   
TTY_STDERRr   	TTY_STDINr   environrr   COLORSWINDOWSr   r1  r  r;  r2  r{   r   rM   r   rz   r   r6   rW   rl   ru   r   r   r   r   r   r   r   rc   r   r   r   r  r	  r  r  r  r  ry   rp  r-  r,  r,   r+   r(   <module>r     s   
 
    % %""$J""$J		  "I
 ZZ^^J'	'	$*y!!$v"(w!'v$*y!"(w <<6bjjnnV,6DFILNDFILN /
%LL	2
	W^^ 	A AD  = =!! D'''' 'T+,.b $.93 %H

 3::'.. &L 3::'.. &L&(>( (" "4 4<K. K,98 98xt ? (-HJ /k  J
  J
  Is4   H) H8 I )H54H58IIII