
    H{jF                       S r SSKJr  SSKrSSKrSSKJrJr  SSKJr  SSK	J
r
  SSKJr  SS jrSS	 jrSS
 jrSS jrSSS jjr S       SS jjr S       SS jjr S         S S jjrS!S jrSS"S jjr S       SS jjr S       SS jjr S       S#S jjrSS$S jjr S       S%S jjr S           S&S jjrg)'zDAgents file storage: {FILES_DIR}/agents/c{customer_id}/{agent_name}/    )annotationsN)datetimetimezone)Path)Any)settingsc                    [         R                  " SSU =(       d    SR                  5       5      n[         R                  " SSU5      R                  S5      nU(       d  [        S5      eUS S $ )Nz[^a-zA-Z0-9._\u00c0-\u024f\s-]_ z\s+z._zInvalid name.x   )resubstrip
ValueError)valuecleaneds     RC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agents_storage.py_safe_segmentr      sY    ff6ekr=P=P=RSGffVS'*006G))4C=    c                *   U =(       d    SR                  SS5      R                  5       R                  S5      nU(       d  g/ nUR                  S5       H,  nU(       a  US;   a  M  UR                  [	        U5      5        M.     SR                  U5      $ )Nr   \/>   ...)replacer   splitappendr   join)pathrawpartsparts       r   _safe_relative_pathr#      sw    :2

tS
)
/
/
1
7
7
<CE		#t{*]4()  88E?r   c                 P    [        [        R                  5      R                  5       $ N)r   r   	files_dirresolve r   r   r&   r&   "   s    ""#++--r   c                 \    [        5       S-  R                  5       n U R                  SSS9  U $ )NagentsTparentsexist_ok)r&   r'   mkdir)roots    r   agents_rootr0   &   s,    K("++-DJJtdJ+Kr   c                   [        5       n[        U 5      nU(       au  US[        U5       3-  R                  5       nUR	                  SSS9  XC-  R                  5       n[        U5      R                  [        U5      5      (       d  [        S5      eOEX#-  R                  5       n[        U5      R                  [        U5      5      (       d  [        S5      eUR	                  SSS9  U$ )NcTr+   zAgent path not allowed.)r0   r   intr'   r.   str
startswithr   )
agent_namecustomer_idr/   namebasefolders         r   agent_folderr;   ,   s    =D$D3{+,--668

4$
/+&&(6{%%c$i00677 1 +&&(6{%%c$i00677
LLL-Mr   c                    [        X5      n[        U5      nU(       a  X4-  R                  5       OUn[        U5      R	                  [        U5      5      (       d  [        S5      eU$ )NPath not allowed.)r;   r#   r'   r4   r5   r   )r6   relative_pathr7   r:   reltargets         r   resolve_targetrA   =   sV     *2F
m
,C),fl##%&Fv;!!#f+..,--Mr   c                X    [        XU5      nUR                  SSS9  SU=(       d    SSS.$ )NTr+   r   r:   )okr   typerA   r.   )r6   r>   r7   r@   s       r   create_folderrF   H   s2     J{CF
LLL- 3XFFr   c                   U(       d  [        S5      e[        U5      nU(       d  [        S5      e[        XU5      nUR                  R	                  SSS9  UR                  U5        SUR                  USUR                  5       R                  [        R                  " [        R                  5      R                  5       S.$ )NFile is empty.zrelative_path is required.Tr+   file)rC   r8   r   rD   
size_bytessaved_at)r   r#   rA   parentr.   write_bytesr8   statst_sizer   nowr   utc	isoformat)r6   r>   datar7   r?   r@   s         r   	save_filerT   P   s     )**
m
,C566J[9F
MMt4
tkkm++LL.88: r   c                <    U S;   =(       d    U R                  S5      $ )z@Carpetas internas no visibles en Archivos (derivados RAG, etc.).>   _derivedr   )r5   )r8   s    r   _is_hidden_entryrW   h   s    <74??3#77r   c                @   [        X5      nUR                  5       (       d  gSnUR                  S5       HT  nUR                  5       (       d  M   UR	                  U5      R
                  n[        S U 5       5      (       a  MO  US-  nMV     U$ ! [         a     Mg  f = f)Nr   *c              3  8   #    U  H  n[        U5      v   M     g 7fr%   rW   .0ps     r   	<genexpr>count_files.<locals>.<genexpr>y   s     6Iq""I      )r;   existsrglobis_filerelative_tor!   r   any)r6   r7   r:   totalitem	rel_partss         r   count_filesrk   m   s    *2F==??ES!||~~	((066I 6I666
 " L  		s   B
BBc                  ^ [        XU5      nUR                  5       (       d  UR                  SSS9  [        U5      n/ n[	        UR                  5       S S9 H  m[        TR                  5      (       a  M  U(       a   U STR                   3R                  S5      OTR                  nTR                  5       (       aF  [        U4S jTR                  S5       5       5      nUR                  TR                  USUS	.5        M  UR                  TR                  US
TR                  5       R                  S.5        M     UU[        X5      S.$ )NTr+   c                `    U R                  5       (       + U R                  R                  5       4$ r%   )is_dirr8   lower)r^   s    r   <lambda>list_entries.<locals>.<lambda>   s    QXXZ8Xr   )keyr   c              3     >#    U  HP  nUR                  5       (       d  M  [        S  UR                  T5      R                   5       5      (       a  ML  Sv   MR     g7f)c              3  8   #    U  H  n[        U5      v   M     g 7fr%   r[   r\   s     r   r_   )list_entries.<locals>.<genexpr>.<genexpr>   s     S9RA,Q//9Rra   rb   N)re   rg   rf   r!   )r]   fri   s     r   r_   list_entries.<locals>.<genexpr>   sG      (A99;  St9L9R9RSS (s   A.A	ArY   r:   )r8   r   rD   	fileCountrI   )r8   r   rD   	sizeBytes)r   entries
totalFiles)rA   rc   r.   r#   sortediterdirrW   r8   r   rn   sumrd   r   rN   rO   rk   )	r6   r>   r7   currentr?   rz   	entry_rel
file_countri   s	           @r   list_entriesr      s&    ZDG>>dT2
m
,C$&Gw(.XYDII&&7:se1TYYK(..s3			;;== C J NN II%$!+	 NN II%"!%!4!4	) Z< !*: r   c                   [        U5      nU(       d  [        S5      e[        XU5      n[        X5      n[	        U5      R                  [	        U5      5      (       a  XE:X  a  [        S5      eUR                  5       (       d  [        S5      eUR                  5       (       a  [        R                  " U5        OUR                  5         SUS.$ )NzCannot delete the agent root.r=   zFile or folder not found.T)rC   r   )r#   r   rA   r;   r4   r5   rc   rn   shutilrmtreeunlink)r6   r>   r7   r?   r@   r:   s         r   delete_entryr      s     m
,C899J[9F*2Fv;!!#f+..&2B,--==??455}}f$$r   c                Z   [        X5      n[        X5      nX4:X  a  g UR                  5       (       a)  [        UR                  5       5      (       a  [	        S5      eUR                  5       (       a<  UR                  5       (       a  [
        R                  " USS9  UR                  U5        g g )Nz/A folder already exists for the new agent name.Tignore_errors)r;   rc   rg   r}   r   r   r   rename)old_namenew_namer7   
old_folder
new_folders        r   rename_agent_folderr      s     h4Jh4Js:#5#5#788JKKMM*D9*% r   c                p    [        X5      nUR                  5       (       a  [        R                  " USS9  g g )NTr   )r;   rc   r   r   )r6   r7   r:   s      r   delete_agent_folderr      s*    *2F}}fD1 r   c                F    [        U SU 3U5      nUR                  SSS9  U$ )Nzdocumentos/Tr+   rE   )r6   document_idr7   r:   s       r   document_template_dirr      s.     J+k](C[QF
LLL-Mr   c                   U(       d  [        S5      eUR                  5       nUS;  a  [        S5      e[        XU5      nSU 3nXg-  R                  5       n[	        U5      R                  [	        [        X5      5      5      (       d  [        S5      eUR                  U5        [	        UR                  [        5       5      5      R                  SS5      n	SUU	UUR                  5       R                  S	.$ )
NrH   >   pdfdocxz&Unsupported format. Use .docx or .pdf.zformato.r=   r   r   T)rC   filenamerelativePath
formatTypery   )r   ro   r   r'   r4   r5   r;   rM   rf   r&   r   rN   rO   )
r6   r   rS   format_typer7   fmtr:   r   r@   r?   s
             r   save_document_templater      s     )**



C
/!ABB":KHF#H((*Fv;!!#l:&K"LMM,--
t
f  -
.
6
6tS
AC[[]** r   )r   r4   returnr4   )r   r4   r   r4   )r   r   r%   )r6   r4   r7   
int | Noner   r   )r   N)r6   r4   r>   r4   r7   r   r   r   )r6   r4   r>   r4   r7   r   r   dict[str, Any])
r6   r4   r>   r4   rS   bytesr7   r   r   r   )r8   r4   r   bool)r6   r4   r7   r   r   r3   )r   r4   r   r4   r7   r   r   None)r6   r4   r7   r   r   r   )r6   r4   r   r3   r7   r   r   r   )r6   r4   r   r3   rS   r   r   r4   r7   r   r   r   )__doc__
__future__r   r   r   r   r   pathlibr   typingr   app.backend.core.configr   r   r#   r&   r0   r;   rA   rF   rT   rW   rk   r   r   r   r   r   r   r(   r   r   <module>r      s   J " 	  '   ,	.$ IM$';E	 DHGG$'G6@GG #	  	
 08
& IM++$'+;E++^ DH%%$'%6@%%( =A&& &/9&	&2 BF"%4>	 #  	
  r   