U
    £†ÚjŠ!  ã                   @   sD  d Z ddlZddlZddl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
mZ ddlZddlmZ ddlmZmZmZ ddlmZ ej dd	¡Ze	d
ƒZe d¡ZdddddddddddddddhZdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Z d'd(„ Z!d)d*„ Z"d+d,„ Z#d-d.„ Z$d8d0d1„Z%d2d3„ Z&d4d5„ Z'd6d7„ Z(dS )9zHHermes V5: title/description EPG search, options and explicit selection.é    N)ÚPath)ÚdatetimeÚtimezone)ÚDB)Ú
get_targetÚ_validate_urlÚinit)Ú
check_onceZHERMES_EPG_DBz/var/lib/hermes-nexus/epg.dbz(/var/lib/hermes-nexus/taller/opciones_v5zAmerica/TijuanaZfcZcfZclubZdeÚdelZlaZelZlosZlasZatleticoZfootballZfutbolZtheZacZscc                 C   s:   d  dd„ t dt| pdƒ ¡ ¡D ƒ¡} t dd| ¡ ¡ S )NÚ c                 s   s   | ]}t  |¡s|V  qd S ©N)ÚunicodedataZ	combining©Ú.0Úc© r   úhermes_football_v5.pyÚ	<genexpr>   s     
 znorm.<locals>.<genexpr>ZNFKDz
[^a-z0-9]+ú )Újoinr   Z	normalizeÚstrÚcasefoldÚreÚsubÚstrip©Úsr   r   r   Únorm   s    (r   c                 C   s   t t| ƒ ¡ ƒt S r   )Úsetr   ÚsplitÚSTOPr   r   r   r   Útokens   ó    r!   c                 C   s|   t | ƒ}t |ƒ}|r|sdS t| ƒt|ƒkr0dS t|ƒdkrht||@ ƒdkrht||@ ƒt|ƒ dkrhdS t||@ ƒt|ƒ S )Nr   g      ð?é   g      à?g      è?)r!   r   Úlen)ZteamÚtextÚaÚbr   r   r   Úscore   s       4 r(   c                 C   s   t jdt| ƒ d dd�S )Nzfile:z?mode=roT)Zuri)Úsqlite3Úconnectr   )Úpathr   r   r   Ú_read_db   r"   r,   c                 C   s*   t  t| ƒd t|ƒ  ¡ ¡ ¡ d d… S )Nú|é    )ÚhashlibZsha256r   ÚencodeZ	hexdigest©ÚuserÚsessionr   r   r   Ú_session_key   s    r4   c                 C   s   t t| |ƒd  S )Nz.json)ÚSTATEr4   r1   r   r   r   Ú_path!   r"   r6   c              	   C   s„   t jdddd� t t d¡ t| |ƒ}| dt d¡ d ¡}t|ddd	��}t	j
||d
d� W 5 Q R X t |d¡ t ||¡ d S )NTiÀ  )ÚparentsÚexist_okÚmodeÚ.é   z.tmpÚxÚutf8©ÚencodingF©Zensure_asciii€  )r5   ÚmkdirÚosÚchmodr6   Z	with_nameÚsecretsZ	token_hexÚopenÚjsonÚdumpÚreplace)r2   r3   ÚdataÚpZtmpÚfr   r   r   Ú_save#   s    
   rL   c                 C   s\   t | |ƒ}| ¡ sd S t |jdd�¡}t tj¡ 	¡ | 
dd¡ dkrX|jdd� d S |S )Nr=   r>   Úcreatedr   i  T©Z
missing_ok)r6   ÚexistsrF   ÚloadsZ	read_textr   Únowr   ÚutcÚ	timestampÚgetÚunlink)r2   r3   rJ   rI   r   r   r   Ú_load*   s    
   rV   c                  C   s   ddl m}  | ƒ S )Nr   ©Ú	_playlist)Úhermes_football_v3drX   rW   r   r   r   Ú_catalog2   s    rZ   c                 C   s   ddl m} || ƒS )Nr   )Úepg_num)Z!hermes_football_link_manager_v2_1r[   )Úchannelr[   r   r   r   Ú_catalog_key7   s    r]   é   c                    sf  t tƒ�Ü}tj|_dd„ | d¡D ƒ‰ t‡ fdd„dD ƒd ƒ}ddd	h ˆ ¡sbg d
