
    iG(                     \    S r SSKJr  SSKJrJr  SSKrSSKrSSKr " S S\5      r	S	 r
\	rg)
z Write metadata to external files   )PostProcessor   )util	formatter    Nc                       \ 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S rS rS rS rS rS rS rSS jrSrg)
MetadataPP   c           
      f  ^ [         R                  " X5        UR                  S5      nUR                  S5      =(       d    UR                  S5      nSnS nUS:X  a  U R                  U l        SnGO&US:X  a}  U R
                  U l        UR                  S5      R                  5        VV	s0 s H6  u  pU[        R                  " U	S [        R                  5      R                  _M8     sn	nU l        S nGOUS	:X  a+  U R                  U l        UR                  S5      U l        S nGOrUS
:X  d  U(       di  U(       ab  U R                  U l        [!        U["        5      (       a  SR%                  U5      S-   n[        R                  " U5      R                  U l        SnOUS:X  a  Sn
[!        U["        5      (       a  U
R%                  U5       U
 3nUS   U
:w  a  US   S:w  d	  US   S:X  a  U U
 3nU R                  U l        [        R                  " U5      R                  U l        SnOpUS:X  a6  U R(                  U l        U R+                  U5      R,                  U l        SnSnO4U R(                  U l        U R+                  US5      R,                  U l        SnUR                  S5      =m(       a{  TSL a	  S U l        Om[2        R4                  n[2        R6                  n[        R8                  " T5      mU(       a  UT;   a  TR;                  X5      mTS   U:w  a  TU-  mU4S jU l        UR                  S5      n[!        U["        5      (       aW  U R<                  U l        U Vs/ s H2  n[        R                  " U[        R@                  5      R                  PM4     snU l!        O}U(       av  U RD                  U l        [2        R4                  [2        R6                  =(       d    S-   n[        R8                  " U5      RG                  U5      [2        R4                  -   U l$        UR                  SU5      nUR                  S5      nU(       aO  US:X  a  U RJ                  U l        OU RL                  U l'        [        R                  " U5      R                  U l(        OUU(       a7  U RR                  U l'        [        R                  " U5      R                  U l*        OUR                  S W5      U l+        UR                  S!5      nUc  S"nO&[!        U[X        5      (       a  UR[                  S#5      nUR]                  U Vs0 s H  nUU R                  _M     snU5        U R_                  XS$5      (       a  U Ra                  U5        U Rc                  U5      U l2        UR                  S%5      U l3        UR                  S&U5      U l4        UR                  S'S(5      U l5        UR                  S)5      U l6        UR                  S*S+5      U l7        UR                  S,5      U l8        g s  sn	nf s  snf s  snf )-Nmodezcontent-formatformatwtagstxtmodifyfieldsdeletecustom
printr   r   F-jsonlaz
data.jsonl   jsonzbase-directoryTc                     U R                   $ N)basedirectory)ps    N/app/mltbenv/lib/python3.13/site-packages/gallery_dl/postprocessor/metadata.py<lambda>%MetadataPP.__init__.<locals>.<lambda>E   s    q    c                    > T$ r     )r"   base_directorys    r#   r$   r%   N   s    ~r&   	directory filenamezextension-format	extensionevent)file,_MD_mtimeopenencodingzutf-8newlineskipFzmetadata-path)9r   __init__get_write_tagswrite_run_modifyrunitemsr   parser   identity
format_mapr   _run_delete_write_custom
isinstancelistjoin_content_fmt_write_json_make_encoderencode_json_encode_baseossepaltsepexpand_pathreplace_directory_format
_directoryNONE_directory_formatters_directory_customrstrip_metadir_run_stdout_filename_custom	_filename_filename_fmt_filename_extfmt_extension_fmtr-   strsplitregister_hooks_archive_init_archive_register_make_filterfilterr2   omoder4   r5   r6   	meta_path)selfjoboptionsr   cfmtre   r,   extnamevaluenlrM   rN   r*   dirfmtextfmteventsr.   r)   s                     @r#   r7   MetadataPP.__init__   s   t){{6"{{+,EH0E6>))DJCX''DH $+;;x#8#>#>#@#@KD iooeT4==ALLL#@DK CX''DH!++h/DKCXTd++DJ$%%yy- ) 5 @ @DCW_B$%%''$--Bx2~47d?d1gnt}++DJ ) 5 @ @DHW_))DJ $ 2 27 ; B BDE#H))DJ $ 2 27A > E EDC$[[)9::>:%6
ff!%!1!1.!Af6%3%;%;F%HN!"%,"c)N5
KK,	i&&"44DO (*'F 		2=='*D& "44DO&&BIIO,C ,,Y7>>sCbffLDM;;z84/03++!%!6!6%.__X%>%I%I"!22DN"+//&"9"D"DD$[[c:DNW%>F$$\\#&F@E488O@'JcF33""3'''0[[)
[[/
J8{{9-KK.	 _5sd*8 As   *=X#%9X)>X.c                 T    [        XR                  U R                  U R                  S9$ )N)r4   r5   )r3   re   r4   r5   )rg   paths     r#   r3   MetadataPP.open|   s#    D**!]] LL* 	*r&   c                    U R                   nU(       a!  UR                  UR                  5      (       a  g [        R                  (       a2  UR
                  (       a!  UR                  U R                  U5      5      nOU R                  U5      nX0R                  U5      -   nU R                  b  XAR                  U R                  '   U R                  (       a%  [        R                  R                  U5      (       a  g  U R                  U5       nU R                  XQR                  5        S S S 5        U(       a  UR%                  UR                  5        U R&                  (       a  UR)                  U5        g g ! , (       d  f       NT= f! [          a`    [        R"                  " USS9  U R                  U5       nU R                  XQR                  5        S S S 5         M  ! , (       d  f        N= ff = f)NT)exist_ok)archivecheckkwdictr   WINDOWSextended_extended_pathrR   rZ   rf   r6   rL   rt   existsr3   r:   FileNotFoundErrormakedirsaddr2   	set_mtime)rg   pathfmtrx   r*   rt   fps         r#   r<   MetadataPP.run   sC   ,,w}}W^^44<<G,,..tw/GHI0I>>'22>>%-1NN4>>*99--	/4B

2~~. ! KK'::d#  !  	/KK	D14B

2~~. !	/sH   <F E7)F 7
FF F 0G28GG2
G.	)G2.G2c                 X    U R                  [        R                  UR                  5        g r    )r:   sysstdoutrz   rg   r   s     r#   rX   MetadataPP._run_stdout   s    

3::w~~.r&   c                     UR                   nU R                  R                  5        H%  u  p4Un SU;   a  [        XS5      u  pSU" U5      XS'   M'     g ! [         a     M7  f = fN[)rz   r   r=   	_traverse	Exception)rg   r   rz   keyfuncobjs         r#   r;   MetadataPP._run_modify   s`    **,ICC#:(2HC< -  s   A
AAc                     UR                   nU R                   H  nUn SU;   a  [        XC5      u  pCXC	 M     g ! [         a     M-  f = fr   )rz   r   r   r   )rg   r   rz   r   r   s        r#   rA   MetadataPP._run_delete   sO    ;;CC#:(2HCH   s   9
AAc                     UR                   $ r    )realdirectoryr   s     r#   rK   MetadataPP._base   s    $$$r&   c                 $    U R                  U5      $ r    )rK   r   s     r#   rR   MetadataPP._directory   s    zz'""r&   c                 t    [         R                  R                  U R                  U5      U R                  5      $ r    )rL   rt   rE   rK   rW   r   s     r#   rU   MetadataPP._directory_custom   s$    ww||DJJw/??r&   c                    UR                   nUR                  n U R                  Ul         SUl        UR                  UR                  5      =n(       a@  UR                  [        R                  R                  U5      [        R                  -   5      nOS[        R                  -   n[        R                  R                  U R                  U5      U5      X1l        X!l         $ ! X1l        X!l         f = f)Nr(   .)directory_formattersdirectory_conditionsrT   build_directoryrz   
clean_pathrL   rM   rE   rt   rK   )rg   r   
formatters
conditionssegmentsr*   s         r#   rQ   MetadataPP._directory_format   s    11
11

	6+/+E+EG(+-G("227>>BBxB#..rvv{{8/Drvv/MN	"&&L	77<<

7 3Y?+5(+5( ,6(+5(s   B;C" "C0c                 L    UR                   =(       d    SS-   U R                  -   $ )Nmetadatar   )r,   r-   r   s     r#   rZ   MetadataPP._filename   s!      .J#5FFr&   c                 t    UR                  UR                  U R                  UR                  5      5      5      $ r    )r   clean_segmentr[   rz   r   s     r#   rY   MetadataPP._filename_custom   s4    !!'"7"7w~~.#0 1 	1r&   c                     UR                   nUR                  S5      nUR                  US'   UR                  U R	                  U5      -   US'   UR                  U5      nX2S'   U$ )Nr-   )rz   r8   r-   prefixr]   build_filename)rg   r   rz   rk   r,   s        r#   r\   MetadataPP._filename_extfmt   sd    jj%%//{%nnt/B/B6/JJ{))&1!{r&   c                 D    UR                  U R                  U5      5        g r    )r:   rF   rg   r   rz   s      r#   rB   MetadataPP._write_custom   s    
""6*+r&   c           
         UR                  S5      =(       d    UR                  S5      nU(       d  g [        U[        5      (       a@  UR                  S5      n[	        U5      [	        U5      S-  :  a  UR                  S5      nUnO[        U[
        5      (       a@  UR                  5       n/ nUR                  nU H  nU" U5        M     UR                  5         O~[        S U 5       5      (       ag  Un/ nUR                  nU HA  nU" UR                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     sn5        MC     UR                  5         UR                  SR                  U5      S-   5        g s  snf )Nr   
tag_stringz,     c              3   B   #    U  H  n[        U[        5      v   M     g 7fr    )rC   dict).0es     r#   	<genexpr>)MetadataPP._write_tags.<locals>.<genexpr>   s     3dAt$$ds   r   )r8   rC   r^   r_   lenr   valuesextendsortallr:   rE   )	rg   r   rz   r   taglisttaglistsr   tagdictxs	            r#   r9   MetadataPP._write_tags   s$   zz&!=VZZ%=dC  jj&G7|c$i"n,**S/Dd##{{}HD[[F#w $IIK3d333HD[[F#7>>#3J#3az!S7I#3JK $IIK
44'( Ks   E>
9E>
c                     U R                   (       a  U R                  U5      nUR                  U R                  U5      S-   5        g )Nr   )rd   r:   rJ   r   s      r#   rG   MetadataPP._write_json   s3    ;;[[(F
""6*T12r&   c                   ^^ UR                  S5      =m(       a,  [        T[        5      (       a  TR                  S5      mU4S j$ UR                  S5      mUR                  S5      nT(       aD  [        T[        5      (       a  TR                  S5      m[	        T5      mU(       a  U4S j$ U4S j$ U(       d  [
        R                  $ g )Nincluder0   c                 H   > T Vs0 s H  oU ;   d  M
  XU   _M     sn$ s  snf r    r(   )dkr   s     r#   r$   )MetadataPP._make_filter.<locals>.<lambda>	  s#    wAw!q&ga1gwAAs   		excludeprivatec                 j   > U R                  5        VVs0 s H  u  pUT;  d  M  X_M     snn$ s  snnf r    )r=   r   r   vr   s      r#   r$   r     s4    1779 "7941%&g%5 #'!$9 "7 "7s   //c                    > [         R                  " U 5      R                  5        VVs0 s H  u  pUT;  d  M  X_M     snn$ s  snnf r    )r   filter_dictr=   r   s      r#   r$   r     sD    t/?/?/B/H/H/J 3/Jtq!"'!1 #ad/J 3 3s
   AA)r8   rC   r^   r_   setr   r   )rg   ri   r   r   r   s      @@r#   rc   MetadataPP._make_filter  s    kk),,7,'3''!--,AA++i(++i('3''!--,'lG7 73 3 ### r&   Nc           	          [         R                  " UR                  SS5      UR                  SS5      UR                  S5      UR                  SU5      S[        R                  S9$ )NasciiFr   
separatorsindent)ensure_ascii	sort_keysr   r   check_circulardefault)r   JSONEncoderr8   r   json_default)rg   ri   r   s      r#   rH   MetadataPP._make_encoder  sW     We4kk&%0{{<0;;x0 %%
 	
r&   )rK   rF   rR   rT   r]   rZ   r[   rJ   rW   r4   r-   r   rd   rf   r2   r5   re   r<   r6   r:   r    )__name__
__module____qualname____firstlineno__r7   r3   r<   rX   r;   rA   rK   rR   rU   rQ   rZ   rY   r\   rB   r9   rG   rc   rH   __static_attributes__r(   r&   r#   r	   r	      s`    f6P*
$>/		%#@6G1,)83
$,
r&   r	   c                     UR                  S5      u  p#nX   n SU;   a/  UR                  S5      u  p#nXR                  S5         n SU;   a  M/  XR                  S5      4$ )Nr   z"'])	partitionstrip)r   r   rl   _s       r#   r   r   &  sb    ==%LDS
)C
*}}S)**V$% * 		&!!!r&   )__doc__commonr   r+   r   r   r   r   rL   r	   r   __postprocessor__r(   r&   r#   <module>r      s5    ' !   
 	Q
 Q
h"  r&   