
    i9                         S r SSKrSSKrSSKrSSKJrJrJr  \R                  rSSSSSS.r	 " S S5      r
S	 rSS
 jrS rg)zFilesystem path handling    N   )util	formatter	exceptionjpg)jpegjpejfifjifjfic                       \ rS rSrS rS rS rSS jrS rS r	S r
S	 rS
 rS rSS jrSS jrS rS rS rSS jrS rSS jrS rSrg)
PathFormat   c                 P	   UR                   nU" S5      nUc  [        R                  nS =U l        U l        U" S5      n Uc  UR
                  nO[        U[        5      (       a  UR                  5        VVs/ s HD  u  pVU(       d  M  [        R                  " U5      [        R                  " Xc5      R                  4PMF     snnU l        UR                  SUR
                  5      n[        R                  " XC5      R                  U l        U" S5      n Uc  UR$                  nO[        U[        5      (       a  UR                  5        VV	Vs/ s HU  u  pYU(       d  M  [        R                  " U5      U	 Vs/ s H#  n[        R                  " Xc5      R                  PM%     sn4PMW     snn	nU l        UR                  SUR$                  5      nU V
s/ s H#  n
[        R                  " X5      R                  PM%     sn
U l        0 U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        U" S5      nUc  [>        nUR                  U l         U" SS5      nU" S	S
5      nU" S5      nUS:X  a  [B        (       a  SOSnO6US:X  a  SnO-US:X  a  SnO$US:X  a  SSSSSSSSSS.	nOUS:X  a  SnOUS:X  a  Sn[E        XU5      U l#        U" SS5      n[E        US5      U l$        U" S S5      nUS:X  a  [B        (       a  S!OSnOUS:X  a  SnOUS:X  a  S!nUU l%        [B        (       a  U" S"S#5      U l&        S U l'        URP                  nU(       d  U" S$5      nUc4  U RI                  S%[R        RT                   S&[R        RT                   35      nOU(       a  [        U[        5      (       ad  / =U l'        nUR                  5        HG  u  nnU(       d  UnM  URW                  [        R                  " U5      U RY                  U5      45        MI     U RY                  U5      nUU l-        g s  snnf ! [         a  n[         R"                  " U5      eS nAff = fs  snf s  snn	nf s  sn
f ! [         a  n[         R(                  " U5      eS nAff = f)'Nzkeywords-defaultfilename 	directoryFzextension-mapzpath-restrictautozpath-replace_zpath-convertz
\\|/<>:"?*/unixwindowszwindows+u   ⧹u   ⧸u   ＜u   ＞u   ：u   ＂u   ？u   ＊)	\|r   <>:"?*asciiz^0-9A-Za-z_.zascii+z^0-9@-[\]-{ #-)+-.;=!}~zpath-removez -z
path-stripz. zpath-extendedTzbase-directory.z
gallery-dl).configr   NONEfilename_conditionsdirectory_conditionsfilename_fmt
isinstancedictitemscompile_filterr   parse
format_mapgetfilename_formatter	Exceptionr   FilenameFormatErrordirectory_fmtdirectory_formattersDirectoryFormatErrorkwdictdeleteprefixr   	extensionr   realdirectorypathrealpathtemppathEXTENSION_MAPextension_mapWINDOWS_build_cleanfuncclean_segment
clean_pathstripextendedbasedirectory_conditions
_parentdirossepappend_prepare_basedirectorybasedirectory)self	extractorr#   	kwdefaultr'   exprfmtexcr2   fmtsdirfmtr>   restrictreplaceconvremoverC   basedircondsbdirs                       </app/mltbenv/lib/python3.13/site-packages/gallery_dl/path.py__init__PathFormat.__init__   st   !!-.			I?CC 4#<j)	5#(55L$// &2%7%7%9, &:	TAT((.__S4??A%9,(
  ,//I4J4JK&/oo'))3 #
 {+	6$ ) 7 7M400 '4&9&9&;-
 '<
t	T((.#'1#'C "7BB#'1  '<-) !. 1 1"i6M6M N ,)+F 2==+)D% 	/ )M*../62-n%v*1'sHH"&H##2U%u#5ULH %H!1H-hF7*626|V,F?#GDEf_EiE
7"?D9DM(,%&&-.G//AbffXZx*HIgt,,<>>D1E&-mmo
d#&*G$d&9&9$&?&*&A&A$&G&I J	 '6 55g>$E,  	5//44	51-)  	60055	6s~   8Q 7Q:QA
Q 9R  Q4Q48*Q/"Q4**R  *Q;>R  Q 
Q,Q''Q,/Q44R   
R%
R  R%c                 R   [         R                  " U5      n[        R                  (       aB  [        R                  U;   a.  UR	                  [        R                  [        R
                  5      nUS   [        R
                  :w  a  U[        R
                  -  nU R                  U5      $ )N)r   expand_pathrG   altseprU   rH   rB   )rL   rX   s     r[   rJ   !PathFormat._prepare_basedirectory   si    ""7+99g-oobii8G2;"&& rvvGw''    c                     U R                   $ N)r;   rL   s    r[   __str__PathFormat.__str__   s    }}rc   c                      [        U R                  U5      $ ! [         aV    SU;   a  [        R                  " 5       s $ [
        R                  " U R                  5        [        U R                  U5      s $ f = f)z0Open file and return a corresponding file objectr)openr<   FileNotFoundErrorr   NullContextrG   makedirsr9   )rL   modes     r[   rk   PathFormat.open   s`    	-t,,  	-d{''))KK**+t,,	-s    %A86A87A8c                     U R                   (       a1   [        R                  " U R                  5        U R	                  5       $ g! [
         a     gf = f)z&Return True if the file exists on diskF)r8   rG   lstatr;   
check_fileOSErrorrf   s    r[   existsPathFormat.exists   sG    >>'((   s   /A 
AAc                     g)NT rf   s    r[   rs   PathFormat.check_file   s    rc   c                     Sn  [        U5      S-   nX R                  -   U R                  S'   U R                  5         [        R
                  " U R                  5        US-  nM`  ! [         a     Of = fWU l        g)Nr   r"   r8   F)	formatr8   r5   
build_pathrG   rr   r;   rt   r7   )rL   numr7   s      r[   
_enum_filePathFormat._enum_file   sx    	s*+1NN+BK(!'q   		s   A!A% %
A21A2c                    Xl         U R                  c  U R                  nO0U R                   H  u  p2U" U5      (       d  M    O   U R                  nU R                  U5      =n(       aJ  U U R	                  [
        R                  R                  U5      5       [
        R                   3=U l        nO	U=U l        n[        (       a"  U R                  (       a  U R                  U5      nXPl        g)z/Build directory path and create it if necessaryN)r5   rE   rK   build_directoryrB   rG   rH   joinr   r?   rD   _extended_pathr9   )rL   r5   rX   	conditionsegmentsr   s         r[   set_directoryPathFormat.set_directory   s    ((0((G&*&C&C"	V$$ 'D ,,++F3383)DOOBFFKK,ABCBFF8LMDNY *10DNY7t}}++I6I&rc   c                    [         R                  R                  U5      nUR                  S5      (       d  SU-   nOUR                  S5      (       d  SUSS  -   nUS   [         R                  :w  a  U[         R                  -   $ U$ )Nz\\z\\?\z\\?\UNC\   r_   )rG   r:   abspath
startswithrH   )rL   r:   s     r[   r   PathFormat._extended_path   sq    wwt$v&&t#D++!DH,D 8rvv"&&= rc   c                 z    Xl         S=U l        =U l        U l        US   nU R	                  X"5      =US'   U l        g)zSet general filename datar   r8   N)r5   r   r<   r7   r>   r8   )rL   r5   exts      r[   set_filenamePathFormat.set_filename   sB    6888[!/3/A/A#/KK{dnrc   c                 l    U R                  X5      =U l        nU R                  U-   U R                  S'   g)zSet filename extensionr8   N)r>   r8   r7   r5   )rL   r8   reals      r[   set_extensionPathFormat.set_extension   s0    %)%7%7	%MM#';;#:K rc   Nc                     U R                   (       d  U R                  U R                  SS5      -   U R                  S'   U R	                  5         U R
                  S   S:X  a/  U R
                  SS U l        U R                  SS =U l        U l        gU R                  (       d  U R	                  5         g! [        R                   a    e [         a2    U R                  S-   U l        U R                  S-   =U l        U l         gf = f)z0Fix filenames without a given filename extensionr   r8   r_   r"   Nr   T)r8   r7   r>   r5   r|   r:   r;   r<   r   GalleryDLExceptionr0   r   r9   )rL   r   s     r[   fix_extensionPathFormat.fix_extension   s    	E>>KK$"4"4R"<< K(!99R=C' $		#2DI48MM#24FFDMDM  ]]!  ++ 	 	E,DI,0,>,>,DDDMDM	Es   BB4 !B4 4ADDc                 4    U R                   c  U R                  nO0U R                    H  u  p2U" U5      (       d  M    O   U R                  nU R                  U R                  U" U5      5      5      $ ! [         a  n[
        R                  " U5      eSnAff = f)z(Apply 'kwdict' to filename format stringN)r%   r/   rB   rA   r0   r   r1   )rL   r5   rP   r   rQ   s        r[   build_filenamePathFormat.build_filename  s    	5''/--&*&>&>NI (( '? 11C??4#5#5c&k#BCC 	5//44	5s   6A2 5A2 2
B<BBc                     U R                   c  U R                  nO0U R                    H  u  p2U" U5      (       d  M    O   U R                  n/ nU R                  nU H  nU" U5      nUR                  [        L aY  UR                  5       nU(       a  US;  a  UR                  U5      nU(       a"  UR                  U R                  U5      5        Mu  Mw  U HZ  nUR                  5       nU(       a  US;  a  UR                  U5      nU(       d  M:  UR                  U R                  U5      5        M\     M     U$ ! [         a  n[        R                  " U5      eSnAff = f)z*Apply 'kwdict' to directory format stringsN>   r"   ..)r&   r3   rC   	__class__strrstriprI   rA   r0   r   r4   )	rL   r5   
formattersr   r   rC   rP   segmentrQ   s	            r[   r   PathFormat.build_directory  s1   	6((0!66
-1-F-F)I (( .G "&!:!:JHJJE!f+$$+%mmoG!;").."7 (:(:7(CD  $+")--/ WK%?&-nnU&;G"7$OOD,>,>w,GH $+ " O 	60055	6s#   6D9 CD9 )D9 9
EEEc                     U R                  U R                  5      =U l        nU R                  U-   U l        U R
                  U-   U l        U R                  (       d  U R                  U l        gg)z,Combine directory and filename to full pathsN)r   r5   r   r   r:   r9   r;   r<   )rL   r   s     r[   r|   PathFormat.build_path2  sV    #'#6#6t{{#CCNNX-	**X5}} MMDM rc   c                    U R                   (       a  U =R                  S-  sl        O<U R                  U R                  SS5      -   U R                  S'   U R                  5         Ub  [        U[        5      (       a%  U H  u  p!U" U R                  5      (       d  M    O   g[        R                  R                  U[        R                  R                  U R                  5      5      U l        gg)zEnable .part file usagez.partpartr8   N)r8   r<   r7   r>   r5   r|   r(   listrG   r:   r   basename)rL   part_directoryr   s      r[   part_enablePathFormat.part_enable:  s    >>MMW$M'+{{T5G5G6  ( DKK$OO%.$//1?-I -- 2@ GGLL  /DM &rc   c                 x     [         R                  " U R                  5      R                  $ ! [         a     gf = f)zReturn size of .part filer   )rG   statr<   st_sizert   rf   s    r[   	part_sizePathFormat.part_sizeP  s5    	774==)111 		s   ), 
99c                     U R                   R                  S5      =(       d    U R                   R                  S5      =n(       a'  [        R                  " Uc  U R                  OUU5        g g )N_mtime_meta_mtime_http)r5   r.   r   	set_mtimer;   )rL   r:   mtimes      r[   r   PathFormat.set_mtimeX  sP    kkoom4 5kkoom46E 6NNDL4==dEJ6rc   c                 >   U R                   (       a(  SU l         [        R                  " U R                  5        gU R                  U R                  :w  a.    [        R
                  " U R                  U R                  5         U R                  5         g! [         a7     [        R                  " U R                  5        O! [         a      gf = f M  [         a     [        R                  " U R                  U R                  5        Oo! [         ab     [        R                  " U R                  5        O! [         a       gf = f[        R                  " U R                  U R                  5         Of = f[        R                  " U R                  5         GNf = f)z$Move tempfile to its target locationFN)r6   rG   unlinkr<   r;   rU   rl   rn   r9   FileExistsErrorrt   shutilcopyfiler   rf   s    r[   finalizePathFormat.finalize]  s%   ;;DKIIdmm$==DMM)-JJt}}dmm<( + ) %D$6$67* %$%  
-Ft}}E, F)KK(:(:;. )#()t}}EF IIdmm,
-s   +B 
F B?>F?
C	FCF	F+D	F	
E5 D54E55
E?E5 FE.E52F4E55#FF)rK   rE   rB   rA   r6   r   r&   r3   rD   r8   r>   r   r%   r/   r5   r:   r7   r9   r;   rC   r<   )wb)Tre   )__name__
__module____qualname____firstlineno__r\   rJ   rg   rk   ru   rs   r~   r   r   r   r   r   r   r   r|   r   r   r   r   __static_attributes__rx   rc   r[   r   r      sf    o%b(	-'.L;
&56B*,K
!rc   r   c                    ^ ^^ [        T5      S::  a  [        R                  T   mUU 4S j$ UU 4S jnT Vs/ s H  n[        R                  U   PM     snmU$ s  snf )Nr   c                     > T" T" U 5      5      $ re   rx   )xrV   funcs    r[   <lambda>$_build_convertfunc.<locals>.<lambda>  s    d1grc   c                 :   > T" U 5      n T H  nU" U 5      n M     U $ re   rx   )r   rV   convsr   s     r[   convert_many(_build_convertfunc.<locals>.convert_many  s$    GDQA rc   )lenr   _CONVERSIONS)r   rV   r   cr   s   ``  @r[   _build_convertfuncr     sU    
4yA~%%d+&&
 1551Y##A&5E 6s   Ac                   ^ ^^ T (       d  [         R                  nO[        T [        5      (       a2  ST ;  a  [	        T 5      m S T S'   U4S jn[
        R                  T 5      mOP[        T 5      S:X  a  U U4S jnO9[        R                  " [         R                  " ST  S35      R                  T5      nU(       a  [        X25      $ U$ )Nr   c                 &   > U R                  T5      $ re   )	translate)r   tables    r[   r   _build_cleanfunc.<locals>.func  s    ;;u%%rc   r   c                 (   > U R                  TT5      $ re   )rU   )r   charsrepls    r[   r   r     s    99UD))rc   [])r   identityr(   r)   _process_repl_dictr   	maketransr   	functoolspartialresubr   )r   r   rV   r   r   s   ``  @r[   r@   r@     s    }}	E4	 	 E>&u-EE!H	&e$	Uq	*   1UG1!6!:!:DA-1d);t;rc   c                 &   U  Vs/ s H  n[        U5      S:  d  M  UPM     sn Hc  n[        U5      S:X  a1  US   S:X  a(  [        [        US   5      [        US   5      S-   5      nOUnU R                  U5      nU H  nX@U'   M	     Me     U $ s  snf )Nr      -r   r   )r   rangeordpop)r   r   charciterr   s        r[   r   r     s    !0EqSVaZE0t9>d1gn#d1g,DGQ7EEyyA!H  1 L 1s
   BBre   )__doc__rG   r   r   r   r   r   r   r?   r=   r   r   r@   r   rx   rc   r[   <module>r      sT     	   ( (
,,d dN<&rc   