
    J5j                    N   S r SSKJr  SSKrSSKJr  SSKJrJrJ	r	J
r
JrJ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/S9rS S jr\R1                  S5      \" \5      4S!S jj5       r\R5                  S5      S\" \5      4       S"S jj5       r\R1                  S5      \" \5      4S!S jj5       r\R1                  S5      \" \5      4S#S jj5       r\R=                  S5      \" \5      4S!S jj5       r\R=                  S5      \" \5      4S#S jj5       r \R1                  S5      \" \5      4S#S jj5       r!\R=                  S5      \" \5      4S$S jj5       r"\R=                  S5      \" \5      4S#S jj5       r#\R=                  S5      \" \5      4S!S jj5       r$g)%zAArchivos por agente en files/agents/{agent_id}/ + metadata en BD.    )annotationsN)	Annotated)	APIRouterDependsFileForm
UploadFilestatus)FileResponseJSONResponse)Session)
AgentClass)get_dbz/agent-fileszAgent Files)prefixtagsc                    [        U XS S.S9$ )Nr
   messagedatastatus_codecontent)r   )r   r   s     PC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\agent_files.py_errorr      s    &DI     z/{agent_id}c                  #    [        U5      R                  U 5      n[        U[        5      (       at  UR	                  S5      S:X  a_  SUR	                  SS5      R                  5       ;   a  [        R                  O[        R                  n[        X2R	                  SS5      5      $ [        [        R                  SSUS	.S
9$ 7f)Nr
   errorno encontrador    Error   zArchivos del agenter   r   )r   
list_files
isinstancedictgetlowerr
   HTTP_404_NOT_FOUNDHTTP_400_BAD_REQUESTr   r   HTTP_200_OKagent_iddbresultcodes       r   r"   r"      s     ^&&x0F&$FJJx$8G$C,;vzz)UW?X?^?^?`,`v((fl  gB  gBdJJy':;;&&+@&Q    C Cz/{agent_id}/uploadc                  #    U(       d  [        [        R                  S5      $ / nU(       aG   [        R                  " U5      n[        U[        5      (       a  U Vs/ s H  n[        U5      PM     nn/ n[        U5       HW  u  pU[        U5      :  a  XH   OS n
U
=(       d    U	R                  nUR                  XR                  5       I S h  vN 45        MY     [        U5      R                  X5      n[        U[         5      (       at  UR#                  S5      S:X  a_  SUR#                  SS5      R%                  5       ;   a  [        R&                  O[        R                  n[        XR#                  SS5      5      $ [)        [        R*                  S	S
US.S9$ s  snf ! [        R                   a    [        [        R                  S5      s $ f = f GN7f)NzNo se enviaron archivosu   Rutas de carpeta inválidasr
   r   r   r   r   r       zArchivos subidos correctamenter   r   )r   r
   r(   jsonloadsr#   liststrJSONDecodeError	enumeratelenfilenameappendreadr   	add_filesr$   r%   r&   r'   r   HTTP_201_CREATED)r+   filesrelative_pathsr,   pathsparseditemuploadsindexuploadrel_pathoriginal_namer-   r.   s                 r   upload_filesrH   %   s     f113LMME	VZZ/F&$''/56vtTv6 /1G"5)#(3u:#55<4 3FOO[[]':;< *
 ^%%h8F&$FJJx$8G$C,;vzz)UW?X?^?^?`,`v((fl  gB  gBdJJy':;;+++KU[\  7## 	V&557TUU	V (;sH   +G/F  F2F  4AGGCGF   .GGGGz/{agent_id}/responsesc                  #    [        U5      R                  U 5      n[        U[        5      (       at  UR	                  S5      S:X  a_  SUR	                  SS5      R                  5       ;   a  [        R                  O[        R                  n[        X2R	                  SS5      5      $ [        [        R                  SSUS	.S
9$ 7f)Nr
   r   r   r   r   r    r!   z Archivos generados por el agenter   r   )r   list_response_filesr#   r$   r%   r&   r
   r'   r(   r   r   r)   r*   s       r   rJ   rJ   I   s     ^//9F&$FJJx$8G$C,;vzz)UW?X?^?^?`,`v((fl  gB  gBdJJy':;;&&+MW]^ r/   z5/{agent_id}/responses/download/{stored_filename:path}c                @  #    UR                  S5      (       a  UOSU 3n[        U5      R                  X5      n[        U[        5      (       a?  UR                  S5      S:X  a*  [        [        R                  UR                  SS5      5      $ [        US   US   S9$ 7f)	N
responses/r
   r   r   Archivo no encontradopathr9   rN   r9   )

startswithr   resolve_response_filer#   r$   r%   r   r
   r'   r   r+   stored_filenamer,   stored_pathr-   s        r   download_response_filerU   U   s     %4%?%?%M%M/U_`o_pSqK^11(HF&$FJJx$8G$Cf//IG^1_``VF^fZ6HIIs   BBc                  #    [        U5      R                  U 5      n[        U[        5      (       at  UR	                  S5      S:X  a_  SUR	                  SS5      R                  5       ;   a  [        R                  O[        R                  n[        X2R	                  SS5      5      $ [        [        R                  SSUS	.S
9$ 7f)Nr
   r   r   r   r   r    r!   zRespuestas generadas eliminadasr   r   )r   delete_all_response_filesr#   r$   r%   r&   r
   r'   r(   r   r   r)   r*   s       r   rW   rW   ^   s     ^55h?F&$FJJx$8G$C,;vzz)UW?X?^?^?`,`v((fl  gB  gBdJJy':;;&&+LV\] r/   z,/{agent_id}/responses/{stored_filename:path}c                X  #    UR                  S5      (       a  UOSU 3n[        U5      R                  X5      n[        U[        5      (       a?  UR                  S5      S:X  a*  [        [        R                  UR                  SS5      5      $ [        [        R                  SSUS.S	9$ 7f)
NrL   r
   r   r   rM   r!   zArchivo de respuesta eliminador   r   )rP   r   delete_response_filer#   r$   r%   r   r
   r'   r   r)   rR   s        r   rY   rY   j   s     %4%?%?%M%M/U_`o_pSqK^00GF&$FJJx$8G$Cf//IG^1_``&&+KU[\ s   B(B*z+/{agent_id}/download/{stored_filename:path}c                  #    [        U5      R                  X5      n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        US   US   S9$ 7f)Nr
   r   r   rM   rN   r9   rO   )	r   resolve_filer#   r$   r%   r   r
   r'   r   r+   rS   r,   r-   s       r   download_filer]   v   sk     ^((CF&$FJJx$8G$Cf//IG^1_``VF^fZ6HIIs   A?Bz&/{agent_id}/folders/{folder_path:path}c                  #    [        U5      R                  X5      n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        [        R                  SSUS.S9$ 7f)	Nr
   r   r   zCarpeta no encontradar!   zCarpeta eliminadar   r   )
