
     khQ                        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                  B    e Zd Z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    O/opt/mcp/mcp-sentiment/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                    || 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_state-   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&   r0   	to_deletesession_state	componentvalueexpireds           r   r1   zStateHolder.delete_state3   s    T...	))*5)6)G)G 	0%Iug7))%0  /	0 # 	4I((3	4r   Nr   r
   )r&   strreturnr!   )r&   r?   )F)r&   r?   r0   bool)
__name__
__module____qualname__r   r   r'   r)   r"   r2   r1    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_valuesr8   
_state_ttl	is_closedosgetenvSTATE_TTL_WHEN_CLOSED)r   r   kvs       r   r   zSessionState.__init__A   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<   )rK   r   statefulr8   r   getattrr   keyblocks      r   r'   zSessionState.__getitem__S   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   rK   r   get
isinstancetime_to_liver#   r$   rO   r8   rM   rN   )r   rZ   r<   r   r[   s        r   __setitem__zSessionState.__setitem__\   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   )rK   rM   rN   )r   rZ   s     r   _update_configzSessionState._update_configm   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<   )rN   rK   rM   r   )r   rZ   r<   s      r   _update_value_in_configz$SessionState._update_value_in_configs   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)rK   r   r_   rW   r8   rY   s      r   r)   zSessionState.__contains__{   sS    ""))--c2=>>$//))$,,3333r   c              #  ^   K   | j                   j                         D ]  \  }}|s	|  y wr   )rN   rL   )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]   )r^   r   r8   rK   r   r`   rO   rP   rS   r#   r$   seconds)r   r   idr[   ra   
created_atr<   s          r   r4   zSessionState.state_components   s     +// 	B&&--b1E%'B$//,A+/??2+>(j>>#'#=#=L+&&**,z9BB\Q 	s   ;B<B<A/B<Nr>   )rZ   intr@   r	   )rZ   rq   r<   r	   )rZ   rq   )r@   zIterator[dict])r@   z!Iterator[tuple[State, Any, bool]])rB   rC   rD   r   r'   rb   rd   rg   r)   propertyrl   r4   rE   r   r   r!   r!   @   sH    
$">4  
  r   r!   )
__future__r   r#   rQ   r   collectionsr   collections.abcr   r   r   typingr   r	   gradio.blocksr
   r^   r   r   r!   rE   r   r   <module>rx      s=    "  	  # $  %$'-4 -4`Y Yr   