
    sIj95                        S r SSKJ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KJr  SS	KJr  SS
KJr  SSKJrJrJr  SSSSS.rSS jrSS jrSS jr " S S5      rg)z0CRUD de agentes configurables (PIE360 Agent v2).    )annotationsN)datetimetimezone)Any)Session)DocumentsClass)AgentV2Model)AgentV2DocumentTemplateModel)agent_v2_storage)fields_from_jsonfields_to_jsoninspect_template_fieldsTransversalesu   EvaluaciónApoyoOtros)            c                H   [        UR                  5      (       a  gUR                  (       d  g[        R                  " 5       UR                  -  R                  5       nUR                  5       (       d  g [        X!R                  5      nUR                  S5      =(       d    / nU(       d  g[        U5      Ul        [        R                  " [        R                  5      R!                  SS9Ul        U R%                  5         U R'                  U5        g! [         a     gf = f)zNRe-inspecciona plantillas guardadas sin campos (p. ej. solo content controls).Nfieldstzinfo)r   detected_fieldstemplate_pathstorage	files_dirresolveis_filer   format_type
ValueErrorgetr   r   nowr   utcreplace
updated_atcommitrefresh)dbrowtemplate_abs
inspectionr   s        TC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\agent_v2_class.py_maybe_refresh_template_fieldsr.      s    ++,,%%'#*;*;;DDFL!!,\??K
 ^^H%+F(0C\\(,,/77t7DCNIIKJJsO  s   5D 
D! D!c           	         [        U R                  5      nU R                  U R                  U R                  U R
                  U R                  U[        U5      S.$ )N)id
documentIddocumentName
formatTypetemplatePathr   
fieldCount)r   r   r0   document_iddocument_namer    r   len)r*   r   s     r-   _serialize_templater9   4   sM    c112Fffoo))oo))&k     c                   U R                   =(       d    U R                  nUR                  [        5      R	                  [        R
                  U R                  :H  5      R                  5       nU R                  U R                  U R                  U(       a  UR                  5       OS [        R                  " U R                  5      US.$ )N)r0   nameroleInstructions	updatedAt	fileCountdocumentTemplateCount)r&   
created_atqueryr
   filteragent_idr0   countr<   role_instructions	isoformatr   count_files)agentr)   updated	templatess       r-   
_serializerL   A   s    2%"2"2G
-.	,55A	B	  hh

!33,3W&&(((4!* r:   c                      \ rS rSrSS jrSS jrSS jrSS jrSS 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S jjr      SS jrSS jrSrg)AgentV2ClassR   c                    Xl         g Nr)   )selfr)   s     r-   __init__AgentV2Class.__init__S   s    r:   c                    U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       $ rQ   )r)   rB   r	   rC   r0   first)rS   rD   s     r-   
_get_agentAgentV2Class._get_agentV   s1    GGMM,'VLOOx/0UW	
r:   c                   U R                   R                  [        5      R                  [        R                  R                  5       5      R                  5       nSU Vs/ s H  n[        X R                   5      PM     snS.$ s  snf )Nsuccessstatusdata)r)   rB   r	   order_byr&   descallrL   )rS   rowsr*   s      r-   list_agentsAgentV2Class.list_agents]   sb    GGMM,'Xl--2245SU 	
 $RV-WRV3jgg.FRV-WXX-Ws   Bc                n    U R                  U5      nU(       d  SSSS.$ S[        X R                  5      S.$ NerrorAgente no encontrado.  r]   messagehttp_statusr[   r\   )rX   rL   r)   rS   rD   rI   s      r-   	get_agentAgentV2Class.get_agente   s6    )%2IZ]^^#Zww-GHHr:   c                   U R                  U5      nU(       d  SSSS.$ UR                  5       nU(       d  SSSS.$ U R                  R                  [        5      R                  [        R                  U:H  [        R                  U:g  5      R                  5       nU(       a  SSSS.$ UR                  nXTl        UR                  5       Ul	        [        R                  " [        R                  5      R                  S S	9Ul        U R                  R!                  5         U R                  R#                  U5        Xu:w  a   [$        R&                  " Xu5        S
S[+        X@R                  5      S.$ ! [(         a     N%f = f)Nrg   rh   ri   rj   El nombre es obligatorio.  #Ya existe un agente con ese nombre.  r   r[   zAgente guardado.r]   rk   r^   )rX   stripr)   rB   r	   rC   r<   r0   rW   rF   r   r#   r   r$   r%   r&   r'   r(   r   rename_agent_folderr!   rL   )rS   rD   r<   rF   rI   
clean_name	duplicateold_names           r-   update_agentAgentV2Class.update_agentk   s@   )%2IZ]^^ZZ\
%2M^abb GGMM,'VL%%3\__5PQUW 	
 !@"  ::
