U
    i1                     @   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   st  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 5 Q R X |
  t | | }t| dd| d| d| ||dW S  tk
rn } z@dt krFtj|rFt| ddt| d W Y S d }~X Y nX 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   PC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\App\Subir_Archivo.pysubir_archivo_ftp_desde_request   s:    







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 5 Q R X t|dd|dW S t|W S W nZ tk
r } z:td|  d|  |  drt|  W Y S td W 5 d}~X Y nX 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_sizezapplication/pdfF)mimetypeas_attachmentdownload_namezError al visualizar el PDF z: i  N)
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   sD  z|dkr|dkrd}zFddl }td|  ||}t||}td|j d|j  W nR ttfk
r } z0tdt|  ddt| d	 W Y W S d}~X Y nX td
|   td|  | }tdt|  |s dd|  dd	W S tdt|dkr|dd n|  |	rFt	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 nR tjk
r@ } z0tdt|  dd| dd	 W Y W W S d}~X Y nX d}d}|D ]}||d}||}|std|  qN|d d! d"}td#|  ||krtd$|  |
}| | d| }td%|  td&|  ||kr`td'| d(|  ||| |d)7 }nBtd*|  |dk	rN|dkrNtd+|  ||d |d)7 }qN|  d,d-| d.| ||d/W W S  tk
r } z0td0t|  dd0t| d	 W Y W S d}~X Y nX W nb tk
r> } zBtd1t|  ddl} t|   dd2t| d	 W Y S d}~X Y nX 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_functionZmodule_pathbase_urlZ	subfolderr0   rW   moduleZimport_erroritemsZ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rg   )r   Zwerkzeug.utilsr   ior!   r   flaskr   r   r   rD   configr   dotenvr   r(   r8   rN   rg   r6   r6   r6   r7   <module>   s   <7