
    kcis                     ^    d Z 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 ZddZ	d	 Z
dd
ZdS )u   
Descarga de archivos: wget y requests (streaming).

Incluye validación básica del archivo descargado (no HTML, tamaño mínimo).
    N   )config)utilsc                     t           j                            |           r(	 t          j        |            dS # t          $ r Y dS w xY wdS )z+Borra el archivo si existe; ignora errores.N)ospathexistsremoveOSError)rutas    =/srv/repositorios/osluz/webnueva/scripts/descarga/download.py_eliminar_si_exister      sZ    	w~~d 	IdOOOOO 	 	 	DD	 s   7 
AA  c                    t           j                            |           }	 t          | d          5 }|                    d          }ddd           n# 1 swxY w Y   d|                                v sd|                                v r0t          j        | d| d           t          j        |            dS n# t          $ r Y nw xY w||k     rt          j        | d	| d
| d           t          j        | d| d           dS )u   
    Comprueba que el archivo no sea HTML y tenga un tamaño mínimo.

    Returns:
        True si es válido; en caso contrario registra error, borra el archivo y devuelve False.
    rbi   Ns   <htmls	   <!doctypeu(   : Se descargó HTML en vez del binario (z bytes). Eliminando.Fu   : Archivo pequeño (z bytes) por debajo del umbral (z). Se acepta igualmente.z: Descarga exitosa (z bytes)T)r   r   getsizeopenreadlowerr   registrar_errorr
   	Exceptionloggingwarninginfo)r   
nombre_appmin_sizetamanofcabeceras         r   _validar_archivo_descargador       s    W__T""F
$ 	#vvc{{H	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#x~~''''<8>>;K;K+K+K!ccvccc   IdOOO5 ,L     $ $v $ $V^ $ $ $	
 	
 	
 LJCCFCCCDDD4s5   B; AB; AB; AAB; ;
CCc                    	 t           j                            |          r+t          j        |           t	          j        | d           t	          j        | d|             dddddd|| g}t          j        |d	d	d
          }|j        rs|j        	                                
                    d          D ]F}|	                                }|r.|                    d          st	          j        | d|            G|j        dk    r/t          j        | d|j                    t          |           dS t           j                            |          st          j        | d           dS t!          ||          S # t          j        $ r* t          j        | d           t          |           Y dS t$          $ r3}t          j        | d|            t          |           Y d}~dS d}~ww xY w)u   
    Descarga usando el binario wget (reintentos, resume).

    Returns:
        True si la descarga fue correcta y la validación pasó.
    z-: Archivo previo eliminado antes de descargarz: Descargando desde wgetz-nvz-cz
--tries=10z--timeout=30z-OTiX  )capture_outputtexttimeout
z--: r   u   : wget falló con código Fu(   : wget terminó pero no creó el archivoz: wget timeout (10 min)z: Error ejecutando wget: N)r   r   r	   r
   r   r   
subprocessrunstderrstripsplit
startswith
returncoder   r   r   r    TimeoutExpiredr   )urlruta_destinor   cmdresultlineaes          r   descargar_con_wgetr6   7   s7   7>>,'' 	WIl###LJUUUVVV
====>>>udL.$VYZDtSQQQ= 	;,,..44T:: ; ; ;!1!1$!7!7 ;LJ!9!9%!9!9:::!!!Z"^"^6K\"^"^___---5w~~l++ 	!Z"Y"Y"YZZZ5*<DDD$   DDDEEEL)))uu   IIaIIJJJL)))uuuuus*   D7F ;6F 3F 5G7;	G7(G22G7c                    |t           j                                        }	 t          j        | |ddd          5 }|                                 |j                            d          pd                                }d|v r(t          j	        d| d	|             	 ddd           d
S t          |d          5 }|                    d          D ]}|                    |           	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          ||d          S # t          $ r4}t          j	        d| d|            t          |           Y d}~d
S d}~ww xY w)u   
    Descarga con requests en modo streaming.

    Returns:
        True si la descarga y validación (tamaño mínimo 100KB) son correctas.
    NTi,  )headersstreamr%   allow_redirectszContent-Type z	text/htmlu%   Error: Se recibió HTML al descargar z. URL: Fwbi    )
chunk_sizei )r   z!Error al descargar el archivo de r'   )r   DEFAULT_HEADERScopyrequestsgetraise_for_statusr8   r   r   r   r   iter_contentwriter    r   r   )	r0   r1   r   r8   rctr   chunkr5   s	            r   descargar_con_requestsrH   \   s8    (--//\sD
 
 
 	#   )--//52<<>>Bb  %TJTTsTT   	# 	# 	# 	# 	# 	# 	# 	# lD)) #Q^^t^<< # #EGGENNNN## # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# +<fUUUU   S*SSPQSSTTTL)))uuuuusk   D* A"DD* *D:/C6*D6C:	:D=C:	>DD* DD* DD* *
E(4)E##E()r   )N)__doc__r   r   r(   r@   r;   r   r   r   r    r6   rH        r   <module>rL      s      				                      8" " "J     rK   