U
    _×jÓ  ã                   @   sH   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ edd„ ƒZ	dS )é    N)Úcontextmanager)Úurljoin)Úvalidar_destino)ÚMAX_SEGMENTc                 #   sú   t | ƒ}tjtjddd�ddd��Æ}tdƒD ]¶}t |ƒ | d|¡�˜‰ ˆ jdkr‚ˆ j d	¡}|sht	d
ƒ‚t t
||ƒƒ}W 5 Q R £ q,ˆ  ¡  ˆ j d¡}|r®t|ƒtkr®t	dƒ‚‡ fdd„}|ƒ V  W 5 Q R £  W 5 Q R £ d S Q R X q,W 5 Q R X t	dƒ‚d S )Ng      4@g      @)ZconnectF)ZtimeoutZfollow_redirectsZ	trust_envé   ZGET)i-  i.  i/  i3  i4  ÚlocationzRedireccion sin destinozcontent-lengthzSegmento demasiado grandec                  3   s:   d} ˆ   d¡D ]&}| t|ƒ7 } | tkr.tdƒ‚|V  qd S )Nr   i   zLimite de segmento excedido)Z
iter_bytesÚlenr   Ú
ValueError)ZtotalZbloque©Z	respuesta© úhermes_hls_stream_v2.pyÚbloques-   s    ÿzabrir_segmento.<locals>.bloqueszDemasiadas redirecciones)r   ÚhttpxZClientZTimeoutÚrangeÚstreamZstatus_codeZheadersÚgetr	   r   Zraise_for_statusÚintr   )ZurlZactualZclienteÚ_ZdestinoZlongitudr   r   r
   r   Úabrir_segmento	   s4    ý
ÿ,r   )
r   Ú
contextlibr   Zurllib.parser   Zhermes_hls_securityr   Zhermes_hls_fetchr   r   r   r   r   r   Ú<module>   s   