U
    ÄŠÚj$  ã                   @   s€   d Z ddlZddlZddlZddlmZmZ ddlmZ 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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   ZRowZrow_factoryÚexecute)ZteamÚdbZ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œ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   )r,   ÚidZpartidoZfecha_panelÚrefrescar_panel)Úallr   ÚfromisoformatÚreplaceÚtzinfoÚ
astimezoner   ÚutcÚ
ValueErrorÚAttributeErrorr   Úhexr!   r"   r   r#   r   Ú	isoformatr   ÚdateÚnowÚfetchoneÚbool)	r   r   Z	start_isoZleagueZdtÚevent_idr$   ÚverifyZvisibler   r   r   Úcreate_card   s8    
 
 
    ÿþ
ÿrH   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}r,   ZID_INVALIDOr/   r0   r1   z'SELECT home,away FROM events WHERE id=?ZNO_ENCONTRADAr2   ú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=?r3   ZDELETEr   r4   é   ú&SELECT COUNT(*) FROM events WHERE id=?ZBORRADAr5   )r,   r6   r7   )r)   r*   r   Ú	fullmatchr!   r"   r   r#   rD   r   rC   r   r=   rA   rE   )rF   r$   ÚrowrG   Zrestanter   r   r   Údelete_card+   s$    
 

&ÿ rQ   é   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   )Ú	timedeltar,   ZHORAS_INVALIDASiÐ  )Zhoursé   r0   r1   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 eventsr-   r.   N)r;   rI   rJ   rK   rL   r3   ZPURGEzhoras_gracia=c                 3   s$   | ]}ˆ   d |f¡ ¡ d V  qdS )rN   r   N)r#   rD   )r
   Úeid©rG   r   r   r   Y   s     z-purgar_partidos_concluidos.<locals>.<genexpr>ZPURGA_COMPLETADAZPURGA_INCOMPLETAT)r,   ÚokÚ
eliminadosZids_eliminadosr7   )r   rS   ÚfloatÚ	TypeErrorr>   rC   r   r=   r!   r"   r   r#   Zfetchallr9   r*   r:   r;   r<   ÚappendrA   ÚsumrE   r+   )
Zhoras_graciarS   ZhorasZlimiterX   r$   rU   ZinicioZfechaZ	restantesr   rV   r   Úpurgar_partidos_concluidos?   sF       


   
ÿ  ÿr]   )r&   )rR   )Ú__doc__r!   r   r	   r   r   Zzoneinfor   Zuuidr   Zhermes_football_v3dr   r   r%   rH   rQ   r]   r   r   r   r   Ú<module>   s   
