o
    0j                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	Z	ddl
mZ ddlmZ dd	lmZ dd
lmZmZ dZdZG dd deZG dd deZG dd deZG dd deZG dd dZ	d!dedededee dedB dedeeeB eB eB  fdd ZdS )"    N)deque)Iterator)Literal	TypedDict   )build_hf_headers)hf_raise_for_status   )	SSEClient)ApiGetReloadEventSourceDataApiGetReloadRequesti     c                   @   "   e Zd ZU ed ed< eed< dS )MultiReplicaStreamWarningwarningkindmessageN__name__
__module____qualname__r   __annotations__str r   r   c/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/huggingface_hub/_hot_reload/client.pyr   "      
 r   c                   @   s"   e Zd ZU ed ed< eed< dS )MultiReplicaStreamEventeventr   N)r   r   r   r   r   r   r   r   r   r   r   '   r   r   c                   @   r   )MultiReplicaStreamReplicaHashreplicaHashr   hashNr   r   r   r   r   r   ,   r   r   c                   @   s   e Zd ZU ed ed< dS )MultiReplicaStreamFullMatch	fullMatchr   N)r   r   r   r   r   r   r   r   r   r!   1   s   
 r!   c                	   @   sD   e Zd ZdededededB fddZded	ee eB fd
dZdS )ReloadClienthost	subdomainreplica_hashtokenNc                C   sB   | || dt }|| _tj| d| t|dtd| _d S )Nz--z/--replicas/+)r'   )base_urlheaderstimeout)replaceHOT_RELOADING_PORTr&   httpxZClientr   CLIENT_TIMEOUTclient)selfr$   r%   r&   r'   Z	base_hostr   r   r   __init__6   s   zReloadClient.__init__	reload_idreturnc                 c   s    t |d}| jjdd|d3}|jdkr|jW  d    S t| t|  D ]}|jdkr9t	
|jV  q+W d    d S 1 sEw   Y  d S )N)reloadIdPOSTz/get-reload)json   r   )r   r/   streamstatus_coder   r
   Z
iter_byteseventsr   r6   loadsdata)r0   r2   reqresr   r   r   r   
get_reloadF   s    



zReloadClient.get_reload)	r   r   r   r   r1   r   r   intr?   r   r   r   r   r#   5   s    
r#   
   
commit_shar$   r%   replica_hashesr'   max_retriesr3   c                 #   sd    fdd|D }i }t |D ]\}}	t|dkr#d|	jdV  d}
t|	|  }trj|
d  }
|kr;td| }dvrItd	|d
|dkrOdnd}dd| ddV  td t|	|  }ts/d}t	 }t |D ]0\}}|dkr|||< n|o|
||k }r|| qs|rd| dV  |sd|dV  qs|dkr|rddiV  qd S )Nc                    s   g | ]
}t  |d qS ))r$   r%   r&   r'   )r#   ).0r    r$   r%   r'   r   r   
<listcomp>\   s    z/multi_replica_reload_events.<locals>.<listcomp>r	   r   )r   r    r   zToo many retries reached)r7      zUnexpected status_code=z on `ReloadClient.get_reload`rH   r4   Zreplicar   zRetrying on unexpected z
 not found)r   r   r   Tr   )r   r   r   r"   )	enumeratelenr&   
isinstancer?   r@   	Exceptiontimesleepr   getappendpopleft)rB   r$   r%   rC   r'   rD   ZclientsZfirst_client_eventsZclient_indexr/   retriesr:   r9   subjectZ
full_matchZreplayZevent_indexr   r   rF   r   multi_replica_reload_eventsR   sD   


	


rT   )rA   )r6   rM   collectionsr   collections.abcr   typingr   r   r-   Zutils._headersr   Zutils._httpr   Z
sse_clientr
   typesr   r   r,   r.   r   r   r   r!   r#   r   listr@   rT   r   r   r   r   <module>   sF   #