U
    ÊÝÚjŽ%  ã                   @   s°   d Z ddlZddlZddlZddlmZmZ zddlmZ W n  ek
r\   ddl	mZ Y nX ddl
mZ ddlmZ dd„ Zd	d
„ Zddd„Zdd„ Zddd„Zddd„ZdS )ud   CRUD de tarjetas de fÃºtbol por voz. Eventos manuales e importados, auditorÃ­a y borrado explÃ­cito.é    N)ÚdatetimeÚtimezone)ÚZoneInfo)Úuuid4)ÚDBc                 C   s2   d  dd„ t d|  ¡ ¡D ƒ¡} t dd| ¡ ¡ S )NÚ c                 s   s   | ]}t  |¡s|V  qd S ©N)ÚunicodedataZ	combining)Ú.0Úc© r   úhermes_football_cards_v42.pyÚ	<genexpr>   s     
 znorm.<locals>.<genexpr>ZNFKDz
[^a-z0-9]+ú )Újoinr	   Z	normalizeÚcasefoldÚreÚsubÚstrip)Úsr   r   r   Únorm   s     r   c              	      sX   t | ƒ‰ tjdt d dd��"}tj|_dd„ | d¡D ƒ}W 5 Q R X ‡ fdd„|D ƒS )	Nzfile:z?mode=roT)Zuric                 S   s   g | ]}t |ƒ‘qS r   ©Údict©r
   Úxr   r   r   Ú
<listcomp>   s     zfind_team.<locals>.<listcomp>zSSELECT id,home,away,local_day,source FROM events ORDER BY starts_utc DESC LIMIT 500c                    s,   g | ]$‰ ˆrt ‡‡ fd d„dD ƒƒrˆ ‘qS )c                 3   s   | ]}ˆ t ˆ| ƒkV  qd S r   ©r   )r
   Úk)ÚneedleÚrr   r   r      s     z'find_team.<locals>.<listcomp>.<genexpr>)ÚhomeÚaway)Úany)r
   ©r   )r   r   r      s       )r   Úsqlite3Úconnectr   ÚRowÚrow_factoryÚexecute)ZteamÚdbÚrowsr   r#   r   Ú	find_team   s
    r+   õ   FÃºtbolc                 C   sÂ  t dd„ | ||fD ƒƒs ddiS z6t | dd¡¡}|jd krHddiW S | tj¡}W n  tt	fk
rv   ddi Y S X d	t
ƒ j }tjtd
d��’}	|	 d¡ |	 d||d|  ¡ | ¡ d| ¡ ddd| tdƒ¡ ¡  ¡ t tj¡ ¡ df¡ |	 d¡ |	 d|dt tj¡ ¡ | d | f¡ W 5 Q R X t t¡�}
|
 d|f¡ ¡ }W 5 Q R X |�r\dnd|| d | |�rx|d nd t|ƒdœ}|�r¾tdd„ |||fD ƒƒ�r¾t||�p²d||ƒ|d< |S )Nc                 s   s8   | ]0}t |tƒo.d t| ¡ ƒ  ko*dkn  V  qdS )é   éP   N)Ú
isinstanceÚstrÚlenr   )r
   r   r   r   r   r      s     zcreate_card.<locals>.<genexpr>ÚestadoZDATOS_INVALIDOSÚZú+00:00ZFALTA_ZONA_HORARIAZFECHA_INVALIDAzmanual:é   ©ZtimeoutúBEGIN IMMEDIATEz¬INSERT INTO events(id,league,league_code,home,away,logo,starts_utc,state,network,source,local_day,updated,away_logo)
                      VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)Zmanualr   ZprezCanal por confirmarZHERMES_MANUALzAmerica/Tijuanaú›CREATE TABLE IF NOT EXISTS hermes_card_audit
                   (id INTEGER PRIMARY KEY AUTOINCREMENT,event_id TEXT,action TEXT,created_utc TEXT,note TEXT)úOINSERT INTO hermes_card_audit(event_id,action,created_utc,note) VALUES(?,?,?,?)ZCREATEú vs z'SELECT local_day FROM events WHERE id=?ZCREADAÚNO_VERIFICADAr   )r2   ÚidÚpartidoZfecha_panelÚrefrescar_panelc                 s   s   | ]
}|V  qd S r   r   r   r   r   r   r   -   s     Z
asignacion)Úallr   ÚfromisoformatÚreplaceÚtzinfoÚ
astimezoner   ÚutcÚ
ValueErrorÚAttributeErrorr   Úhexr$   r%   r   r(   r   Ú	isoformatr   ÚdateÚnowÚfetchoneÚboolr"   Úforzar_enlace_futbol)r    r!   Z	start_isoZleagueÚenlaceÚ
logo_localÚlogo_visitanteZdtÚevent_idr)   ÚverifyZvisibleZ	resultador   r   r   Úcreate_card   s>    
 
 
    ÿþ
