o
    ٷi                     @  s   d dl mZ d dlZ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mZmZ er<d dlmZ d dlmZ G d	d
 d
ZG dd dZdS )    )annotationsN)OrderedDict)Iterator)copydeepcopy)TYPE_CHECKINGAny)BlocksStatec                   @  sP   e Zd Zdd ZdddZdddZdddZdddZdd ZddddZ	dS )StateHolderc                 C  s"   d| _ t | _i | _t | _d S )Ni'  )capacityr   session_datatime_last_used	threadingLocklock)self r   G/home/ubuntu/.local/lib/python3.10/site-packages/gradio/state_holder.py__init__   s   zStateHolder.__init__blocksr	   c                 C  s   || _ | |_|j| _d S N)r   state_holderstate_session_capacityr   r   r   r   r   r   
set_blocks   s   zStateHolder.set_blocks
session_idstrreturnSessionStatec                 C  s>   || j vrt| j| j |< | | tj | j|< | j | S r   )r   r    r   updatedatetimenowr   r   r   r   r   r   __getitem__   s
   


zStateHolder.__getitem__c                 C  s
   || j v S r   )r   r$   r   r   r   __contains__#   s   
zStateHolder.__contains__c                 C  sp   | j + || jv r| j| t| j| jkr&| jjdd W d    d S W d    d S 1 s1w   Y  d S )NF)last)r   r   move_to_endlenr   popitemr$   r   r   r   r!   &   s   
"zStateHolder.updatec                 C  s   | j D ]	}| j|dd qd S )NT)expired_only)r   delete_stater$   r   r   r   delete_all_expired_state-   s   
z$StateHolder.delete_all_expired_stateFr+   boolc                 C  sb   || j vrd S g }| j | }|jD ]\}}}|r|r%|| ||j q|D ]}|j|= q(d S r   )r   state_componentsdelete_callbackappend_id
state_data)r   r   r+   	to_deletesession_state	componentvalueexpiredr   r   r   r,   3   s   



zStateHolder.delete_stateNr   r	   )r   r   r   r    )r   r   )F)r   r   r+   r.   )
__name__
__module____qualname__r   r   r%   r&   r!   r-   r,   r   r   r   r   r      s    



r   c                   @  sd   e Zd ZdddZdd	d
ZdddZdddZdddZdddZe	dddZ
e	d ddZdS )!r    r   r	   c                   s\   t  j_ fddjj D _i _i _d_t	
dd r)d_d S d_d S )Nc                   s,   i | ]\}}| j v r|j|g |qS r   )r   blocks_configconfig_for_block).0kvr   r   r   r   
<dictcomp>E   s
    
z)SessionState.__init__.<locals>.<dictcomp>FGRADIO_IS_E2E_TEST   i  )r   default_configr=   r   itemsconfig_valuesr3   
_state_ttl	is_closedosgetenvSTATE_TTL_WHEN_CLOSEDr   r   rB   r   r   A   s   
zSessionState.__init__keyintr   r   c                 C  s@   | j j| }|jr|| jvrtt|dd | j|< | j| S |S )Nr7   )r=   r   statefulr3   r   getattrr   rN   blockr   r   r   r%   S   s   

zSessionState.__getitem__r7   c                 C  st   ddl m} | jj|}t||r#|jtj f| j	|< || j
|< n|| jj|< |r8| j|g || j|< d S d S Nr   r
   )gradio.componentsr   r=   r   get
isinstancetime_to_liver"   r#   rI   r3   r>   rH   )r   rN   r7   r   rS   r   r   r   __setitem__\   s   

zSessionState.__setitem__c                 C  s.   | | d ur| j |g | | | j|< d S d S r   )r=   r>   rH   )r   rN   r   r   r   _update_configm   s
   
zSessionState._update_configc                 C  sP   || j vr| j|g | jj| | j |< d| j | v r&|| j | d d< d S d S )Npropsr7   )rH   r=   r>   r   )r   rN   r7   r   r   r   _update_value_in_configs   s   

z$SessionState._update_value_in_configc                 C  s6   | j j|}|d u rdS |jr|| jv S || j jv S )NF)r=   r   rV   rP   r3   rR   r   r   r   r&   {   s   
zSessionState.__contains__Iterator[dict]c                 c  s$    | j  D ]	\}}|r|V  qd S r   )rH   rG   )r   _configr   r   r   
components   s   zSessionState.components!Iterator[tuple[State, Any, bool]]c                 c  s    ddl m} g }| jD ]>}|| jjvr|| q| jj| }t||rJ|| jv rJ| j| \}}| jr7| j	}| j| }||t
j
 | j|kfV  q|D ]}| j|= qMd S rT   )rU   r   r3   r=   r   r1   rW   rI   rJ   rM   r"   r#   seconds)r   r   state_ids_to_deleter2   rS   rX   
created_atr7   r   r   r   r/      s*   



zSessionState.state_componentsNr9   )rN   rO   r   r   )rN   rO   r7   r   )rN   rO   )r   r]   )r   ra   )r:   r;   r<   r   r%   rY   rZ   r\   r&   propertyr`   r/   r   r   r   r   r    @   s    


	


	r    )
__future__r   r"   rK   r   collectionsr   collections.abcr   r   r   typingr   r   gradio.blocksr	   rU   r   r   r    r   r   r   r   <module>   s    0