
    O-h;              
       d   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 ej                  j                  ej                  j                  e            Zej                  j                  e      Zej                  j!                  edd      Z e	e       deded	ed
edef
dZd ZdefdZd Zy)    N)get_connection)
UploadFile)load_dotenvconfiguracionesz.envidfile	file_name	file_typevistac                 d  () |r|r|r|sdddS g d}||vrdddS 	 |j                   j                  d       |j                   j                         }|sdddS 	 t	        |      }|j                         j                         j                  d	d
      j                  dd
      }	|	sdddS t        j                  d      }
t        j                  d      }t        j                  d      }t        j                  d      }d}	 t        j                  d      xs d}t        j                  dd      )t        j                  d      xs d (t        |j                               }|st        d)rdnd d) d       |
sdddS |sdddS |sdddS |s(t        j                  j                  )      s	dd) d dS |j                  d!       d!|	 d!}| | }t        d"|        t        d#|        t        d$|
 d%| d&       	 t        j!                  |
|fd'(      5  	 d d d        t        d,       d }d }	 t        d-|
 d%| d.| d/|rd0nd1        t#        j$                         }|j'                  t#        j(                                |r|j+                  |
|||ddd2d2d23	       nvd }d }()fd4()fd5()fd6()fd7fD ]  }	  |       } n |2dd8) d9| d|r	 |j-                          |r	 |j-                          S S |j+                  |
|||ddd2d2d2:	       |j/                         }|r|j1                  d;       |j3                         }t        d<       |j                  d!      }|j5                  d!      }d}|D ]  }|s| d!| }	 |j7                  |         	 |j7                  |       |j=                  |       t        d>|        t        d?| d&       |j?                  |d@      5 }|jA                  |       d d d        t        dA|        	 |r	 |j-                          |r	 |j-                          	 tM               }!|!sddGdS |!jO                         }"t        j                  dH      }#|#sddIdS |#j                  d!      }#|# dJ|	 d!| }$dK}%|"jQ                  |%||$|| f       |!jS                          |"j-                          |!j-                          t        dL|$ d| dM       |jU                  dO      }&|&rdPndQ}'dR|' dS| ||||	dJ|	 d!| dTdUS # t        $ r}dddcY d }~S d }~ww xY w# 1 sw Y    xY w# t        $ r}dd)| d*|
 d+| dcY d }~S d }~ww xY w# t        $ r}|}Y d }~d }~ww xY w# t        $ r Y w xY w# t        $ r Y S w xY w# t8        $ r# t        d=|        |j;                  |       Y Qw xY w# t8        $ r Y w xY w# 1 sw Y   xY w# t"        jB                  $ rX}ddB| dcY d }~|r!	 |j-                          n# t        $ r Y nw xY w|r!	 |j-                          S # t        $ r Y S w xY wS d }~wt"        jD                  $ rX}ddC| dcY d }~|r!	 |j-                          n# t        $ r Y nw xY w|r!	 |j-                          S # t        $ r Y S w xY wS d }~wt        jF                  $ rX} ddD|  dcY d } ~ |r!	 |j-                          n# t        $ r Y nw xY w|r!	 |j-                          S # t        $ r Y S w xY wS d } ~ wt        $ rn}ddE| dFtI        |      jJ                   dcY d }~|r!	 |j-                          n# t        $ r Y nw xY w|r!	 |j-                          S # t        $ r Y S w xY wS d }~ww xY w# t        $ r Y w xY w# t        $ r Y w xY w# |r!	 |j-                          n# t        $ r Y nw xY w|r!	 |j-                          w # t        $ r Y w w xY ww xY w# t        $ r}ddN| dcY d }~S d }~ww xY w)VNFz0Faltan datos necesarios para procesar la imagen.successmessage)z
image/jpegz	image/pngz	image/jpgz	image/gifzimage/svg+xmlz	video/mp4z	video/movz Formato de archivo no permitido.r   u*   El archivo está vacío o no se pudo leer.zError al leer el archivo. _-u%   La vista proporcionada no es válida.
ftp_serverftp_user_nameftp_user_passftp_remote_folder   FTP_PASS_ALT ftp_key_pathz/home/ubuntu/admin-access.pemftp_key_passz   - Key Path: u   ✅ OKu
   ❌ VACÍOz ()u5   Variable de entorno 'ftp_server' no está configuradau8   Variable de entorno 'ftp_user_name' no está configuradau<   Variable de entorno 'ftp_remote_folder' no está configuradau%   No se encontró la llave privada en ''/u   🎯 [DEBUG] Remote folder: u   🎯 [DEBUG] Remote file path: u,   🌐 [CHECK] Verificando conectividad TCP a :z ...   )timeoutz"No hay conectividad TCP al puerto z de z: u   🌐 [CHECK] OKu   🔐 [SFTP] Conectando a z como z con PASSWORDKEY   )portusernamepasswordlook_for_keysallow_agentr!   banner_timeoutauth_timeoutc                  F    t         j                  j                         S N)r'   )paramikoRSAKeyfrom_private_key_filekey_passkey_paths   V/var/www/dev.api.imparables.com.co/api_imparables/crm/administracion/landing_design.py<lambda>z$updateLandingImage.<locals>.<lambda>       ==hQY=Z     c                  F    t         j                  j                         S r-   )r.   
