o
     
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   U/home/kuhnn/.local/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&   httpxClientr   CLIENT_TIMEOUTclient)selfr$   r%   r&   r'   	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   r0   streamstatus_coder   r
   
iter_byteseventsr   r8   loadsdata)r1   r4   reqresr   r   r   r   
get_reloadF   s    



zReloadClient.get_reload)	r   r   r   r   r3   r   r   intrB   r   r   r   r   r#   5   s    
r#   
   
commit_shar$   r%   replica_hashesr'   max_retriesr5   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)r9      zUnexpected status_code=z on `ReloadClient.get_reload`rK   r6   replicar   zRetrying on unexpected z
 not found)r   r   r   Tr   )r   r   r   r"   )	enumeratelenr&   
isinstancerB   rC   	Exceptiontimesleepr   getappendpopleft)rE   r$   r%   rF   r'   rG   clientsfirst_client_eventsclient_indexr0   retriesr=   r;   subject
full_matchreplayevent_indexr   r   rI   r   multi_replica_reload_eventsR   sD   


	


r^   )rD   )r8   rQ   collectionsr   collections.abcr   typingr   r   r-   utils._headersr   utils._httpr   
sse_clientr
   typesr   r   r,   r/   r   r   r   r!   r#   r   listrC   r^   r   r   r   r   <module>   sF   #