
    g6j                        d Z ddlmZ ddlZddlmZmZ ddlmZ ddlm	Z	 ddZ
ddZdd	Zdd
ZddZddZddZddZddZy)zNAlmacenamiento de informes del Workspace Agent: {FILES_DIR}/agents/{agent_id}/    )annotationsN)datetimetimezone)Path)settingsc                r    t        j                  dd| xs dj                               }|st        d      |S )Nz[^a-zA-Z0-9._-]_ u6   Identificador de agente o nombre de archivo inválido.)resubstrip
ValueError)valuecleaneds     R/var/www/pie360backend.cl/public_html/app/backend/utils/agent_workspace_storage.py_safe_segmentr      s6    ff'u{.A.A.CDGQRRN    c                 P    t        t        j                        j                         S N)r   r   	files_dirresolve r   r   r   r      s    ""#++--r   c                 F    t               dz  } | j                  dd       | S )NagentsTparentsexist_ok)r   mkdir)roots    r   agents_rootr       s#    ;!DJJtdJ+Kr   c                 4    t        t        j                        S r   )r   r   workspace_agent_idr   r   r   default_agent_idr#      s    4455r   c                d    | xs dj                         xs t        j                  }t        |      S )Nr
   )r   r   r"   r   )agent_idr   s     r   resolve_agent_idr&   !   s*    ^""$C(C(CEr   c                    t               t        |       z  j                         }t        |      j	                  t        t                           st        d      |j                  dd       |S )NzRuta de agente no permitida.Tr   )r    r&   r   str
startswithr   r   )r%   folders     r   agent_folderr+   &   sW    m.x88AACFv;!!#km"45788
LLL-Mr   c                    t        |       }|t        |      z  j                         }t        |      j	                  t        |            st        d      |S )NzRuta de archivo no permitida.)r+   r   r   r(   r)   r   )r%   filenamer*   paths       r   target_filer/   .   sK    (#F]8,,557Dt9F,899Kr   c           
        d||t        |       t        | j                  t                           j                  dd      | j	                         j
                  t        j                  t        j                        j                         dS )NT\/)okr%   r-   r.   relative_path
size_bytessaved_at)r(   relative_tor   replacestatst_sizer   nowr   utc	isoformat)r.   r%   r-   s      r   file_resultr>   6   sf    D	T--ik:;CCD#Niik))LL.88: r   c                   t        |       }|j                         sg S t        |j                               D cg c]C  }|j	                         r1|j
                  t        |      |j                         j                  dE c}S c c}w )N)namer.   r5   )	r+   existssortediterdiris_filer@   r(   r9   r:   )r%   r*   items      r   list_agent_filesrF   B   sr    (#F==?	 6>>+, <<> III))+--	
  s   AB)r   r(   returnr(   )rG   r   )rG   r(   )r%   z
str | NonerG   r(   )r%   r(   rG   r   )r%   r(   r-   r(   rG   r   )r.   r   r%   r(   r-   r(   rG   dict)r%   r(   rG   z
list[dict])__doc__
__future__r   r   r   r   pathlibr   app.backend.core.configr   r   r   r    r#   r&   r+   r/   r>   rF   r   r   r   <module>rM      sD    T " 	 '  ,.6 
	r   