U
    �^Øjc"  ã                   @   sÖ   d 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 ))zTHermes LMP V3 DRY RUN: no network, no O11 calls, no production changes. Python 3.8+.é    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_v32_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            0   
      s6  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ƒ}| ¡ ræt 	|jdd�¡ni i dœ}t|tƒ�stdƒ‚| di ¡ | di ¡ t|d tƒ�r<t|d tƒ�sDtdƒ‚d ‰|j�rÎt
|jƒjdd�}	tƒ ‰|	 ¡ D ]\}
|
 d¡�rpt|
 dd¡d ƒ‰ t ¡ D ],\}}t‡ fdd„|D ƒƒ�rœˆ |¡ �qœ�qpi }|D ]Š}t| dd ¡ƒt| d!d ¡ƒ }}t| d"¡ƒ}|�rÖ|�rÖ||k�sÖ|�s*�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 ¡}| d-¡}|dk�rô| &d.d ¡ d/}�n|d0k�r@|j'�r@| d.|  ¡ ¡ t|d. ƒ}||t(d1d2� k�r:d3nd4}nÂ|d0k�rPd5}n²|d6k�r`d7}n¢||t(d8d2� k �rzd9}nˆ||t(d1d2� k�r”d:}nnˆd k�r¤d;}n^|ˆk�r¾|ˆk�r¾d<}nDd=d )‡fd>d„||fD ƒ¡ }| *||t(d8d2� |t(d1d2� f¡ t#d? +|||  ¡ ||¡ƒ �qª|�rê|d }| d@i ¡}g }g }| ¡ D ]>\}\}}}}|t(d8d2� }|t(d1d2� }| *|||f¡ �qJt%|dAd+„ d,�D ]p\}}}|�rÆ||d dB  t(dCd2�k�rÜ| *|||gdDœ¡ n,|d d  *|¡ t"|d dE |ƒ|d dE< �qšdF}|D �]Æ}|dB } |dE }!|   ¡ }"| |"g |d dGœ¡}#tƒ }$|d D ]l}%| |%¡}&|&�sn�qV|&\}'}}}(|' d-¡}|dHk�r’�qVˆd k	�rV||fD ]})|)ˆk�r¤|$ |)¡ �q¤�qVˆd k�rÞt#dI|"dJƒ �q|$�sôt#dI|"dKƒ �q|| k �rt#dI|"dLƒ �qdFdCd8dMd1g}*|# dNg ¡}+t,|*ƒD ]¨\},}-| t(|-d2� }.|.|!k�rT�q0||.k �rb�q0|,|+k�rp�q0||.t(d0d2� k�r¤|+ *|,¡ t#dI|"dO|,d ƒ �q0|+ *|,¡ |d7 }t#dP|"dQ|,d dRt$|*ƒƒ  �q�q0�qt#dS|ƒ nt#dTƒ | -|j.dU ¡}/|/j/tj0|d0dVdW�dd� |/ 1|¡ t#dX|dYƒ d S )ZNz*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>)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>E   ó    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   ]   s      z{} vs {} | {} | EPG={} | {}Úwindowsc                 S   s   | d S )Nr,   r   )r%   r   r   r   rI   m   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)2ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsÚnowr6   r   r4   ÚjsonÚloadsr   r7   Z	read_textÚgetÚextendÚstateÚexistsr?   r@   Ú
ValueErrorÚ
setdefaultZplaylistÚsetÚ
splitlinesÚ
startswithr!   Úsplitr-   r.   r(   Úaddr1   Z	isoformatÚminÚmaxÚprintr/   ÚsortedÚpopZassume_final_2r   r   ÚappendÚformatÚ	enumerateZ	with_nameÚnameZ
write_textÚdumpsr3   )0ÚpÚarW   Zepgr=   r>   ZsectionÚpathr\   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   s8   
 
$     " $(&




 $"ý

þ





ÿÿ
ÿ



 ÿ
    þ
rz   Ú__main__)Ú__doc__rS   rX   r   r   r   r   Úpathlibr   ZpytzÚtimezoner4   r-   ZRETRY_MINUTESr!   r1   r6   rz   Ú__name__r   r   r   r   Ú<module>   s.    
    ü 1 