
    &e+                         d dl Z d dlmZ d dlmZmZmZmZmZm	Z	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dS )    N)contextmanager)AnyCallableDictIteratorListOptionalSet)WidgetState)WidgetStates)RegisterWidgetResultTWidgetMetadata)QueryParams)SessionStatec                      e Zd ZU dZeed<   ej        ed<   eg df         ed<   dedeg df         fdZ	d	e
e         d
ee         dee         fdZdeddfdZdee         ddfdZd dZdee         fdZd
edefdZedeeef         fd            ZdedefdZdededdfdZdeddfdZ dedefdZ!dedefdZ"dededdfdZ#deddfdZ$d Z%e&de'e(         fd            Z)dS )!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.
    _state_lockN_yield_callbackstateyield_callbackc                     t                               | d|           t                               | dt          j                               t                               | d|           d S )Nr   r   r   )object__setattr__	threadingRLock)selfr   r   s      Jlib/python3.11/site-packages/streamlit/runtime/state/safe_session_state.py__init__zSafeSessionState.__init__(   s]     	45111 	4)/*;*;<<<4!2NCCCCC    metadatauser_keyreturnc                     |                                   | j        5  | j                            ||          cd d d            S # 1 swxY w Y   d S N)r   r   r   register_widget)r   r"   r#   s      r   r'   z SafeSessionState.register_widget1   s     	Z 	C 	C;..xBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C   AAAlatest_widget_statesc                     |                                   | j        5  | j                            |           d d d            d S # 1 swxY w Y   d S r&   )r   r   r   on_script_will_rerun)r   r)   s     r   r+   z%SafeSessionState.on_script_will_rerun8   s    Z 	C 	C
 K,,-ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cr(   widget_ids_this_runc                 z    | j         5  | j                            |           d d d            d S # 1 swxY w Y   d S r&   )r   r   on_script_finished)r   r,   s     r   r.   z#SafeSessionState.on_script_finishedA   s    Z 	@ 	@K**+>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   044c                 x    | j         5  | j                                         d d d            d S # 1 swxY w Y   d S r&   )r   r   maybe_check_serializabler   s    r   r0   z)SafeSessionState.maybe_check_serializableE   s    Z 	3 	3K00222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3   /33c                 v    | j         5  | j                                        cddd           S # 1 swxY w Y   dS )zGReturn a list of serialized widget values for each widget with a value.N)r   r   get_widget_statesr1   s    r   r4   z"SafeSessionState.get_widget_statesI   s    Z 	3 	3;0022	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   .22c                 x    | j         5  | j                            |          cd d d            S # 1 swxY w Y   d S r&   )r   r   is_new_state_value)r   r#   s     r   r6   z#SafeSessionState.is_new_state_valueN   s    Z 	< 	<;11(;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r2   c                 \    | j         5  | j        j        cddd           S # 1 swxY w Y   dS )zAThe combined session and widget state, excluding keyless widgets.N)r   r   filtered_stater1   s    r   r8   zSafeSessionState.filtered_stateR   sx     Z 	. 	.;-	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   !%%keyc                     |                                   | j        5  | j        |         cd d d            S # 1 swxY w Y   d S r&   r   r   r   r   r9   s     r   __getitem__zSafeSessionState.__getitem__X   s    Z 	$ 	$;s#	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   6::valuec                     |                                   | j        5  || j        |<   d d d            d S # 1 swxY w Y   d S r&   r;   r   r9   r>   s      r   __setitem__zSafeSessionState.__setitem__]   s    Z 	% 	%$DK	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   488c                 ~    |                                   | j        5  | j        |= d d d            d S # 1 swxY w Y   d S r&   r;   r<   s     r   __delitem__zSafeSessionState.__delitem__b   s    Z 	! 	!C 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   	266c                 ~    |                                   | j        5  || j        v cd d d            S # 1 swxY w Y   d S r&   r;   r<   s     r   __contains__zSafeSessionState.__contains__g   s    Z 	& 	&$+%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&rD   c                 T    	 | |         S # t           $ r t          | d          w xY wNz not found in session_state.KeyErrorAttributeErrorr<   s     r   __getattr__zSafeSessionState.__getattr__l   sH    	G9 	G 	G 	G C!E!E!EFFF	Gs   
 'c                     || |<   d S r&    r@   s      r   r   zSafeSessionState.__setattr__r   s    S			r!   c                 N    	 | |= d S # t           $ r t          | d          w xY wrH   rI   r<   s     r   __delattr__zSafeSessionState.__delattr__u   sI    	GS			 	G 	G 	G C!E!E!EFFF	Gs    $c                       fd j                                         D             }d                    d |D                       }d| dS )zHPresents itself as a simple dict of the underlying SessionState instancec              3   6   K   | ]}|j         |         fV  d S r&   )r   ).0kr   s     r   	<genexpr>z,SafeSessionState.__repr__.<locals>.<genexpr>}   s.      ??aq$+a.!??????r!   z, c              3   *   K   | ]\  }}| d |V  dS )z: NrN   )rS   rT   vs      r   rU   z,SafeSessionState.__repr__.<locals>.<genexpr>~   s0      331mmamm333333r!   {})r   _keysjoin)r   kvss   `  r   __repr__zSafeSessionState.__repr__{   sX    ????4;+<+<+>+>???II3333333Azzzr!   c              #      K   |                                   | j        5  | j        j        V  d d d            d S # 1 swxY w Y   d S r&   )r   r   r   query_paramsr1   s    r   r`   zSafeSessionState.query_params   s      Z 	+ 	++****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   :>>)r$   N)*__name__
__module____qualname____doc__r   __annotations__r   r   r   r    r   r   r	   strr   r'   WidgetStatesProtor+   r
   r.   r0   r   WidgetStateProtor4   boolr6   propertyr   r   r8   r=   rA   rC   rF   rL   r   rP   r^   r   r   r   r`   rN   r!   r   r   r      s          ?b$h''''Dl DHRX<N D D D DC&q)C5=c]C	a	 C C C CC9J Ct C C C C@c#h @4 @ @ @ @3 3 3 334(8#9 3 3 3 3
<3 <4 < < < < .S#X . . . X.
$s $s $ $ $ $
%s %3 %4 % % % %
!s !t ! ! ! !
& & & & & &
Gs Gs G G G Gs 3 4    Gs Gt G G G G   +h{3 + + + ^+ + +r!   r   )r   
contextlibr   typingr   r   r   r   r   r	   r
    streamlit.proto.WidgetStates_pb2r   rh   r   rg   streamlit.runtime.state.commonr   r   r   $streamlit.runtime.state.query_paramsr   %streamlit.runtime.state.session_stater   r   rN   r!   r   <module>rq      s        % % % % % % E E E E E E E E E E E E E E E E E E L L L L L L N N N N N N R R R R R R R R R R < < < < < < > > > > > >k+ k+ k+ k+ k+ k+ k+ k+ k+ k+r!   