ÿ4 rS   c              
   C   s0  t | tƒrt d| ¡sddiS tjtdd��¶}| d¡ | d| f¡ ¡ }|sbddiW  5 Q R £ S | d	¡ | d
¡ | d| t	 
tj¡ ¡ f¡ | d| f¡ | d| f¡ | d| dt	 
tj¡ ¡ |d d |d  f¡ W 5 Q R X t t¡�}| d| f¡ ¡ d }W 5 Q R X |�sdnd| t|ƒ dœS )Nz[a-zA-Z0-9_.:-]{5,120}r2   ZID_INVALIDOr5   r6   r7   z'SELECT home,away FROM events WHERE id=?ZNO_ENCONTRADAr8   úlCREATE TABLE IF NOT EXISTS hermes_football_exclusions (event_id TEXT PRIMARY KEY, deleted_utc TEXT NOT NULL)úTINSERT OR REPLACE INTO hermes_football_exclusions(event_id,deleted_utc) VALUES (?,?)ú+DELETE FROM football_links WHERE event_id=?úDELETE FROM events WHERE id=?r9   ZDELETEr   r:   é   ú&SELECT COUNT(*) FROM events WHERE id=?ZBORRADAr;   )r2   r<   r>   )r/   r0   r   Ú	fullmatchr$   r%   r   r(   rK   r   rJ   r   rD   rH   rL   )rQ   r)   ÚrowrR   Zrestanter   r   r   Údelete_card1   s$    
 

&ÿ r\   é   c           
         sð  ddl m} zt| ƒ}W n  ttfk
r8   ddi Y S X d|  krNdksXn ddiS t  tj¡||d� }g }tj	t
dd���}| d	¡ | d
¡ | d¡ ¡ D ]t\}}zLt  t|ƒ dd¡¡}|jdkrÞ|jtjd�}| tj¡|k rø| |¡ W q¦ ttfk
�r   Y q¦Y q¦X q¦| d¡ |D ]f}| d|t  tj¡ ¡ f¡ | d|f¡ | d|f¡ | d|dt  tj¡ ¡ dt|ƒ f¡ �q*W 5 Q R X t 	t
¡�‰ t‡ fdd„|D ƒƒ}	W 5 Q R X |	�sÒdndt|	ƒ t|ƒ|	 |ddœS )uQ   Borra tarjetas de FÃºtbol iniciadas hace mÃ¡s de N horas, sea cual sea su estado.r   )Ú	timedeltar2   ZHORAS_INVALIDASiÐ  )Zhoursé   r6   r7   zˆCREATE TABLE IF NOT EXISTS hermes_card_audit (id INTEGER PRIMARY KEY AUTOINCREMENT,event_id TEXT,action TEXT,created_utc TEXT,note TEXT)z SELECT id,starts_utc FROM eventsr3   r4   N)rB   rT   rU   rV   rW   r9   ZPURGEzhoras_gracia=c                 3   s$   | ]}ˆ   d |f¡ ¡ d V  qdS )rY   r   N)r(   rK   )r
   Úeid©rR   r   r   r   _   s     z-purgar_partidos_concluidos.<locals>.<genexpr>ZPURGA_COMPLETADAZPURGA_INCOMPLETAT)r2   ÚokÚ
