U
    ÀÖj¼  ã                   @   s.   d dl Z d dlZd dlmZ G dd„ dƒZdS )é    N)ÚLockc                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚHLSRegistryé,  é'  c                 C   s   || _ || _i | _tƒ | _d S ©N)ÚttlÚmax_recursosÚrecursosr   Úlock)Úselfr   r   © r   úhermes_hls_registry.pyÚ__init__   s    zHLSRegistry.__init__c                    s:   t   ¡ ‰ ‡ fdd„| j ¡ D ƒ}|D ]}| j|= q$t|ƒS )Nc                    s    g | ]\}}ˆ |d  kr|‘qS )Úexpr   )Ú.0ÚclaveZvalor©Zahorar   r   Ú
<listcomp>   s   ÿz(HLSRegistry._limpiar.<locals>.<listcomp>)Útimer	   ÚitemsÚlen)r   Z	expiradosr   r   r   r   Ú_limpiar   s    
ÿ
zHLSRegistry._limpiarc              
   C   sf   | j �V |  ¡  t| jƒ| jkr(tdƒ‚t d¡}|t ¡ | j	 dœ| j|< |W  5 Q R £ S Q R X d S )Nz Limite de recursos HLS alcanzadoé   )Úurlr   )
r
   r   r   r	   r   ÚRuntimeErrorÚsecretsZtoken_urlsafer   r   )r   r   Úidentificadorr   r   r   Ú	registrar   s    ÿ
þzHLSRegistry.registrarc              
   C   s^   | j �N | j |¡}|s tdƒ‚t ¡ |d kr@| j|= tdƒ‚|d W  5 Q R £ S Q R X d S )NzRecurso desconocidor   zRecurso expirador   )r
   r	   ÚgetÚ
ValueErrorr   )r   r   Zrecursor   r   r   Úresolver'   s    zHLSRegistry.resolverc              
   C   s&   | j � |  ¡ W  5 Q R £ S Q R X d S r   )r
   r   )r   r   r   r   Úlimpiar4   s    zHLSRegistry.limpiarN)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r!   r   r   r   r   r      s
   

r   )r   r   Z	threadingr   r   r   r   r   r   Ú<module>   s   