Ed25519Keyr0   r1   s   r4   r5   z$updateLandingImage.<locals>.<lambda>   s    ++AA(U]A^ r7   c                  F    t         j                  j                         S r-   )r.   ECDSAKeyr0   r1   s   r4   r5   z$updateLandingImage.<locals>.<lambda>   s    ))??S[?\ r7   c                  F    t         j                  j                         S r-   )r.   DSSKeyr0   r1   s   r4   r5   z$updateLandingImage.<locals>.<lambda>   r6   r7   z$No se pudo cargar la llave privada 'z': )r%   r&   pkeyr(   r)   r!   r*   r+      u   ✅ [SFTP] Sesión abiertau    📁 [SFTP] Creando directorio: u,   🗑️ [SFTP] Archivo existente eliminado: u   📤 [SFTP] Subiendo wbu   ✅ [SFTP] Archivo subido a: u   Error de autenticación SFTP: zError SSH: zError de red al conectar SFTP: z#Error inesperado al subir archivo: z	 - Tipo: u&   Error de conexión a la base de datos.DEV_IMAGE_PATHu8   Variable de entorno DEV_IMAGE_PATH no está configurada.z/assets/images/zMUPDATE ctr_assets_landing SET tipo = %s, ruta = %s, tamano = %s WHERE id = %su-   💾 [DB] Ruta y tamaño actualizados en BD: z bytes)z&Error al actualizar la base de datos: zvideo/VideoImagenTz actualizado correctamente.)r   tiponombretamanor   rutar   r   data)+r   seekread	Exceptionlenstriplowerreplaceosgetenvboolprintpathisfilerstripsocketcreate_connectionr.   	SSHClientset_missing_host_key_policyAutoAddPolicyconnectcloseget_transportset_keepalive	open_sftpsplitstatIOErrormkdirremoveopenwriteAuthenticationExceptionSSHExceptionerrortype__name__r   cursorexecutecommit
startswith)*r   r   r	   r
   r   allowed_typesfile_contente	file_size
vista_nameserverr&   r'   base_folderr%   ftp_passuse_passwordremote_folderremote_file_pathclientsftpr>   last_errloader	transport
remote_dirpartscurpf
auth_error	ssh_errorsocket_error
conexionBDrn   app_url
image_pathqueryis_video
media_typer2   r3   s*                                           @@r4   updateLandingImager      sb	    y	 -_``M
 % -OPPJ		qyy~~'$1]^^  L!I $$&..sC8@@cJJ -TUU YY|$Fyy)Hyy)H))/0KD9 yy(.BHyy)HIHyy(0DH()L H,Gr(STUV -dee -ghh -kllx 8 /TU]T^^_-`aa #))#./qA>M'4	(
89	+,<+=
>? 
8$t
LMk%%vtna%@ 		 

 FDe)&4&xj\hjnsMtuv##%**8+A+A+CDNN!!#!!  
 DHZ^\Z	 