"3"9"9";#<<5==T=J!++HA $0BJW\^e^eLfgg  s    E/ /
E<;E<c                   UR                  5       nU(       d  SSSS.$ U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5       nU(       a  SSSS.$ [        R                  " [        R                  5      R                  S S9n[        [        R                  " 5       R                  UUR                  5       UUS9nU R                  R                  U5        U R                  R!                  5         U R                  R#                  U5        [$        R&                  " UR
                  5        S	S
[)        X`R                  5      S.$ )Nrg   rq   rr   rj   rs   rt   r   )r0   r<   rF   rA   r&   r[   zAgente creado.ru   )rv   r)   rB   r	   rC   r<   rW   r   r#   r   r$   r%   uuiduuid4hexaddr'   r(   r   agent_folderrL   )rS   r<   rF   rx   existingr#   rI   s          r-   create_agentAgentV2Class.create_agent   s   ZZ\
%2M^abb GGMM,'VL%%34UW 	
 !@"  ll8<<(000=zz|/557
 	EUZZ(#0@*UZ\c\cJdeer:   c                   [        U R                  5      n/ n[        5       n[        R	                  5        GH  u  pEUR                  US 5      n[        U[        5      (       a  UR                  S5      S:X  a  MD  / nU=(       d    /  H  n[        US   5      n	X;   a  M  UR                  U	5        UR                  U	UR                  S5      =(       d    SUR                  S5      =(       d    U[        R                  UR                  S5      =(       d    UU5      UR                  S5      S.5        M     U(       d  GM
  UR                  XEUS	.5        GM!     S
US.$ )Nr]   rg   r0   document document_type_idcareer_type_id)r0   r<   	sectionIdsectionLabelcareerTypeId)r   r   	documentsr[   r\   )r   r)   setSECTION_LABELSitemsget_all
isinstancedictr"   intr   append)
rS   
docs_classsectionsseen
section_idlabelresultr   r*   doc_ids
             r-   list_catalog_documents#AgentV2Class.list_catalog_documents   s%   #DGG,
)+!/!5!5!7J''
D9F&$''FJJx,@G,KE||SY> $ #
 3 9r%(WW-?%@%NJ(6(:(:377CU;V;dZdfk(l(+0@(A $ uj^c de) "8* $X66r:   c                   U R                  U5      nU(       d  SSSS.$ U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU H  n[        U R                  U5        M     SU Vs/ s H  n[        U5      PM     snS.$ s  snf rf   )rX   r)   rB   r
   rC   rD   r_   r7   ascra   r.   r9   )rS   rD   rI   rb   r*   s        r-   list_document_templates$AgentV2Class.list_document_templates   s    )%2IZ]^^GGMM67V099XEFX2@@DDFGSU	 	 C*477C8 #RV-WRV3.A#.FRV-WXX-Ws   ;Cc                (   U R                  U5      nU(       d  SSSS.$ U=(       d    SR                  5       nUR                  S5      (       a  SnOUR                  S5      (       a  S	nOSS
SS.$  [        R                  " UR
                  X$U5      n	[        R                  " 5       U	S   -  R                  5       n
[        X5      n[        R                  " [        R                  5      R                  S S9nU R                   R#                  [$        5      R'                  [$        R(                  U:H  [$        R*                  U:H  5      R-                  5       nU(       a_  UR/                  5       =(       d    UR0                  Ul        Xl        U	S   Ul        [7        UR9                  S/ 5      5      Ul        Xl        Oa[%        UUUR/                  5       =(       d    SU 3UU	S   [7        UR9                  S/ 5      5      UUS9nU R                   R?                  U5        Xl        U R                   RA                  5         U R                   RC                  U5        [E        U5      nXS'   SSUS.$ ! [         a  nS[        U5      SS.s S nA$ S nAff = f)Nrg   rh   ri   rj   r   z.docxdocxz.pdfpdfz)Solo se permiten plantillas .docx o .pdf.rr   relativePathr   r   z
Documento )rD   r6   r7   r    r   r   rA   r&   r,   r[   zPlantilla guardada.ru   )#rX   lowerendswithr   save_document_templater<   r   r   r   r!   strr   r#   r   r$   r%   r)   rB   r
   rC   rD   r6   rW   rv   r7   r    r   r   r"   r   r&   r   r'   r(   r9   )rS   rD   r6   r7   r^   filenamerI   r   r    savedabsoluter,   excr#   r*   payloads                   r-   r   #AgentV2Class.save_document_template   s<    )%2IZ]^^R&&(>>'"" K^^F##K "F" 	P225::{R]^E))+eN.CCLLNH0GJ ll8<<(000=GGMM67V,55A,88KG UW 	  - 3 3 5 J9J9JC)O %n 5C"0"1M"NC N.!'+113QK=7Q'#N3 .z~~h/K L	C GGKK%c* *#0EwWWI  	P%#c(3OO	Ps   1AI. .
J8JJJc                   U R                  U5      nU(       d  SSSS.$ U R                  R                  [        5      R	                  [        R
                  U:H  5      R                  5         [        R                  " UR                  5        U R                  R                  U5        U R                  R                  5         SSS.$ )Nrg   rh   ri   rj   r[   zAgente eliminado.r]   rk   )rX   r)   rB   r
   rC   rD   deleter   delete_agent_folderr<   r'   rm   s      r-   delete_agentAgentV2Class.delete_agent  s    )%2IZ]^^23::(11X=	

&(##EJJ/u#0CDDr:   c                    U R                  U5      nU(       d  SSSS.$  [        R                  " UR                  U5      nSUS.$ ! [         a  nS[        U5      SS.s S nA$ S nAff = f)Nrg   rh   ri   rj   rr   r[   r\   )rX   r   list_entriesr<   r!   r   )rS   rD   pathrI   r^   r   s         r-   
list_filesAgentV2Class.list_files%  sp    )%2IZ]^^	P''

D9D $T22  	P%#c(3OO	Ps   !A 
A)A$A)$A)c                :   U R                  U5      nU(       d  SSSS.$ U(       a  U SU 3R                  S5      OUR                  5       n [        R                  " UR                  U5        SSUS	S
.S.$ ! [
         a  nS[        U5      SS.s S nA$ S nAff = f)Nrg   rh   ri   rj   /rr   r[   zCarpeta creada.folder)r   typeru   )rX   rv   r   create_folderr<   r!   r   )rS   rD   folder_nameparent_pathrI   relr   s          r-   r   AgentV2Class.create_folder/  s    )%2IZ]^^;FQ{m,2237KL]L]L_	P!!%**c2 $0ATWaiKjkk  	P%#c(3OO	Ps   !A7 7
BBBBc                &   U R                  U5      nU(       d  SSSS.$ U(       d  SSSS.$ / n U H5  u  pVUR                  [        R                  " UR                  XV5      5        M7     [        R                  " [        R                  5      R                  S S9Ul        U R                  R                  5         S[        U5       S	3U[        R                   " UR                  5      S
.S.$ ! [
         a  nS[        U5      SS.s S nA$ S nAff = f)Nrg   rh   ri   rj   zNo hay archivos para subir.rr   r   r[   z archivo(s) subido(s).)uploaded
totalFilesru   )rX   r   r   	save_filer<   r!   r   r   r#   r   r$   r%   r&   r)   r'   r8   rH   )rS   rD   filesrI   r   relative_pathr^   r   s           r-   upload_filesAgentV2Class.upload_files:  s    
 )%2IZ]^^%2O`cdd&(	P',#W..uzz=OP (-
 $<<5==T=Je*%;<!&g6I6I%**6UV
 	
  	P%#c(3OO	Ps   ;C- -
D7DDDc                x   U R                  U5      nU(       d  SSSS.$  [        R                  " UR                  U5        [        R                  " [        R                  5      R                  S S9Ul        U R                  R                  5         SSS	.$ ! [         a  nS[        U5      SS.s S nA$ S nAff = f)
Nrg   rh   ri   rj   rr   r   r[   z
Eliminado.r   )rX   r   delete_entryr<   r!   r   r   r#   r   r$   r%   r&   r)   r'   )rS   rD   r   rI   r   s        r-   delete_fileAgentV2Class.delete_fileT  s    )%2IZ]^^	P  T2 $<<5==T=J#==	  	P%#c(3OO	Ps   !B 
B9 B4.B94B9rR   N)r)   r   returnNone)rD   r   r   zAgentV2Model | None)r   dict[str, Any])rD   r   r   r   )rD   r   r<   r   rF   r   r   r   )r<   r   rF   r   r   r   )rD   r   r6   r   r7   r   r^   bytesr   r   r   r   )r   )rD   r   r   r   r   r   )rD   r   r   r   r   r   r   r   )rD   r   r   zlist[tuple[str, bytes]]r   r   )__name__
__module____qualname____firstlineno__rT   rX   rc   rn   r{   r   r   r   r   r   r   r   r   r   __static_attributes__ r:   r-   rN   rN   R   s    
YI"hHf>76Y@X@X @X 	@X
 @X @X 
@XD
E3	l

 '
 
	
4
>r:   rN   )r)   r   r*   r
   r   r   )r*   r
   r   r   )rI   r	   r)   r   r   r   )__doc__
__future__r   r~   r   r   typingr   sqlalchemy.ormr   #app.backend.classes.documents_classr   app.backend.db.models.agent_v2r	   (app.backend.db.models.agent_v2_documentsr
   app.backend.utilsr   r   -app.backend.utils.agent_v2_template_inspectorr   r   r   r   r.   r9   rL   rN   r   r:   r-   <module>r      s]    6 "  '  " > 7 Q 9  	,
"L> L>r:   