
    HUjH                        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KJr  SS	KJr  SS
KJr  SSKJrJr  SS jrSS jr " S S5      rg)z?CRUD for downloadable format models of simple-upload documents.    )annotationsN)datetimetimezone)Path)Any)Session)settings)DocumentFormatModel)DocumentModel)SIMPLE_UPLOAD_DOC_ORDERSIMPLE_UPLOAD_DOCUMENT_IDSc                    [         R                  " SSU =(       d    SR                  5       5      n[         R                  " SSU5      R                  S5      nU=(       d    SS S $ )Nz[^a-zA-Z0-9._\u00c0-\u024f\s-]_modeloz\s+z._   )resubstrip)namecleaneds     bC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\document_format_models_class.py_safe_filenamer      sR    ff6d>Nh=U=U=WXGffVS'*006Gx#&&    c                 z    [        [        R                  5      R                  5       S-  n U R	                  SSS9  U $ )Ndocument_format_modelsTparentsexist_ok)r   r	   	files_dirresolvemkdir)roots    r   _models_rootr#      s6    ##$,,.1IIDJJtdJ+Kr   c                  h    \ 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r
g	)DocumentFormatModelsClass"   c                    Xl         g Ndb)selfr*   s     r   __init__"DocumentFormatModelsClass.__init__#   s    r   c                  ^ U R                   R                  [        5      R                  [        R                  R                  [        [        5      5      [        R                  R                  S 5      5      R                  5       nU Vs0 s H  n[        UR                  5      U_M     nnU R                   R                  [        5      R                  [        R                  R                  [        [        5      5      5       Vs0 s H  n[        UR                  5      U_M     nn[        [        5       VVs0 s H  u  pgXv_M	     snnm/ n[         H  n	UR!                  U	5      n
U
(       d  M  UR!                  U	5      nUR#                  U	U
R$                  =(       d    SU	 3U
R&                  U
R(                  US LU(       a  UR                  OS U(       a  UR*                  OS U(       a+  UR,                  (       a  UR,                  R/                  5       OS S.5        M     UR1                  U4S jS9  U$ s  snf s  snf s  snnf )Nz
Documento )document_iddocument_namecareer_type_id
section_id	has_modelmodel_idoriginal_filename
updated_atc                T   > TR                  U S   S5      U S   R                  5       4$ )Nr0   i'  )getlower)roworder_indexs    r   <lambda>6DocumentFormatModelsClass.list_items.<locals>.<lambda>J   s,    O 4f=O$**,r   )key)r*   queryr   filteridin_listr   deleted_dateis_allintr
   r/   	enumerater   r8   appenddocumentr1   document_type_idr5   r6   	isoformatsort)r+   docsdby_idmmodelsir   itemsdoc_iddocmodelr;   s               @r   
list_items$DocumentFormatModelsClass.list_items&   s   GGMM-(V  $$T*D%EF**..t4 SU 	 (,,t!QTTAt, WW]]#67>>#//33D9S4TU
 ! 	 
 /88O.PQ.P71tw.PQ&(0F))F#CJJv&ELL#)%(\\%Jz&5J&)&8&8"%"6"6!&d!2,1tDI)@)@tBGEL\L\%"2"2"<"<">bf	 1" 	

 	 	
 A -
 Rs   
 H9 H>:Ic                    U R                   R                  [        5      R                  [        R                  [        U5      :H  5      R                  5       $ r(   )r*   r?   r
   r@   r/   rG   first)r+   r/   s     r   	get_model#DocumentFormatModelsClass.get_modelQ   s:    GGMM-.V'33s;7GGHUW	
r   c           
        [        U5      [        ;  a  SSSS.$ U R                  R                  [        5      R                  [        R                  [        U5      :H  [        R                  R                  S 5      5      R                  5       nU(       d  SSSS.$ U(       d  SSSS.$ U=(       d    SR                  5       nUR                  S	5      (       d  SS
SS.$ [        5       S[        U5       3-  nUR                  5       (       a  [        R                  " USS9  UR!                  SSS9  [#        U5      n	X-  n
U
R%                  U5        ['        U
R)                  [+        [,        R.                  5      R1                  5       5      5      R3                  SS5      n[4        R6                  " [8        R:                  5      R3                  S S9nU R=                  U5      nU(       a)  U=(       d    U	Ul        Xl         XMl!        X]l"        Xl#        O<[I        [        U5      U=(       d    U	UUUUUS9nU R                  RK                  U5        U R                  RM                  5         U R                  RO                  U5        SS[        U5      UR                  UR>                  URF                  (       a  URF                  RQ                  5       OS S.S.$ )Nerrorz.Este documento no admite modelo de solo carga.i  statusmessagehttp_statuszDocumento no encontrado.  u   Archivo vacío. )z.pdfz.docz.docxz-Solo se permiten archivos .pdf, .doc o .docx.rO   Tignore_errorsr   \/)tzinfo)r/   r5   stored_pathcontent_typeuploaded_by
created_atr6   successzModelo guardado.)r/   r4   r5   r6   )ra   rb   data))rG   r   r*   r?   r   r@   rA   rD   rE   r[   r9   endswithr#   existsshutilrmtreer!   r   write_bytesstrrelative_tor   r	   r   r    replacer   nowr   utcr\   r5   rk   rl   rm   r6   r
   addcommitrefreshrL   )r+   r/   filenamerp   rl   user_idrV   r9   folder	safe_nametargetrelry   r:   s                 r   upload DocumentFormatModelsClass.uploadX   sZ    {#==!K"  GGMM-(VM$$K(88-:T:T:X:XY]:^_UW 	
 %2L]`aa%2CTWXXR&&(~~788!J"  Ac+&6%7"88==??MM&5TD1"8,	#4 &$$T(*<*<%=%E%E%GHIQQRVX[\ll8<<(000=nn[)$,$9	C!!O+%O N%,"*"7i)#C GGKK)";/FF%(%:%:<?NNcnn668PT		
 		
r   c                x   UR                   (       d  g [        [        R                  5      R	                  5       UR                   -  R	                  5       n[        [        R                  5      R	                  5       n[        U5      R                  [        U5      5      (       a  UR                  5       (       d  g U$ r(   )rk   r   r	   r   r    rv   
startswithis_file)r+   r:   pathr"   s       r   absolute_path'DocumentFormatModelsClass.absolute_path   s{    X''(002S__DMMOH&&'//14y##CI..dllnnr   c                8   U R                  U5      nU(       d  SSSS.$ [        5       S[        U5       3-  nUR                  5       (       a  [        R
                  " USS9  U R                  R                  U5        U R                  R                  5         SS	S
.$ )Nr_   zNo hay modelo cargado.rd   r`   rO   Trf   ro   zModelo eliminado.)ra   rb   )	r\   r#   rG   rr   rs   rt   r*   deleter|   )r+   r/   r:   r   s       r   r    DocumentFormatModelsClass.delete   s~    nn[)%2J[^__Ac+&6%7"88==??MM&5s#0CDDr   r)   N)r*   r   returnNone)r   zlist[dict[str, Any]])r/   rG   r   zDocumentFormatModel | None)r/   rG   r~   rv   rp   bytesrl   z
str | Noner   z
int | Noner   dict[str, Any])r:   r
   r   zPath | None)r/   rG   r   r   )__name__
__module____qualname____firstlineno__r,   rX   r\   r   r   r   __static_attributes__ r   r   r%   r%   "   sd    )V
G
G
 G
 	G

 !G
 G
 
G
R	Er   r%   )r   rv   r   rv   )r   r   )__doc__
__future__r   r   rs   r   r   pathlibr   typingr   sqlalchemy.ormr   app.backend.core.configr	   ,app.backend.db.models.document_format_modelsr
   app.backend.db.models.pie_corer   )app.backend.utils.simple_upload_documentsr   r   r   r#   r%   r   r   r   <module>r      sC    E " 	  '   " , L 8'QE QEr   