
    
3j                     
   S SK r S SKrS SKrS SKJr  S SKrS SKJr  S rS r	S r
S rS r\R                  R                  R                  S	5      S
 5       rS r " S S5      r " S S\5      r " S S\5      r\\S.rSSS.rg)    N)PromptServer)webc                  Z   [         R                  R                  [         R                  R                  [        S5      5      n [         R                  R                  U S5      n[        US5       n[        R                  " UR                  5       5      sS S S 5        $ ! , (       d  f       g = f)Nz
../../userztext_file_dirs.jsonr)	ospathabspathjoin__file__openjsonloadsread)dirfilefs      Q/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-Custom-Scripts/py/text_files.pyget_allowed_dirsr   	   s_    
''//"'',,x>
?C77<<23D	dCAzz!&&(# 
s   .$B
B*c                  2    [        5       R                  5       $ N)r   keys     r   get_valid_dirsr      s    ""$$r   c                 &   [        5       nX;  a  [        U S-   5      eX   nUR                  S[        R                  " 5       5      nUR                  S[        R
                  " 5       5      nUR                  S[        R                  " 5       5      nU$ )Nz dir not foundz$inputz$outputz$temp)r   KeyErrorreplacefolder_pathsget_input_directoryget_output_directoryget_temp_directory)namedirsr   s      r   get_dir_from_namer$      sx    Dt..//:D<<,"B"B"DED<<	<#D#D#FGD<<!@!@!BCDKr   c                     [         R                  R                  U 5      n [         R                  R                  U5      n[         R                  R                  U /5      [         R                  R                  X/5      :H  $ r   )r   r   r	   
commonpath)parent_path
child_paths     r   is_child_dirr)       sT    ''//+.K,J77{m,0B0BKC\0]]]r   c                     U R                  SS5      n [        R                  R                  U 5      n [        R                  R	                  U 5      S   n U $ )N/**//r   )r   r   r   r	   split)r   s    r   get_real_pathr.   &   s@    
++fc
"C
''//#
C
''--
Q
CJr   z/pysssss/text-file/{name}c           
        ^#    U R                   S   n[        U5      nSU;   n[        U5      m[        [	        U4S j[
        R
                  " X#S95      5      n[        U5      S:X  a  S/n[        R                  " U5      $ 7f)Nr"   r+   c                 D   > [         R                  R                  U T5      $ r   )r   r   relpath)tpres    r   <lambda>get_files.<locals>.<lambda>5   s    rwwq#6r   )	recursiver   [none])	
match_infor$   r.   listmapgloblenr   json_response)requestr"   r   r6   filesr3   s        @r   	get_filesr@   -   sx     f%D
D
!C#I

