
    sIjy                    
   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 jrSSS jjrSS jrSS jrSS jrSSS jjrSS jrS S jrS!S jrS"S jr          S#S jrg)$zJAlmacenamiento de archivos Agent v2: {FILES_DIR}/agent_v2/{nombre_agente}/    )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._u   Nombre inválido.x   )resubstrip
ValueError)valuecleaneds     TC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\utils\agent_v2_storage.py_safe_segmentr      sZ    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agent_v2Tparentsexist_ok)r&   r'   mkdir)roots    r   agent_v2_rootr0   &   s,    K*$--/DJJtdJ+Kr   c                    [        5       [        U 5      -  R                  5       n[        U5      R	                  [        [        5       5      5      (       d  [        S5      eUR                  SSS9  U$ )NzRuta de agente no permitida.Tr+   )r0   r   r'   str
startswithr   r.   
agent_namefolders     r   agent_folderr7   ,   sY    oj 99BBDFv;!!#mo"677788
LLL-Mr   c                    [        U 5      n[        U5      nU(       a  X#-  R                  5       OUn[        U5      R	                  [        U5      5      (       d  [        S5      eU$ )NRuta no permitida.)r7   r#   r'   r2   r3   r   )r5   relative_pathr6   reltargets        r   resolve_targetr=   4   sT    *%F
m
,C),fl##%&Fv;!!#f+..-..Mr   c                V    [        X5      nUR                  SSS9  SU=(       d    SSS.$ )NTr+   r   r6   )okr   typer=   r.   )r5   r:   r<   s      r   create_folderrB   =   s.    J6F
LLL- 3XFFr   c                   U(       d  [        S5      e[        U5      nU(       d  [        S5      e[        X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   El archivo está vacío.zrelative_path es obligatorio.Tr+   file)r?   namer   r@   
size_bytessaved_at)r   r#   r=   parentr.   write_bytesrF   statst_sizer   nowr   utc	isoformat)r5   r:   datar;   r<   s        r   	save_filerQ   C   s    344
m
,C899J,F
MMt4
tkkm++LL.88: r   c                    [        U 5      nUR                  5       (       d  gSnUR                  S5       H  nUR                  5       (       d  M  US-  nM!     U$ )Nr   *   )r7   existsrglobis_file)r5   r6   totalitems       r   count_filesrZ   V   sM    *%F==??ES!<<>>QJE " Lr   c                `   [        X5      nUR                  5       (       d  UR                  SSS9  [        U5      n/ n[	        UR                  5       S S9 H  nU(       a   U SUR                   3R                  S5      OUR                  nUR                  5       (       aC  [        S UR                  S5       5       5      nUR                  UR                  USUS	.5        M  UR                  UR                  US
UR                  5       R                  S.5        M     UU[        U 5      S.$ )NTr+   c                `    U R                  5       (       + U R                  R                  5       4$ r%   )is_dirrF   lower)ps    r   <lambda>list_entries.<locals>.<lambda>i   s    QXXZ8Xr   )keyr   c              3  R   #    U  H  oR                  5       (       d  M  S v   M     g7f)rT   N)rW   ).0fs     r   	<genexpr>list_entries.<locals>.<genexpr>l   s     G199;QQs   '	'rS   r6   )rF   r   r@   	fileCountrE   )rF   r   r@   	sizeBytes)r   entries
totalFiles)r=   rU   r.   r#   sortediterdirrF   r   r]   sumrV   r   rK   rL   rZ   )r5   r:   currentr;   rj   rY   	entry_rel
file_counts           r   list_entriesrr   a   s   Z7G>>dT2
m
,C$&Gw(.XY7:se1TYYK(..s3			;;==G

3GGJNN II%$!+	 NN II%"!%!4!4	 Z. !*- r   c                   [        U5      nU(       d  [        S5      e[        X5      n[        U 5      n[	        U5      R                  [	        U5      5      (       a  X4: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.$ )Nu)   No se puede eliminar la raíz del agente.r9   z Archivo o carpeta no encontrado.T)r?   r   )r#   r   r=   r7   r2   r3   rU   r]   shutilrmtreeunlink)r5   r:   r;   r<   r6   s        r   delete_entryrw      s    
m
,CDEEJ,F*%Fv;!!#f+..&2B-..==??;<<}}f$$r   c                Z   [        U 5      n[        U5      nX#: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 )Nz6Ya existe una carpeta para el nuevo nombre del agente.Tignore_errors)r7   rU   anyrm   r   rt   ru   rename)old_namenew_name
old_folder
new_folders       r   rename_agent_folderr      s    h'Jh'Js:#5#5#788QRRMM*D9*% r   c                p    [        U 5      nUR                  5       (       a  [        R                  " USS9  g g )NTry   )r7   rU   rt   ru   r4   s     r   delete_agent_folderr      s*    *%F}}fD1 r   c                D    [        U SU 35      nUR                  SSS9  U$ )Nzdocumentos/Tr+   rA   )r5   document_idr6   s      r   document_template_dirr      s*    J+k](CDF
LLL-Mr   c                   U(       d  [        S5      eUR                  5       nUS;  a  [        S5      e[        X5      nSU 3nXV-  R                  5       n[	        U5      R                  [	        [        U 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	.$ )
NrD   >   pdfdocxz'Formato no soportado. Use .docx o .pdf.zformato.r9   r   r   T)r?   filenamerelativePath
formatTyperi   )r   r^   r   r'   r2   r3   r7   rJ   relative_tor&   r   rK   rL   )	r5   r   rP   format_typefmtr6   r   r<   r;   s	            r   save_document_templater      s     344



C
/!BCC":;F#H((*Fv;!!#l:&>"?@@-..
t
f  -
.
6
6tS
AC[[]** r   )r   r2   returnr2   )r   r2   r   r2   )r   r   )r5   r2   r   r   )r   )r5   r2   r:   r2   r   r   )r5   r2   r:   r2   r   dict[str, Any])r5   r2   r:   r2   rP   bytesr   r   )r5   r2   r   int)r}   r2   r~   r2   r   None)r5   r2   r   r   )r5   r2   r   r   r   r   )
r5   r2   r   r   rP   r   r   r2   r   r   )__doc__
__future__r   r   rt   r   r   pathlibr   typingr   app.backend.core.configr   r   r#   r&   r0   r7   r=   rB   rQ   rZ   rr   rw   r   r   r   r   r(   r   r   <module>r      s    P " 	  '   ,	.G&"J%"
&2  	
 r   