U
    ƒ`Øj-#  ã                   @   sÚ   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mZ d dlmZ d dl	Z	e	 
d¡Zddgddgd	d
gddgddgddgddgddgddgdddgdœ
Zd ddddgZdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zed'krÖeƒ  dS )(é    N)ÚdatetimeÚ	timedelta)ÚPathzAmerica/TijuanaÚaguilasZmexicaliÚ
naranjerosZ
hermosilloÚyaquisZobregonÚmayosZnavojoaÚcanerosZmochisÚalgodonerosZguasaveÚ	tomaterosZculiacanÚvenadosZmazatlanÚcharrosZjaliscoÚjaguaresZnayaritZtepic)
r   r   r   r   r	   r
   r   r   r   r   é   é   é
   é   c                 C   s2   d  dd„ t dt| ƒ ¡ ¡D ƒ¡} t dd| ¡S )NÚ c                 s   s    | ]}t  |¡d kr|V  qdS )ZMnN)ÚunicodedataÚcategory)Ú.0Úc© r   úhermes_lmp_v33_candidate.pyÚ	<genexpr>   s      znorm.<locals>.<genexpr>ZNFDz	[^a-z0-9])Újoinr   Z	normalizeÚstrÚlowerÚreÚsub)Úsr   r   r   Únorm   s    $r!   c                    s6   t | ƒ‰ ‡ fdd„t ¡ D ƒ}t|ƒdkr2|d S d S )Nc                    s*   g | ]"\}}t ‡ fd d„|D ƒƒr|‘qS )c                 3   s   | ]}t |ƒˆ kV  qd S ©N©r!   ©r   Úx©Únr   r   r      s     z&identify.<locals>.<listcomp>.<genexpr>)Úany)r   ÚkÚnamesr&   r   r   Ú
<listcomp>   s      zidentify.<locals>.<listcomp>é   r   )r!   ÚALIASESÚitemsÚlen)r    Úfoundr   r&   r   Úidentify   s    r1   c                 C   s<   | sd S t  t| ƒ dd¡¡}|jd kr2t |¡S | t¡S )NÚZz+00:00)r   Zfromisoformatr   ÚreplaceZtzinfoÚTZZlocalizeZ
astimezone)r    Údr   r   r   Údt   s     r6   c            2   
      sp  t jdd�} |  d¡ | jddd� | jddd	� | jd
dd� | jdddd� |  ¡ }|jrht|jƒnt t¡}t 	t
|jƒjdd�¡}| di ¡}g }dD ]"}| dd„ | |¡p¸g D ƒ¡ qžt
|jƒ}t
t|ƒd ƒ}tt|ƒdƒ}	t |	 ¡ tj¡ tdƒ | ¡ �r t 	|jdd�¡ni i dœ}
t|
tƒ�s>tdƒ‚|
 di ¡ |
 di ¡ t|
d tƒ�rvt|
d tƒ�s~tdƒ‚d ‰|j�rt
|jƒjdd�}tƒ ‰| ¡ D ]\}| d¡�rªt | !dd¡d  ƒ‰ t" #¡ D ],\}}t$‡ fd!d„|D ƒƒ�rÖˆ %|¡ �qÖ�qªi }|D ]Š}t&| d"d#¡ƒt&| d$d#¡ƒ }}t| d%¡ƒ}|�r|�r||k�s|�sd�q| '¡ d& t(||ƒ d& t)||ƒ }||||f||< �qtd'ƒ td(| '¡ d)t*|ƒd*ˆd k�rÆd+nd,ƒ g }t+| #¡ d-d.„ d/�D �]r\}\}}}}|
d  |i ¡}| d0¡}|dk�r.| ,d1d ¡ d2}�n|d3k�rz|j-�rz| d1| '¡ ¡ t|d1 ƒ}||t.d4d5� k�rtd6nd7}nÂ|d3k�rŠd8}n²|d9k�ršd:}n¢||t.d;d5� k �r´d<}nˆ||t.d4d5� k�rÎd=}nnˆd k�rÞd>}n^|ˆk�rø|ˆk�rød?}nDd@d /‡fdAd„||fD ƒ¡ }| 0||t.d;d5� |t.d4d5� f¡ tdB 1||| '¡ ||¡ƒ �qä|�r$|
d }| dCi ¡}g }g }| #¡ D ]>\}\}}}}|t.d;d5� }|t.d4d5� }| 0|||f¡ �q„t+|dDd.„ d/�D ]p\}}}|�r ||d  dE  t.dFd5�k�r| 0|||gdGœ¡ n,|d  d  0|¡ t)|d  dH |ƒ|d  dH< �qÔdI} |D �]Æ}!|!dE }"|!dH }#|" '¡ }$| |$g |!d dJœ¡}%tƒ }&|!d D ]l}'| |'¡}(|(�s¨�q�|(\})}}}*|) d0¡}|dKk�rÌ�q�ˆd k	�r�||fD ]}+|+ˆk�rÞ|& %|+¡ �qÞ�q�ˆd k�rtdL|$dMƒ �qN|&�s.tdL|$dNƒ �qN||"k �rHtdL|$dOƒ �qNdIdFd;dPd4g},|% dQg ¡}-t2|,ƒD ]¨\}.}/|"t.|/d5� }0|0|#k�rŽ�qj||0k �rœ�qj|.|-k�rª�qj||0t.d3d5� k�rÞ|- 0|.¡ tdL|$dR|.d ƒ �qj|- 0|.¡ | d7 } tdS|$dT|.d dUt*|,ƒƒ  �qN�qj�qNtdV| ƒ ntdWƒ | 3|j4dX ¡}1|1j5tj6|
d3dYdZ�dd� |1 7|¡ td[|d\ƒ d S )]Nz*Simulacion LMP V3: cero solicitudes de red)ZdescriptionÚepg_jsonz
--playlistz<Snapshot local playlist.m3u, previamente guardado (opcional))Úhelpz--statezhermes_lmp_v3_state.json)Údefaultz--nowzFecha ISO para simulacionz--assume-final-2Ú
store_truez'SOLO PRUEBAS: asumir que EPG 2 es final)Úactionr8   zutf-8)ÚencodingÚresponse)ÚgamesZ	prevGamesZ	nextGamesc                 s   s   | ]}t |tƒr|V  qd S r"   )Ú
isinstanceÚdict)r   Úgr   r   r   r   ,   s     
 zmain.<locals>.<genexpr>z.lockza+z'HERMES LMP: BLOQUEO EXCLUSIVO ADQUIRIDO)r>   ÚproviderzEstado invalidor>   rB   z#EXTINF:ú,r,   éÿÿÿÿc                 3   s   | ]}t |ƒˆ kV  qd S r"   r#   r$   )Úlabelr   r   r   ?   s     ZawayTeamShortr   ZhomeTeamShortZlocalFullDateú|z&=== HERMES LMP V3: SOLO SIMULACION ===zHORA:z| PARTIDOS:z| PLAYLIST:zSIN SNAPSHOTzSNAPSHOT LOCALc                 S   s   | d d S )Nr,   é   r   )Úitemr   r   r   Ú<lambda>J   ó    zmain.<locals>.<lambda>)ÚkeyZ
gameStatusZfirst_final_seenzEN VIVO: mantener accesor   é   )ZminuteszSIMULAR CIERREzMARGEN POSTPARTIDOzESTADO 2 SIN VALIDAR: NO CERRAR)r   r,   r   zESTADO DESCONOCIDO: NO CERRARr   zPREVIO: no abrirzFUERA DE VENTANA: no reintentarz5PENDIENTE VERIFICACION: falta snapshot administrativoz$CANALES PRESENTES: sin actualizacionzFALTANTES: c                 3   s   | ]}|ˆ kr|V  qd S r"   r   r$   )Úpresentr   r   r   b   s      z{} vs {} | {} | EPG={} | {}Úwindowsc                 S   s   | d S )Nr,   r   )r%   r   r   r   rI   r   rJ   Úanchorr   )rO   Úlatestr>   rP   r   )Zattemptsr>   )r   r,   zVENTANA:zSIN PLAYLIST: NO ACTUALIZARz CANALES COMPLETOS: NO ACTUALIZARzAUN NO INICIA: NO ACTUALIZARé   Z
slots_donezSLOT ANTIGUO OMITIDO:zO11 SIMULADO: VENTANAZSLOTZDEz TOTAL ACTUALIZACIONES SIMULADAS:z-O11 SIMULADO: NINGUNA ACTUALIZACION NECESARIAz.tmpF)ÚindentZensure_asciizESTADO LOCAL:z0| O11: CERO PETICIONES | PRODUCCION: SIN CAMBIOS)8ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsÚnowr6   r   r4   ÚjsonÚloadsr   r7   Z	read_textÚgetÚextendÚstater   ÚopenÚfcntlZflockÚfilenoZLOCK_EXÚprintÚexistsr?   r@   Ú
ValueErrorÚ
setdefaultZplaylistÚsetÚ
splitlinesÚ
startswithr!   Úsplitr-   r.   r(   Úaddr1   Z	isoformatÚminÚmaxr/   ÚsortedÚpopZassume_final_2r   r   ÚappendÚformatÚ	enumerateZ	with_nameÚnameZ
write_textÚdumpsr3   )2ÚpÚarW   Zepgr=   r>   ZsectionÚpathZ	lock_pathZ	lock_filer\   ZcontentÚlineZslugÚaliasesÚuniquerA   ZawayÚhomeÚstartrK   ZdueÚentryÚcodeZdecisionÚfirstrB   rN   ZgruposZ
calendarioZprepararZlimiteZaccionesZgruporO   rP   Z	window_idZwindowZ	faltantesZgame_keyZ	game_dataZgameZ
game_startZteamZhorariosZ
ejecutadosZslotZminutosZmomentoZtmpr   )rE   rM   r   Úmain   s@   
 
&     " $(&




 $"ý

þ





ÿÿ
ÿ



 ÿ
    þ
r}   Ú__main__)r^   rS   rX   r   r   r   r   Úpathlibr   ZpytzÚtimezoner4   r-   ZRETRY_MINUTESr!   r1   r6   r}   Ú__name__r   r   r   r   Ú<module>   s.    
    ü 5 