C6YYs8: ;E 5zQ
U##s   A>Bc                 0   US:X  d  U(       a  UR                  5       (       d  [        S5      e[        U 5      n [        U 5      n [        R
                  R                  U 5      (       d  [        R                  " U 5        [        R
                  R                  X5      n[        R
                  R                  U5      nU(       a9  [        R
                  R                  U5      (       d  [        R                  " USS9  [        X5      (       d
  [        5       eU$ )Nr7   zNo fileT)exist_ok)strip
ValueErrorr$   r.   r   r   existsmkdirr
   dirnamemakedirsr)   ReferenceError)root_dirr   	full_pathfile_dirs       r   get_filerM   =   s    xt4::<<## *HX&H77>>(##
X,Iwwy)Hx00
Ht,,,r   c                   2    \ rS rSrSrSr\S 5       rS rSr	g)TextFileNodeQ   )STRINGutilsc                 `    US:X  d  U(       a  UR                  5       (       d  g[        X5        g)Nr7   T)rC   rM   )selfrJ   r   kwargss       r   VALIDATE_INPUTSTextFileNode.VALIDATE_INPUTSU   s$    84tzz|| r   c                     [        US   US   5      U l        [        U R                  S5       nUR                  5       4sS S S 5        $ ! , (       d  f       g = f)NrJ   r   r   )rM   r   r   r   )rT   rU   r   s      r   	load_textTextFileNode.load_text\   s@    VJ/@	$))S!QFFH< "!!s   A		
Ar   N)
__name__
__module____qualname____firstlineno__RETURN_TYPESCATEGORYclassmethodrV   rY   __static_attributes__r   r   r   rO   rO   Q   s#    LH  r   rO   c                   8    \ rS rSr\S 5       r\S 5       rSrSrg)LoadTextb   c                 T    [         R                  R                  U R                  5      $ r   )r   r   getmtimer   rT   rU   s     r   
IS_CHANGEDLoadText.IS_CHANGEDc   s    ww		**r   c                 v    S[        [        5       5      0 4S/SSSSSS.S	S
SSSS.SS0SSSS./S./S./04S.0$ )Nrequiredr7   pysssss.bindingrJ   set$this.disabledTtypetargetvaluefetchz"/pysssss/text-file/{$source.value}z$this.options.valuesz$resultrr   zvalidate-comboF)rr   urlthensourcecallback)rJ   r   r9   r   ss    r   INPUT_TYPESLoadText.INPUT_TYPESg   s     !."23R8"%",$)&6%)&
 %,#G(-*@)2&
 !'(8  ).*:). 
%	%) (& 
 	
r   rY   r   N)	r\   r]   r^   r_   rb   rj   r~   FUNCTIONrc   r   r   r   re   re   b   s/    + + 
 
> Hr   re   c                   P   ^  \ rS rSrSr\S 5       r\S 5       rSrU 4S jr	Sr
U =r$ )SaveText   Tc                     [        S5      $ )Nnan)floatri   s     r   rj   SaveText.IS_CHANGED   s    U|r   c                     S[        [        5       5      0 4SSS04/ SQ0 4SSSS	S
SSSSS./SSSS./SSSS./S./S./S.4SSSS.4S.0$ )Nrm   rQ   defaultzfile.txt)append	overwritenew onlyBOOLEANTznew linenoner   ifz$source.valueeqz"append")leftoprightro   rp   Frq   )rr   	conditiontruefalserx   )r   label_on	label_offrn   )
forceInput	multiline)rJ   r   r   inserttextr{   r|   s    r   r~   SaveText.INPUT_TYPES   s     !."23R8!Iz#:;>C$#&"*$((7&*)3+ * ).*:).& % ).*:)-' && %) (' 0 "$T#JK9
 	
r   
write_textc                   > [        US   US   5      U l        US   S:X  aF  [        R                  R	                  U R                  5      (       a  [        U R                  S-   5      e[        U R                  US   S:X  a  SOS5       nUR                  5       S:g  nU(       a  US	   (       a  UR                  S
5        UR                  US   5        S S S 5        [        TU ](  " S0 UD6$ ! , (       d  f       N= f)NrJ   r   r   r   z+ already exists and 'new only' is selected.za+wr   r   
r   r   )rM   r   r   r   rE   FileExistsErrorr   tellwritesuperrY   )rT   rU   r   	is_append	__class__s       r   r   SaveText.write_text   s    VJ/@	(z)bggnnTYY.G.G!		IIK K$))VH%5%ATsKqAIVH-GGF6N#	 L w *6** LKs   	A
C++
C9r[   )r\   r]   r^   r_   OUTPUT_NODErb   rj   r~   r   r   rc   __classcell__)r   s   @r   r   r      s@    K   
  
D H+ +r   r   )zLoadText|pyssssszSaveText|pysssssu   Load Text 🐍u   Save Text 🐍)r   r   r   serverr   r;   aiohttpr   r   r   r$   r)   r.   instanceroutesgetr@   rM   rO   re   r   NODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSr   r   r   <module>r      s    	     $%	^ !!"=>$ ?$(   "%| %P7+| 7+v !   )( r   