eliminadosZids_eliminadosr>   )r   r^   ÚfloatÚ	TypeErrorrE   rJ   r   rD   r$   r%   r   r(   Úfetchallr@   r0   rA   rB   rC   ÚappendrH   ÚsumrL   r1   )
Zhoras_graciar^   ZhorasZlimiterc   r)   r`   ZinicioZfechaZ	restantesr   ra   r   Úpurgar_partidos_concluidosE   sF       


   
ÿ  ÿri   r   c              
      s  ddl m} ddlm}m} tˆ tƒr.ˆ  ¡ s6ddiS |rLt|tƒsLddiS |pRd ¡ }|r€||ƒ}|jdkst|j	s€d	|d
dœS ||f}|D ]h}	|	dk	rŒ|	dkrŒt|	tƒr¶t
|	ƒdkrÂddi  S ||	ƒ}|jdksæ|j	ræ|jsæ|jrŒdddœ  S qŒtjtdd��&}
tj|
_dd„ |
 d¡ ¡ D ƒ}W 5 Q R X tˆ ƒ‰‡ fdd„|D ƒ}|�sb‡fdd„|D ƒ}|�srdˆ dœS t
|ƒdk�rœddd„ |dd… D ƒdœS |d d  }|�rz|||ƒ}W n6 tk
�rò } zd!t|ƒd"œ W Y ¢S d}~X Y nX | d#¡�r||ƒ|k�rd$|d%œS |�s$|�rÔtjtdd��<}
|
 d&¡ |�rT|
 d'||f¡ |�rj|
 d(||f¡ W 5 Q R X t t¡�}
|
 d)|f¡ ¡ }W 5 Q R X |�rÊ|�r¶|d |k�sÊ|�rÔ|d |k�rÔd*|d%œS d+||d d, d- |d d.  t|ƒt|�p|ƒd/d0œS )1u¡   Asigna URL manual y/o logos a un evento de football.db, sin filtro EPG.
    Si se recibe un nombre de canal sin URL, solicita URL o selecciÃ³n de catÃ¡logo.
    r   )Úurlsplit)Ú
set_manualÚ
get_targetr2   ZEVENTO_INVALIDOZENLACE_INVALIDOr   )ZhttpÚhttpsZSE_REQUIERE_URLu>   Indica una URL completa o selecciona una fuente del catÃ¡logo.)r2   Zcanal_solicitadoÚmensajeNi   ZLOGO_INVALIDOrm   z Se requiere URL HTTPS de imagen.)r2   rn   r5   r6   c                 S   s   g | ]}t |ƒ‘qS r   r   ©r
   r   r   r   r   r   }   s     z(forzar_enlace_futbol.<locals>.<listcomp>zSELECT id,home,away FROM eventsc                    s   g | ]}|d  ˆ kr|‘qS )r<   r   ro   )Úequipo_o_idr   r   r      s      c                    sP   g | ]H}ˆ rˆ t |d  ƒksHˆ t |d ƒksHˆ t |d  d |d  ƒkr|‘qS )r    r!   r   r   ro   r#   r   r   r   �   s         ZSIN_TARJETA)r2   ZbusquedarX   ZVARIAS_TARJETASc                 S   s*   g | ]"}|d  |d d |d  dœ‘qS )r<   r    r:   r!   )r<   r=   r   ro   r   r   r   r   ƒ   s     é   )r2   Zopcionesr<   ZURL_INVALIDA)r2   ZdetalleZsavedZNO_VERIFICADO)r2   rQ   r7   z#UPDATE events SET logo=? WHERE id=?z(UPDATE events SET away_logo=? WHERE id=?z,SELECT logo,away_logo FROM events WHERE id=?ZLOGOS_NO_VERIFICADOSZACTUALIZADAr    r:   r!   T)r2   rQ   r=   Zenlace_guardadoZlogos_actualizadosr>   )Zurllib.parserj   Zhermes_football_links_v3rk   rl   r/   r0   r   ZschemeZhostnamer1   ZusernameZpasswordr$   r%   r   r&   r'   r(   rf   r   rE   ÚgetrK   rL   )rp   rN   rO   rP   rj   rk   rl   ÚpZlogosZlogor)   r*   Zmatchesr`   ZguardadoÚeZactualr   )rp   r   r   rM   d   sp     ÿ" 
 $

  .
  ÿrM   )r,   NNN)r]   )r   NN)Ú__doc__r$   r   r	   r   r   Zzoneinfor   ÚImportErrorZbackports.zoneinfoZuuidr   Zhermes_football_v3dr   r   r+   rS   r\   ri   rM   r   r   r   r   Ú<module>   s   