r   delete_folderr#   r$   r%   r   r
   r'   r   r)   )r+   folder_pathr,   r-   s       r   r_   r_   ~   sv     ^))(@F&$FJJx$8G$Cf//IG^1_``&&+>O    BBz"/{agent_id}/{stored_filename:path}c                  #    [        U5      R                  X5      n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        [        R                  SSUS.S9$ 7f)	Nr
   r   r   rM   r!   zArchivo eliminador   r   )
r   delete_filer#   r$   r%   r   r
   r'   r   r)   r\   s       r   rc   rc      sv     ^''BF&$FJJx$8G$Cf//IG^1_``&&+>O ra   c                  #    [        U5      R                  U 5      n[        U[        5      (       a?  UR	                  S5      S:X  a*  [        [        R                  UR	                  SS5      5      $ [        [        R                  SSS S.S9$ 7f)	Nr
   r   r   zAgente no encontrador!   zAgente y archivos eliminadosr   r   )
r   deleter#   r$   r%   r   r
   r'   r   r)   )r+   r,   r-   s      r   delete_agent_folderrf      sw     ^""8,F&$FJJx$8G$Cf//IG]1^__&&+ISWX ra   )r   intr   r5   returnr   )r+   r5   r,   r   )r+   r5   r>   z#Annotated[list[UploadFile], File()]r?   zAnnotated[str | None, Form()]r,   r   )r+   r5   rS   r5   r,   r   )r+   r5   r`   r5   r,   r   )%__doc__
__future__r   r2   typingr   fastapir   r   r   r   r	   r
   fastapi.responsesr   r   sqlalchemy.ormr   app.backend.classes.agent_classr   app.backend.db.databaser   agent_filesr   r%   r"   postrH   rJ   rU   re   rW   rY   r]   r_   rc   rf    r   r   <module>rt      s   G "   F F 8 " 6 *~]OD 29&/    &' 59&/	  .  2  		  ( F ();B6?  * HIT[\bTc J JJ +,AH  - BCRYZ`Ra  D >?KRSY? J @J <=GNv  > 89IPQW  : M";B6?  #r   