
    ;3h?                        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
      Z G d d      Zy)    )annotationsN)OrderedDict)Iterator)copydeepcopy)TYPE_CHECKINGAny)BlocksStatec                  J    e Zd Zd Zd
dZd
dZddZddZddZd Z	dddZ
y	)StateHolderc                p    d| _         t               | _        i | _        t	        j
                         | _        y )Ni'  )capacityr   session_datatime_last_used	threadingLocklock)selfs    S/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/gradio/state_holder.py__init__zStateHolder.__init__   s)    <GM<>NN$	    c                B    || _         | |_        |j                  | _        y N)blocksstate_holderstate_session_capacityr   r   r   s     r   
set_blockszStateHolder.set_blocks   s    "55r   c                D    t               | _        | j                  |       y)z@Reset the state holder with new blocks. Used during reload mode.N)r   r   r    r   s     r   resetzStateHolder.reset   s    'Mr   c                    || j                   vr"t        | j                        | j                   |<   | j                  |       t        j                  j                         | j                  |<   | j                   |   S r   )r   SessionStater   updatedatetimenowr   r   
session_ids     r   __getitem__zStateHolder.__getitem__"   se    T...,8,EDj)J*2*;*;*?*?*AJ'  ,,r   c                    || j                   v S r   )r   r(   s     r   __contains__zStateHolder.__contains__)   s    T....r   c                   | j                   5  || j                  v r| j                  j                  |       t        | j                        | j                  kD  r| j                  j                  d       d d d        y # 1 sw Y   y xY w)NF)last)r   r   move_to_endlenr   popitemr(   s     r   r%   zStateHolder.update,   sn    YY 	6T...!!--j94$$%5!!))u)5		6 	6 	6s   A(A>>Bc                L    | j                   D ]  }| j                  |d        y )NT)expired_only)r   delete_stater(   s     r   delete_all_expired_statez$StateHolder.delete_all_expired_state3   s,     ++ 	=Jjt<	=r   c                    || j                   vry g }| j                   |   }|j                  D ]7  \  }}}|r|s|j                  |       |j                  |j                         9 |D ]  }|j
                  |=  y r   )r   state_componentsdelete_callbackappend_id
state_data)r   r)   r3   	to_deletesession_state	componentvalueexpireds           r   r4   zStateHolder.delete_state9   s    T...	))*5)6)G)G 	0%Iug7))%0  /	0 # 	4I((3	4r   Nr   r
   )r)   strreturnr$   )r)   rB   )F)r)   rB   r3   bool)__name__
__module____qualname__r   r    r"   r*   r,   r%   r5   r4    r   r   r   r      s*    %6
 -/6=
4r   r   c                  `    e Zd Zd
dZddZddZddZddZddZe	dd       Z
e	dd       Zy	)r$   c           
        t        |j                        | _        | j                  j                  j	                         D ci c]1  \  }}||j                  v r|| j                  j                  |g |      3 c}}| _        i | _        i | _        d| _	        t        j                  dd       rd| _        y d| _        y c c}}w )NFGRADIO_IS_E2E_TEST   i  )r   default_configblocks_configr   itemsconfig_for_blockconfig_valuesr;   
_state_ttl	is_closedosgetenvSTATE_TTL_WHEN_CLOSED)r   r   kvs       r   r   zSessionState.__init__G   s    !&"7"78
 **11779
1FMM! t!!221b!<<

 +- /6A 	"<@ 	"
s   6B<c                    | j                   j                  |   }|j                  r@|| j                  vr#t	        t        |dd             | j                  |<   | j                  |   S |S )Nr?   )rN   r   statefulr;   r   getattrr   keyblocks      r   r*   zSessionState.__getitem__Y   s[    ""))#.>>$//)'/w0M'N$??3''Lr   c                   ddl m} | j                  j                  j	                  |      }t        ||      rG|j                  t        j                  j                         f| j                  |<   || j                  |<   n|| j                  j                  |<   |r+| j                  j                  |g |      | j                  |<   y y Nr   r   )gradio.componentsr   rN   r   get
isinstancetime_to_liver&   r'   rR   r;   rP   rQ   )r   r]   r?   r   r^   s        r   __setitem__zSessionState.__setitem__b   s    +""))--c2eU#""!!%%'$DOOC  $)DOOC -2D%%c*&*&8&8&I&IR'Ds# r   c                j    | |   .| j                   j                  |g | |         | j                  |<   y y r   )rN   rP   rQ   )r   r]   s     r   _update_configzSessionState._update_configs   s=    9 &*&8&8&I&IRc'Ds# !r   c                    || j                   vrA| j                  j                  |g | j                  j                  |         | j                   |<   d| j                   |   v r|| j                   |   d   d<   y y )Npropsr?   )rQ   rN   rP   r   )r   r]   r?   s      r   _update_value_in_configz$SessionState._update_value_in_configy   s}    d(((&*&8&8&I&IR++2237'Ds# d((--8=Ds#G,W5 .r   c                    | j                   j                  j                  |      }|y|j                  r|| j                  v S || j                   j                  v S )NF)rN   r   rb   rZ   r;   r\   s      r   r,   zSessionState.__contains__   sS    ""))--c2=>>$//))$,,3333r   c              #  ^   K   | j                   j                         D ]  \  }}|s	|  y wr   )rQ   rO   )r   _configs      r   
componentszSessionState.components   s0     ++113 	IAv	s   #--c              #  |  K   ddl m} | j                  D ]  }| j                  j                  |   }t        ||      s)|| j                  v s8| j                  |   \  }}| j                  r| j                  }| j                  |   }||t        j                  j                         |z
  j                  |kD  f  y wr`   )ra   r   r;   rN   r   rc   rR   rS   rV   r&   r'   seconds)r   r   idr^   rd   
created_atr?   s          r   r7   zSessionState.state_components   s     +// 	B&&--b1E%'B$//,A+/??2+>(j>>#'#=#=L+&&**,z9BB\Q 	s   ;B<B<A/B<NrA   )r]   intrC   r	   )r]   rt   r?   r	   )r]   rt   )rC   zIterator[dict])rC   z!Iterator[tuple[State, Any, bool]])rE   rF   rG   r   r*   re   rg   rj   r,   propertyro   r7   rH   r   r   r$   r$   F   sH    
$">4  
  r   r$   )
__future__r   r&   rT   r   collectionsr   collections.abcr   r   r   typingr   r	   gradio.blocksr
   ra   r   r   r$   rH   r   r   <module>r{      s=    "  	  # $  %$'34 34lY Yr   