
    Sj                     H   d dl Z d dlZd dlZ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 d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZ e j                            e j                            e          d          Z  ej!        e"          Z#d	 Z$d
 Z%d Z&d Z'd Z(d Z)dS )    N)MIMEText)BackgroundScheduler)CronTrigger)ACTIVOSFECHA_INICIO_HISTORICO)get_tickers_extra)EMAIL_ORIGENEMAIL_APP_PASSWORDEMAIL_DESTINO	SMTP_HOST	SMTP_PORTALERTA_UMBRALdatac                 T    t           j                            t          d|  d          S )N
historico_z.csv)ospathjoinDATA_DIR)nombres    #/var/www/html/bolsaweb/scheduler.pycsv_pathr      s$    7<<";v";";";<<<    c                    t          |           }	 t          j                            |          rt	          j        |dddgd          }t	          j        |j        d          |_        ||j                                                 }|j	        sE|j        
                                }|t	          j        d          z                       d          }nt          }nt          }t          j        ||d	
          }|j	        rt                               d| |           dS t          j                            |          r|                    |dd	           n|                    |           t                               d| |t'          |                     dS # t(          $ r  t                               d| |           Y dS w xY w)uJ   Descarga incremental: solo los días que faltan desde el último registro.r         	index_colskiprowsheadercoerceerrors)daysz%Y-%m-%dF)startprogresszSin datos nuevos para %s (%s)Na)moder    z$Actualizado %s (%s): %d filas nuevaszError descargando %s (%s))r   r   r   existspdread_csvto_datetimeindexnotnaemptymax	Timedeltastrftimer   yfdownloadloggerinfoto_csvlen	Exception	exception)r   tickerrutadf_prevultimainiciodf_nuevos          r   descargar_tickerrA      s   FDF7>>$ 
	,k$!q!fQOOOGN7=JJJGMgm11334G= 0 **,, 2<Q#7#7#77AA*MM/+F;vVeDDD> 	KK7HHHF7>>$ 	"OODs5O9999OOD!!!:FFCPXMMZZZZZ F F F4ffEEEEEEFs   DF  A7F &GGc                 (   t          |           }t          j                            |          sdS 	 t	          j        |dddgd          }t	          j        |j        d          |_        ||j                                                 	                                }|j
        D ]!}t	          j        ||         d          ||<   "d|j
        v rdnd	}d
|j
        vst          |          dk     rdS ||                                         }|d
                             dt          j                  }|                    dd                                          }|                    dd                                          }||z  }||z  |                    dt          j                  z  dz  }	|	                                }
|
j        st)          |
j        d                   ndS # t,          $ r t.                              d|            Y dS w xY w)u^   Devuelve el valor del Índ.Vol. (×100) de la última sesión, o None si no se puede calcular.Nr   r   r   r   r!   r"   z	Adj CloseCloseVolume   )min_periodsd   z"Error calculando indicador para %s)r   r   r   r)   r*   r+   r,   r-   r.   
sort_indexcolumns
to_numericr8   dropnareplacenpnanrollingmeanr/   floatilocr9   r5   r:   )r   r<   dfcolsvolsma14v_med14denominadorindlasts              r    calcular_indicador_ultima_sesionr]   8   s   FD7>>$ t[aVAFFF>"(8<<<  !,,..: 	> 	>CmBsGH===BsGG(BJ66kkG2:%%R24sGNNl""1bf--		""	--2244++bb+116688go3w+--a8883>zz||+/:?uTYr]###4?   =vFFFtts   B=G( 1C6G( (%HHc                    | sdS t           rt          j        d          rt                              d           dS d | D             }dt          j                                                            d           dt           dd		                    |          z   d
z   }t          |dd          }dt           dt          |            d|d<   t          |d<   t          |d<   	 t          j                    }t!          j        t$          d|d          5 }|                    t          t                      |                    t          t          g|                                           ddd           n# 1 swxY w Y   t                              dt          t          |                      dS # t.          $ r t                              d           Y dS w xY w)uE   Envía un correo listando las empresas con Índ.Vol. > ALERTA_UMBRAL.NXu:   App Password de Yahoo no configurada; no se envía alerta.c                 N    g | ]"\  }}d |                     dd           d|d#S )u     • _ z: z.1f)rM   ).0r   valors      r   
<listcomp>z(enviar_email_alertas.<locals>.<listcomp>^   s>    ddd=65>v~~c3//>>5>>>dddr   u   Alerta de Índ.Vol. — z%d/%m/%Yz/

Las siguientes empresas superan el umbral de z:


u,   

Mensaje automático generado por BolsaWeb.plainzutf-8u   [BolsaWeb] Alerta Índ.Vol. > u    — z empresa(s)SubjectFromToi     )contexttimeoutz%Alerta enviada a %s con %d empresa(s)z Error enviando alerta por correo)r
   
startswithr5   warningr*   	Timestampnowr2   r   r   r   r8   r	   r   sslcreate_default_contextsmtplibSMTP_SSLr   loginsendmail	as_stringr6   r9   r:   )empresas_alertalineascuerpomsgctxsmtps         r   enviar_email_alertasr   V   s,     !3!>s!C!C STTTddTcdddF	M2<#3#3#5#5#>#>z#J#J 	M 	M8E	M 	M 	M
))F

	 ;	;  67G
,
,Ckmkk#oJ^J^kkkC	NCKCI=(**ic2FFF 	J$JJ|%7888MM,III	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	;]CP_L`L`aaaaa = = =;<<<<<<=s7   "0F. AE3'F. 3E77F. :E7;1F. .$GGc                  L   t                               d           t          t                    } t	                      D ]}|d         | |d         <   |                                 D ]\  }}t          ||           t                               d           g }| D ]W}t          |          }|D|t          k    r9|	                    ||f           t                               d||t                     X|rt          |           d S t                               dt                     d S )Nu#   === Inicio descarga automática ===r;   r   u'   === Descarga automática finalizada ===u   Alerta: %s Índ.Vol.=%.1f > %sz1Sin empresas que superen el umbral de alerta (%s))r5   r6   dictr   r   itemsrA   r]   r   appendr   )todosrowr   r;   ry   vals         r   descargar_todosr   u   s)   
KK5666MME "" - -"8}c(m++-- ) )((((
KK9::: O V V.v66?s]22""FC=111KK8&#}UUU X_-----GWWWWWr   c                      t          d          } |                     t          t          ddd                     |                                  t
                              d           | S )NzEurope/Madrid)timezonezmon-fri   -   )day_of_weekhourminutez3Scheduler iniciado: descarga diaria L-V a las 18:45)r   add_jobr   r   r%   r5   r6   )	schedulers    r   iniciar_schedulerr      sa    #_===Io{yrZ\']']']^^^OO
KKEFFFr   )*r   loggingrt   rr   email.mime.textr   numpyrN   yfinancer3   pandasr*   !apscheduler.schedulers.backgroundr   apscheduler.triggers.cronr   activosr   r   databaser   configr	   r
   r   r   r   r   r   r   dirname__file__r   	getLogger__name__r5   r   rA   r]   r   r   r    r   r   <module>r      s}   				   



 $ $ $ $ $ $             A A A A A A 1 1 1 1 1 1 3 3 3 3 3 3 3 3 & & & & & & g g g g g g g g g g g g g g g g7<<116::		8	$	$= = =F F F@  <= = =>X X X0    r   