!!!8D
! |#(7[\d[eehiqhr5stt 

  { NN!#!!  
 ((*	##B'!*+ #))#.
  % 	 AE1#,C 		#	 	II&'KK()@AQ@RST
 	%i[56YY'. 	"!GGL!	"-.>-?@A 

 [#%
$1YZZ""$ )),-$1kll..%y
|1YKH
_uy*iDE=j\I;V]^_ ##H-H$(J  \!<=%j\9+>
 [  J -HIIJx	 	 k /QRVQWW[\b[ccefgeh-ijjkL ! ! H!@  
  G   8>?

3   		
	" 	" ++ \ /Mj\-Z[[ 

       H {9+-FGG 

    << _ /N|n-]^^ 

     s /RSTRUU^_cde_f_o_o^p-qrr

   s  
   

   @  [ /UVWUX-YZZ[s  ;T$ U T?!U 9BW4 U0W4 V	2VBW4 V(!W4 $0W !W4 5W'W4 !^) 4^9 ` +` A5` $	T<-T71T<7T<?U	U 	U-U("U-(U-0	V9V;W4 VW4 		VV	V%$V%((WW4 WW4 	W$ W4 #W$$W4 'W1,W4 4^&Y^&_	 X''	X32X39Y

	YY^&0[7^&8_	 ?Z	ZZ"Z33	Z?>Z?^&\, ^&!_	 ([99	\\\	\('\(,^&8^!^&_	 ]..	]:9]: ^	^^!^&&_	 )	^65^69	__	`_`	_*'`)_**`0` `	`
```	`/`*$`/*`/c                     t               } | dddS 	 | j                  d      }d}|j                  |       |j                         }|D ]"  }|j	                         D ]  \  }}|	d||<    $ dd	|d
|j                          | j                          S # t        $ r;}ddt        |       dcY d }~j                          | j                          S d }~ww xY w# j                          | j                          w xY w)Nr      Error de conexiónr   T
dictionaryzMSELECT id, vista, seccion, tipo, ruta, tamano FROM ctr_assets_landing WHERE 1r      zAssets obtenidos correctamenterH   zError al obtener los assets: r   rn   ro   fetchallitemsr^   rL   str)r   rn   r   assetsassetkeyvaluert   s           r4   obtenerAssetsLandingr      s   !J)=>>""d"3_u"  	$E#kkm $
U=!#E#J$	$
 )ISYZ 	  S+HQ)QRR 	S 	6   AB &B 	CC.C/C CC "C>rI   c           
         | j                  d      }| j                  d      }| j                  d      }|sdddS |d uxr |dk7  }|d uxr |dk7  }|s|sdddS t               }|dd	dS 	 |j                         }d
}|j                  ||f       |j	                         }	t        d|        t        d|	d u        |	s.dd| dd|r|j                          |r|j                          S S g }
g }g }|r3|
j                  d       |j                  |       |j                  d       |r3|
j                  d       |j                  |       |j                  d       |j                  |       ddj                  |
       d}t        d|        t        d|        |j                  ||       |j                          t        d|j                          |j                  dk(  r*ddd|r|j                          |r|j                          S S dddj                  |
D cg c]  }|j                  d      d    c}       d|r|j                          |r|j                          S S c c}w # t        $ r@}ddt        |       dcY d }~r|j                          |r|j                          S S d }~ww xY w# r|j                          |r|j                          w w xY w)Nr   titulocuerpoFzFalta el campo obligatorio: idr   r   zODebe proporcionar al menos un campo con valor para actualizar (titulo o cuerpo)u%   Error de conexión a la base de datoszBSELECT ctr_texts_id FROM ctr_texts_landing WHERE ctr_texts_id = %su   🔍 DEBUG - ID recibido: u   🔍 DEBUG - Registro existe: u%   No existe ningún registro con el ID z en la base de datosz
title = %sz	body = %sz7
            UPDATE ctr_texts_landing 
            SET z, z-
            WHERE ctr_texts_id = %s
        u   🔍 DEBUG - Query generada: u   🔍 DEBUG - Valores: u   🔍 DEBUG - Filas afectadas: r   Tu   No se encontraron registros para actualizar o no hubo cambios en los datos. Los valores enviados son idénticos a los existentes.z8Textos actualizados correctamente. Campos actualizados: z = z Error al actualizar los textos: )getr   rn   ro   fetchonerT   r^   appendjoinrp   rowcountrb   rL   r   )rI   r   r   r   titulo_validocuerpo_validor   rn   check_queryregistro_existecampos_actualizarvalorescampos_enviadosr   camport   s                   r4   update_Landing_Textsr     sR   	$BXXhFXXhF 7
 	
 $&76R<M$&76R<Mh
 	

  !J>
 	

I""$ [{RE* //+*2$/0.d/J.KLM B2$FZ[t LLN m $$\2NN6"""8,$$[1NN6"""8, 	r,-. /	 	-eW56&wi01 	ug&.v.?@A ??a _" LLN  QRVR[R[  AR  ]Sw|]b]h]hin]opq]r  ]S  ST  RU  V
 LLN  ]S  
9#a&B
 	
 LLN 
 LLN sP   ,AI5 /C?I5 I5 %I0 
I5 0I5 5	J>>J9J>K 9J>>K 'K(c                     t               } | dddS 	 | j                  d      }d}|j                  |       |j                         }|D ]"  }|j	                         D ]  \  }}|	d||<    $ dd|d	|j                          | j                          S # t        $ r;}dd
t        |       dcY d }~j                          | j                          S d }~ww xY w# j                          | j                          w xY w)NFr   r   Tr   zTSELECT ctr_texts_id, view, section, type, title, body FROM ctr_texts_landing WHERE 1r   zDatos obtenidos correctamenterH   z&Error al obtener los datos de assets: r   )r   rn   r   datos_textsdator   r   rt   s           r4   get_texts_landingr     s   !J -ABB""d"3fuoo'   	#D"jjl #
U= "DI#	#
  ,KU`a 	  ` /UVYZ[V\U]-^__ 	` 	r   )jsonrQ   shutilr.   cnxpdor   fastapir   dotenvr   rU   dirnameabspath__file__
script_dircrm_dirr   env_pathintr   r   r   dictr   r    r7   r4   <module>r      s     	   !   WW__RWW__X67

''//*
%77<<!2F; H l3 lj lS lS lY\ l\>ft fTr7   