fW  5 Q R £ S d|rpd| nd }t 	| d  
dd¡¡}| ¡  d¡| t¡ ¡  d¡h}g }|D ](}| | d| d |d f¡ ¡ ¡ q¶W 5 Q R X g }	tƒ }
|D �]@}|d |d |d	   }}}|�r(|| nd}t|�p6dƒd t|�pFdƒ }t| d |ƒ}t| d |ƒ}t||ƒdk �rzqøz(ddlm} t||ƒ|  ¡ d ƒ}W n tk
�r¼   Y qøY nX |dk�rÊqø||f}||
k�rÞqø|
 |¡ |	 |t|�pødƒd d… t|�pdƒd d… t|dƒtt||ƒd ƒt|ƒd!œ¡ qø|	jd"d#„ d$� |	d |… |�r`d%nd&fS )'Nc                 S   s   h | ]}|d  ’qS )r#   r   )r   r<   r   r   r   Ú	<setcomp>>   s     z"_epg_candidates.<locals>.<setcomp>z PRAGMA table_info(epg_programas)c                 3   s   | ]}|ˆ kr|V  qd S r   r   r   ©Zcolsr   r   r   ?   s      z"_epg_candidates.<locals>.<genexpr>)ÚdescripcionÚdescriptionÚdescZsinopsisZsummaryÚcanalÚtituloZinicioZEPG_SIN_COLUMNAS_REQUERIDASzcanal,titulo,inicioú,r   Z
