
    g                        d dl mZ d dlZd dlmZ d dlmZmZmZ er(d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ  G d d      Zy)    )annotationsN)contextmanager)TYPE_CHECKINGAnyCallable)Iterator)WidgetState)WidgetStates)RegisterWidgetResultTWidgetMetadata)QueryParams)SessionStatec                      e Zd ZU dZded<   ded<   ded<   ddZ	 	 	 	 	 	 dd	Zdd
ZddZddZ	ddZ
d dZed!d       Zd"dZd#dZd$dZd%dZd"dZd#dZd$dZd Zed&d       Zy)'SafeSessionStateav  Thread-safe wrapper around SessionState.

    When AppSession gets a re-run request, it can interrupt its existing
    ScriptRunner and spin up a new ScriptRunner to handle the request.
    When this happens, the existing ScriptRunner will continue executing
    its script until it reaches a yield point - but during this time, it
    must not mutate its SessionState.
    r   _statezthreading.RLock_lockCallable[[], None]_yield_callbackc                    t         j                  | d|       t         j                  | dt        j                                t         j                  | d|       y )Nr   r   r   )object__setattr__	threadingRLock)selfstateyield_callbacks      _/var/www/openai/venv/lib/python3.12/site-packages/streamlit/runtime/state/safe_session_state.py__init__zSafeSessionState.__init__-   sD     	451 	4)//*;<4!2NC    c                    | j                          | j                  5  | j                  j                  ||      cd d d        S # 1 sw Y   y xY wN)r   r   r   register_widget)r   metadatauser_keys      r   r#   z SafeSessionState.register_widget6   s5     	ZZ;;..xB ZZs   AAc                    | j                          | j                  5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr"   )r   r   r   on_script_will_rerun)r   latest_widget_statess     r   r'   z%SafeSessionState.on_script_will_rerun=   s4    ZZ
 KK,,-AB ZZs   AAc                |    | j                   5  | j                  j                  |       d d d        y # 1 sw Y   y xY wr"   )r   r   on_script_finished)r   widget_ids_this_runs     r   r*   z#SafeSessionState.on_script_finishedF   s&    ZZKK**+>? ZZs   2;c                z    | j                   5  | j                  j                          d d d        y # 1 sw Y   y xY wr"   )r   r   maybe_check_serializabler   s    r   r-   z)SafeSessionState.maybe_check_serializableJ   s#    ZZKK002 ZZs   1:c                z    | j                   5  | j                  j                         cddd       S # 1 sw Y   yxY w)zGReturn a list of serialized widget values for each widget with a value.N)r   r   get_widget_statesr.   s    r   r0   z"SafeSessionState.get_widget_statesN   s#    ZZ;;002 ZZs   1:c                |    | j                   5  | j                  j                  |      cd d d        S # 1 sw Y   y xY wr"   )r   r   is_new_state_value)r   r%   s     r   r2   z#SafeSessionState.is_new_state_valueS   s%    ZZ;;11(; ZZs   2;c                r    | j                   5  | j                  j                  cddd       S # 1 sw Y   yxY w)zAThe combined session and widget state, excluding keyless widgets.N)r   r   filtered_stater.   s    r   r4   zSafeSessionState.filtered_stateW   s"     ZZ;;-- ZZs   -6c                    | j                          | j                  5  | j                  |   cd d d        S # 1 sw Y   y xY wr"   r   r   r   r   keys     r   __getitem__zSafeSessionState.__getitem__]   s+    ZZ;;s# ZZs   6?c                    | j                          | j                  5  || j                  |<   d d d        y # 1 sw Y   y xY wr"   r6   r   r8   values      r   __setitem__zSafeSessionState.__setitem__b   s-    ZZ$DKK ZZs   6?c                    | j                          | j                  5  | j                  |= d d d        y # 1 sw Y   y xY wr"   r6   r7   s     r   __delitem__zSafeSessionState.__delitem__g   s+    ZZC  ZZs   4=c                    | j                          | j                  5  || j                  v cd d d        S # 1 sw Y   y xY wr"   r6   r7   s     r   __contains__zSafeSessionState.__contains__l   s+    ZZ$++% ZZs   5>c                D    	 | |   S # t         $ r t        | d      w xY wNz not found in session_state.KeyErrorAttributeErrorr7   s     r   __getattr__zSafeSessionState.__getattr__q   s6    	G9 	G C5(D!EFF	Gs    c                    || |<   y r"    r;   s      r   r   zSafeSessionState.__setattr__w   s    S	r    c                B    	 | |= y # t         $ r t        | d      w xY wrC   rD   r7   s     r   __delattr__zSafeSessionState.__delattr__z   s3    	GS	 	G C5(D!EFF	Gs    c                      fd j                   j                         D        }dj                  d |D              }d| dS )zHPresents itself as a simple dict of the underlying SessionState instancec              3  @   K   | ]  }|j                   |   f  y wr"   )r   ).0kr   s     r   	<genexpr>z,SafeSessionState.__repr__.<locals>.<genexpr>   s!     ?+>aq$++a.!+>s   z, c              3  0   K   | ]  \  }}| d |  yw)z: NrI   )rN   rO   vs      r   rP   z,SafeSessionState.__repr__.<locals>.<genexpr>   s     312aUms   {})r   _keysjoin)r   kvss   `  r   __repr__zSafeSessionState.__repr__   s<    ?4;;+<+<+>?II333A3bzr    c              #     K   | j                          | j                  5  | j                  j                   d d d        y # 1 sw Y   y xY wwr"   )r   r   r   query_paramsr.   s    r   r[   zSafeSessionState.query_params   s2     ZZ++*** ZZs   AA	AA
AN)r   r   r   r   )r$   zWidgetMetadata[T]r%   z
str | NonereturnzRegisterWidgetResult[T])r(   WidgetStatesProtor\   None)r+   zset[str]r\   r^   )r\   r^   )r\   zlist[WidgetStateProto])r%   strr\   bool)r\   zdict[str, Any])r8   r_   r\   r   )r8   r_   r<   r   r\   r^   )r8   r_   r\   r^   )r8   r_   r\   r`   )r\   zIterator[QueryParams])__name__
__module____qualname____doc____annotations__r   r#   r'   r*   r-   r0   r2   propertyr4   r9   r=   r?   rA   rG   r   rK   rY   r   r[   rI   r    r   r   r      s     ''DC)C5?C	 CC@33
< . .
$
%
!
&
GG + +r    r   )
__future__r   r   
contextlibr   typingr   r   r   collections.abcr    streamlit.proto.WidgetStates_pb2r	   WidgetStateProtor
   r]   streamlit.runtime.state.commonr   r   r   $streamlit.runtime.state.query_paramsr   %streamlit.runtime.state.session_stater   r   rI   r    r   <module>rp      s:    #  % / /(PRVV@Bk+ k+r    