
    ih                         S r SSKrSSKrSSKJrJr  \R                  " S5      r SS jrS r	 " S S	5      r
 " S
 S\
5      r " S S5      r " S S\5      rg)zDownload Archives    N   )util	formatterarchivec                    [         R                  " X-   5      R                  n[        U [        5      (       a*  U R                  S5      (       a  US:X  a  [        n	O^[        n	OW[        R                  " U 5      n Ub+  SU ;   a%  [         R                  " U 5      R                  U5      n US:X  a  [        n	O[        n	Ub,  U(       a%  [         R                  " U5      R                  U5      nU	" XX5U5      $ )N)zpostgres://zpostgresql://memory{)r   parse
format_map
isinstancestr
startswithDownloadArchivePostgresqlMemoryDownloadArchivePostgresqlr   expand_pathDownloadArchiveMemoryDownloadArchive)
pathprefixformattablemodepragmakwdict	cache_keykeygenclss
             ?/app/mltbenv/lib/python3.13/site-packages/gallery_dl/archive.pyconnectr      s    __V_-88F$,". ".81C+C%#+??4(33F;D8'C!Ce&11&9tUI66    c                 .    SU R                  SS5       S3$ )N"_)replace)names    r   sanitizer&   +   s    c3'(,,r    c                   4    \ rS rSrSrSS jrS rS rS rSr	g)	r   /   Nc                    U R                   c  [        S5      [        l          U R                   R                  USSS9nS Ul	        X l
        X`l        UR                  U l        UR                  5       =U l        nU=(       d    SU l        Uc  SO
[        U5      nSU S3U l        S	U S
3U l        U(       a  U H  nUR%                  SU 35        M      UR%                  SU S35        g ! U R                   R                   aR    [
        R                  " [
        R                  R                  U5      5        U R                   R                  USSS9n GNf = f! U R                   R                   a    UR%                  SU S35         g f = f)Nsqlite3<   F)timeoutcheck_same_thread_archive_keyr   zSELECT 1 FROM z WHERE entry=? LIMIT 1zINSERT OR IGNORE INTO z (entry) VALUES (?)zPRAGMA CREATE TABLE IF NOT EXISTS z' (entry TEXT PRIMARY KEY) WITHOUT ROWID (entry TEXT PRIMARY KEY))_sqlite3
__import__r   r   OperationalErrorosmakedirsr   dirnameisolation_levelr   
connectionclosecursor
_cache_keyr&   _stmt_select_stmt_insertexecute)	selfr   r   r   r   r   conr:   stmts	            r   __init__DownloadArchive.__init__2   s   == '1)'<O$	;--''bE ( ;C #YY
"zz|+f#5~"]	7  	 %UG ,! " 	 /0 	8NN8 @D E F7 }}-- 	;KK-.--''bE ( ;C	;: }}-- 	8NN8 @6 7 8	8s$   C* E *A(EE/F
Fc                     UR                  U R                  5      =(       d    U R                  U5      nU R                  R	                  U R
                  U45        g)z)Add item described by 'kwdict' to archiveN)getr;   r   r:   r>   r=   r?   r   keys      r   addDownloadArchive.add[   s>    jj)@T[[-@D--v6r    c                     U R                  U5      =o!U R                  '   U R                  R                  U R                  U45        U R                  R                  5       $ )z?Return True if the item described by 'kwdict' exists in archive)r   r;   r:   r>   r<   fetchonerF   s      r   checkDownloadArchive.check`   sK    (,F(;;T__%D--v6{{##%%r    c                     g N r?   s    r   finalizeDownloadArchive.finalizef       r    r;   r=   r<   r9   r8   r:   r   NNN)
__name__
__module____qualname____firstlineno__r1   rB   rH   rL   rR   __static_attributes__rP   r    r   r   r   /   s    H'8R7
&r    r   c                   0    \ rS rSrSS jrS rS rS rSrg)	r   j   Nc                 P    [         R                  XX#XE5        [        5       U l        g rO   )r   rB   setkeysr?   r   r   r   r   r   s         r   rB   DownloadArchiveMemory.__init__l   s       v	:E	r    c                     U R                   R                  UR                  U R                  5      =(       d    U R	                  U5      5        g rO   r`   rH   rE   r;   r   r?   r   s     r   rH   DownloadArchiveMemory.addq   3    		JJt'  KK	!r    c                     U R                  U5      =o!U R                  '   X R                  ;   a  gU R                  R	                  U R
                  U45        U R                  R                  5       $ )NT)r   r;   r`   r:   r>   r<   rK   rF   s      r   rL   DownloadArchiveMemory.checkv   sX    (,F(;;T__%))D--v6{{##%%r    c                    U R                   (       d  g U R                  nU R                      UR                  S5        U R                  n[        U R                   5      S:  a&  U R                    H  nUR                  X#45        M     O#UR                  US U R                    5       5        S S S 5        g ! U R                  R
                   a     Nf = f! , (       d  f       g = f)NBEGINd   c              3   &   #    U  H  o4v   M	     g 7frO   rP   .0rG   s     r   	<genexpr>1DownloadArchiveMemory.finalize.<locals>.<genexpr>   s     )FIS&I   )	r`   r:   r8   r>   r1   r3   r=   lenexecutemany)r?   r:   rA   rG   s       r   rR   DownloadArchiveMemory.finalize}   s    yy__w' $$D499~#99CNN40 % ""4)FDII)FG _ ==11  _s.   CB5A.C5CCCC
C#r`   rV   	rW   rX   rY   rZ   rB   rH   rL   rR   r[   rP   r    r   r   r   j   s    
!
&Hr    r   c                   4    \ rS rSrSrSS jrS rS rS rSr	g)	r      Nc                 :   U R                   c  [        S5      [        l         U R                   R                  U5      =U l        nUR                  5       =U l        nUR                  U l        X l        U=(       d    SU l        Uc  SO
[        U5      nSU S3U l
        SU S3U l         UR                  SU S	35        UR                  5         g ! [         aA  n[        R!                  S
XhR"                  R$                  X85        UR'                  5         e S nAff = f)Npsycopgr.   r   zSELECT true FROM z WHERE entry=%s LIMIT 1zINSERT INTO z+ (entry) VALUES (%s) ON CONFLICT DO NOTHINGr/   r0   z#%s: %s when creating '%s' table: %s)_psycopgr2   r   r   r8   r:   r9   r   r;   r&   r<   r=   r>   commit	Exceptionlogerror	__class__rW   rollback)	r?   urir   r   r   r   r@   r:   excs	            r   rB   "DownloadArchivePostgresql.__init__   s   == 1;I1F%. $ 5 5c ::#"zz|+fYY
#5~"]	7  	 5' "% & 	
	NN8 @6 7 8JJL 	II;==115?LLN		s   )%C 
D<DDc                    UR                  U R                  5      =(       d    U R                  U5      n U R                  R	                  U R
                  U45        U R                  R                  5         g ! [         aZ  n[        R                  SU R                  UR                  R                  U5        U R                  R                  5          S nAg S nAff = f)Nz%s: %s when writing entry: %s)rE   r;   r   r:   r>   r=   r8   r}   r~   r   r   r   rW   r   r?   r   rG   r   s       r   rH   DownloadArchivePostgresql.add   s    jj)@T[[-@	'KK 1 1C6:OO""$ 	'II5oos}}'='=sDOO$$&&	's   AA7 7
CACCc                    U R                  U5      =o!U R                  '    U R                  R                  U R                  U45        U R                  R                  5       $ ! [         aZ  n[        R                  SU R                  UR                  R                  U5        U R                  R                  5          S nAgS nAff = f)N%s: %s when checking entry: %sF)r   r;   r:   r>   r<   rK   r~   r   r   r8   r   rW   r   r   s       r   rL   DownloadArchivePostgresql.check   s    (,F(;;T__%	KK 1 1C6:;;'')) 	II6oos}}'='=sDOO$$&		s   A A" "
C,ACCc                     g rO   rP   rQ   s    r   rR   "DownloadArchivePostgresql.finalize   rT   r    rU   rV   )
rW   rX   rY   rZ   r|   rB   rH   rL   rR   r[   rP   r    r   r   r      s    H>'	r    r   c                   0    \ rS rSrSS jrS rS rS rSrg)	r      Nc                 P    [         R                  XX#XE5        [        5       U l        g rO   )r   rB   r_   r`   ra   s         r   rB   (DownloadArchivePostgresqlMemory.__init__   s     !**v	:E	r    c                     U R                   R                  UR                  U R                  5      =(       d    U R	                  U5      5        g rO   rd   re   s     r   rH   #DownloadArchivePostgresqlMemory.add   rg   r    c                    U R                  U5      =o!U R                  '   X R                  ;   a  g U R                  R	                  U R
                  U45        U R                  R                  5       $ ! [         aZ  n[        R                  SU R                  UR                  R                  U5        U R                  R                  5          S nAgS nAff = f)NTr   F)r   r;   r`   r:   r>   r<   rK   r~   r   r   r8   r   rW   r   r   s       r   rL   %DownloadArchivePostgresqlMemory.check   s    (,F(;;T__%))	KK 1 1C6:;;'')) 	II6oos}}'='=sDOO$$&		s   A A2 2
C<ACCc                    U R                   (       d  g  U R                  R                  U R                  S U R                    5       5        U R                  R                  5         g ! [         aZ  n[        R                  SU R                  UR                  R                  U5        U R                  R                  5          S nAg S nAff = f)Nc              3   &   #    U  H  o4v   M	     g 7frO   rP   rn   s     r   rp   ;DownloadArchivePostgresqlMemory.finalize.<locals>.<genexpr>   s     -9C9rr   z%s: %s when writing entries: %s)r`   r:   rt   r=   r8   r}   r~   r   r   r   rW   r   )r?   r   s     r   rR   (DownloadArchivePostgresqlMemory.finalize   s    yy	'KK##!!-499-/ OO""$ 	'II7oos}}'='=sDOO$$&&	's   AA& &
C
0ACC
rv   rV   rw   rP   r    r   r   r      s    
!
'r    r   )NNNNN)__doc__r4   logging r   r   	getLoggerr   r   r&   r   r   r   r   rP   r    r   <module>r      sf     	  	" HL72-8 8v#HO #HL8 8v$'&? $'r    