starts_utcÚZz+00:00z%Y%m%dzSELECT z' FROM epg_programas WHERE inicio LIKE ?ú%r   ÚhomeÚawaygš™™™™™á?r   )Úepg_dateé<   é´   é‚   éÈ   r#   é   )rd   re   ra   Údiferencia_minutosÚ
puntuacionÚkeyc                 S   s   | d  | d fS )Nrr   rq   r   )r<   r   r   r   Ú<lambda>_   r"   z!_epg_candidates.<locals>.<lambda>)rs   ZDESCRIPCION_DISPONIBLEZEPG_SIN_DESCRIPCION)r,   ÚEPGr)   ÚRowÚrow_factoryÚexecuteÚnextÚissubsetr   ZfromisoformatrH   ÚdateÚstrftimeZ
astimezoneÚTZÚextendZfetchallr   r   r(   ÚminrY   rk   ÚabsZtotal_secondsÚ	ExceptionÚaddÚappendÚroundr]   Úsort)ÚeventZmax_candidatesÚdbrc   ZfieldsÚstartZdatesÚrowsÚdÚfoundÚseenÚrowr\   ÚtitleÚrawrb   Zbodyri   rj   rk   Zdiffrs   r   r`   r   Ú_epg_candidates;   sR    
"0 
   

 
 
ü
r�   c              	      sÊ   t tƒ�"}tj|_dd„ | d¡D ƒ}W 5 Q R X ‡ fdd„|D ƒ}t t¡ 	¡  
¡ ‰‡fdd„|D ƒ}t|ƒdkr~|d d fS t|ƒdkr–|d d fS |s¦d dd	ifS d d
dd„ |p¶|d d… D ƒdœfS )Nc                 S   s   g | ]}t |ƒ‘qS r   )Údict)r   Úrr   r   r   Ú
<listcomp>e   s     z_event.<locals>.<listcomp>zXSELECT id,home,away,local_day,starts_utc FROM events ORDER BY starts_utc DESC LIMIT 1000c                    s4   g | ],}t ˆ |d  ƒdks,t ˆ |d ƒdkr|‘qS )ri   gffffffæ?rj   )r(   ©r   Úe)Útermr   r   r“   f   s       c                    s   g | ]}|d  ˆ kr|‘qS )Ú	local_dayr   r”   )Útodayr   r   r“   h   s      r#   r   ÚestadoZSIN_PARTIDOZVARIOS_PARTIDOSc                 S   s0   g | ](}|d  |d d |d  |d dœ‘qS )Úidri   ú contra rj   r—   )rš   ÚpartidoZfechar   r”   r   r   r   r“   l   s     r;   )r™   Zpartidos)r,   r   r)   rv   rw   rx   r   rQ   r}   r{   Ú	isoformatr$   )r–   r‡   r‰   r‹   Ztodaysr   )r–   r˜   r   Ú_eventb   s    
   rž   c                 C   sb  t | ƒ\}}|r|S t|ƒ\}}|s@d|d d |d  |dœS tƒ }g }|D ]€}	|	d rj| |	d g ¡ng }
|
D ]Z}t|tƒrr| d¡sŒqr| t| dd	¡ƒd d
… |	d |	d |	d |d |	d dœ¡ qrqN|sôd|d d |d  t|ƒdœS |d d… }t	||t
 tj¡ ¡ |d |d d |d  |dœƒ d|d d |d  dd„ t|ƒD ƒ|dœS )NZSIN_COINCIDENCIA_EPGri   r›   rj   )r™   rœ   Údetallers   ÚurlÚnombreZCanaléd   rd   re   ra   rq   )r¡   rd   re   ra   r    rq   ZSIN_CANAL_EN_CATALOGO)r™   rœ   Zepgr;   rš   )rM   Úevent_idrœ   ÚopcionesZELEGIR_FUENTEc                 S   s4   g | ],\}}|d  |d |d |d |d dœ‘qS )r#   r¡   re   ra   rq   )Únumerord   re   ra   rq   r   )r   ÚiÚor   r   r   r“   ‚   s
   ÿ ÿz#buscar_opciones.<locals>.<listcomp>)r™   rœ   r¤   rŸ   )rž   r�   rZ   rT   Ú
isinstancer‘   rƒ   r   r$   rL   r   rQ   r   rR   rS   Ú	enumerate)Zequipor2   r3   r†   Úerrorr‰   Zepg_infoZcatalogZoptionsr�   ÚentriesÚentryr   r   r   Úbuscar_opcionesn   sD         ý    ÿÿýr­   c                 C   sÊ  t ||ƒ}|sddiS t| tƒr>d|   kr<t|d ƒksFn ddiS |d | d  }d|d |d d	d
œ}t|d ƒ}tƒ  tjtdd��Î}| 	d¡ | 	d|d f¡ 
¡ sÂddiW  5 Q R £ S | 	d|d f¡ 
¡ }|rø|d røddiW  5 Q R £ S t tj¡ ¡ }	| 	d|d |d|d tj|dd�|	f¡ | 	d|d d|	|d f¡ | ¡  W 5 Q R X t|d ƒ|d k}
|
�r†t|d ƒnd}|
�r¢t||ƒjdd� |
�r¬dnd|d  |d! |
|t|
ƒd"œS )#Nr™   ZSIN_SELECCION_PENDIENTEr#   r¤   ZOPCION_INVALIDAZSELECCION_EXPLICITA_USUARIOrd   rq   uB   Elegido por el usuario tras bÃºsqueda EPG por tÃ­tulo/descripciÃ³n)r™   Z	epg_canalrq   Znotar    é   )ZtimeoutzBEGIN IMMEDIATEzSELECT 1 FROM events WHERE id=?r£   ZEVENTO_NO_ENCONTRADOz6SELECT manual_url FROM football_links WHERE event_id=?r   ZENLACE_MANUAL_PROTEGIDOa2  INSERT INTO football_links(event_id,automatic_url,provider,epg_channel,evidence,updated_utc) VALUES(?,?,?,?,?,?) ON CONFLICT(event_id) DO UPDATE SET automatic_url=excluded.automatic_url,provider=excluded.provider, epg_channel=excluded.epg_channel,evidence=excluded.evidence,updated_utc=excluded.updated_utcZslingFr@   zSINSERT INTO football_link_audit(event_id,action,timestamp_utc,note) VALUES(?,?,?,?)ZUSER_SELECTED_V5ZNO_COMPROBADOTrN   ZASIGNADOZGUARDADO_NO_VERIFICADOrœ   r¡   )r™   rœ   rd   Zguardado_verificadoZverificacion_httpZrefrescar_panel)rV   r¨   Úintr$   r   r   r)   r*   r   rx   Zfetchoner   rQ   r   rR   r�   rF   ÚdumpsZcommitr   r	   r6   rU   Úbool)r¥   r2   r3   rI   ZoptionZevidencer    r‡   ÚoldrQ   Z	confirmedZstatusr   r   r   Úelegir_opcion†   sL    
 ( þ
 üÿ   ýr³   )r^   ))Ú__doc__rB   r   r)   r   rF   r/   rD   Úpathlibr   r   r   ZpytzrY   r   Zhermes_football_links_v3r   r   r   Zhermes_football_v3b_aprobarr	   ÚenvironrT   ru   r5   r}   r    r   r!   r(   r,   r4   r6   rL   rV   rZ   r]   r�   rž   r­   r³   r   r   r   r   Ú<module>   s2   8
"
'