a
    0i1                     @   s   d dl Z d dlmZ d dlZd dlZd dlZd dlmZmZm	Z	 d dl
Z
d dlmZ d dlmZ e  dZdd Zd	d
 ZddeddfddZdS )    N)secure_filename)	send_fileabortredirect)Config)load_dotenvzhttps://file.sycelephant.comc              
   C   s  z | sdddW S | j  ds0dddW S t|dd d}t }tj	||}| 
| td}td	}td
}	t|}
|
||	 |
| t|d"}|
d| | W d    n1 s0    Y  |
  t | | }t| dd| d| d| ||dW S  ty } zDdt v rXtj|rXt| ddt| dW  Y d }~S d }~0 0 d S )NFu"   No se proporcionó ningún archivoexitomensaje.pdfzSolo se permiten archivos PDF _FTP_HOSTFTP_USERFTP_PASSrbzSTOR Tz	Archivo 'z' subido exitosamente a /)r	   r
   nombre_archivourl_webruta_archivo_tempzError al subir el archivo: )filenamelowerendswithr   replacetempfile
gettempdirospathjoinsavegetenvftplibFTPlogincwdopen
storbinaryquitBASE_URLremove	Exceptionlocalsexistsstr)technicalSheetitemZcarpeta_destinocarpetar   Ztemp_dirr   host_ftpusuario_ftp   contraseña_ftpZconexion_ftparchivoZurl_archivoe r6   &/var/www/html/src/App/Subir_Archivo.pysubir_archivo_ftp_desde_request   s:    





0

r8   c              
   C   s(  z|  dr | }|dd }n| }t d| }tjt |}tj	|dd}|j
dkrt|d,}|jd	d
D ]}|| qtW d   n1 s0    Y  t|dd|dW S t|W S W nb ty" } zHtd|  d|  |  drt| W  Y d}~S td W Y d}~n
d}~0 0 dS )u  
    Visualiza un archivo PDF específico desde el servidor remoto.
    
    Args:
        filename_or_url: Nombre del archivo PDF o URL completa
        
    Returns:
        Flask response: Envía el archivo para visualización o redirecciona a su URL
    httpr   z//static/pdf/Ventas/EUA/DMITEMS/BREAKER_CATALOG/T)stream   wbi    )
chunk_sizeNzapplication/pdfF)mimetypeas_attachmentdownload_namezError al visualizar el PDF z: i  )
startswithsplitr(   r   r   r   r   r   requestsgetstatus_coder%   iter_contentwriter   r   r*   printr   )Zfilename_or_urlurlr   Ztemp_file_pathresponsefchunkr5   r6   r6   r7   view_pdf_fileV   s0    


*rN   c           !   
   C   s<  z|du r|du rd}zFddl }td|  ||}t||}td|j d|j  W nP ttfy } z4tdt|  ddt| d	W  Y d}~W S d}~0 0 td
|   td|  | }tdt|  | sdd|  dd	W S tdt|dkr|dd n|  |	rDt	j
||	dd}n|}td|  t	d}t	d}t	d}ztd|  t|}||| zP|| | }tdt|  tdt|dkr|dd n|  W nP tjy< } z4tdt|  dd| dd	W  Y d}~W W S d}~0 0 d}d}|D ]}||d}||}|s~td|  qJ|d d! d"}td#|  ||v rtd$|  |
}| | d| }td%|  td&|  ||kr\td'| d(|  ||| |d)7 }nBtd*|  |durJ|dkrJtd+|  ||d |d)7 }qJ|  d,d-| d.| ||d/W W S  ty } z4td0t|  dd0t| d	W  Y d}~W S d}~0 0 W n` ty6 } zFtd1t|  ddl} t|   dd2t| d	W  Y d}~S d}~0 0 dS )3u  
    Verifica la existencia de archivos en el servidor FTP y actualiza una tabla con las URLs.
    
    Args:
        tabla: Nombre de la tabla en la base de datos a consultar
        campo_id: Nombre del campo que contiene el identificador del registro
        campo_url: Nombre del campo que contiene la URL del archivo
        update_function: Función para actualizar el registro en la base de datos
        ruta_remota: Ruta en el servidor donde se buscarán los archivos
        search_function: Función para obtener los items (si es None, se importará dinámicamente)
        module_path: Ruta al módulo donde se encuentra la función de búsqueda
        search_function_name: Nombre de la función a importar del módulo (por defecto "searchitems")
        base_url: URL base para construir las URLs web (por defecto usa BASE_URL global)
        subfolder: Subcarpeta específica dentro de ruta_remota (opcional)
        
    Returns:
        dict: Diccionario con resultado de la operación
    NzDConsultas_SQL.Ventas.VentasEUA.DataMaster.DMBreakerProtectionTypeSQLr   u!   Importando dinámicamente desde: u   Función importada: z desde u(   Error importando función de búsqueda: Fr   u-   Iniciando verificación de archivos en tabla zRuta remota: zItems encontrados: z$No se encontraron datos en la tabla .zMuestra de items:    \r   zRuta completa: r   r   r   zConectando a z"Archivos encontrados en servidor: zPrimeros 5 archivos:    z(Error de permisos al listar directorio: zEl directorio z, no existe en el servidor o no hay permisos. u   Item sin ID válido: r   r   r   zVerificando archivo: z Archivo encontrado en servidor: zURL construida: zURL actual: zActualizando z
 con URL:    z#Archivo NO encontrado en servidor: zLimpiando URL para Tu(   Verificación completada. Actualizados: z, No encontrados: )r	   r
   actualizadosno_encontradosu   Error de conexión FTP: zError general: zError: )	importlibrI   import_modulegetattr__name__ImportErrorAttributeErrorr-   lenr   r   r   r   r    r!   r"   r#   r$   nlst
error_permrE   r'   r*   	traceback
format_exc)!ZtablaZcampo_idZ	campo_urlZupdate_functionZruta_remotaZsearch_function_namesearch_functionmodule_pathbase_urlZ	subfolderr0   rW   moduleZimport_erroritemsruta_completar1   r2   r3   ftpZarchivos_remotosZ
perm_errorrU   rV   r/   Zitem_idZitem_urlr   Zpath_webZurl_completaZ	ftp_errorr5   r`   r6   r6   r7   verificar_actualizar_archivos   s    

,(




,,







0ri   )r   Zwerkzeug.utilsr   ior!   r   flaskr   r   r   rD   configr   dotenvr   r(   r8   rN   ri   r6   r6   r6   r7   <module>   s   <7