
    5i                        d dl mZ d dlZd dlmZ d dlmZmZ er*d dl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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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(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      t/home/obispo/Crisostomo_bridge/mision_env/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   sD     	ZZ 	C;;..xB	C 	C 	Cs   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=   sC    ZZ 	C
 KK,,-AB	C 	C 	Cs   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   s5    ZZ 	@KK**+>?	@ 	@ 	@s   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 	3KK002	3 	3 	3s   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 	3;;002	3 	3 	3s   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   s0    ZZ 	<;;11(;	< 	< 	<s   2;c                    | j                          | j                  5  | j                  j                  ||       ddd       y# 1 sw Y   yxY w)zReset a new session state value to a given value
        without triggering the "state value cannot be modified" error.
        N)r   r   r   reset_state_value)r   r%   values      r   r4   z"SafeSessionState.reset_state_valueW   s@     	ZZ 	;KK))(E:	; 	; 	;s   AA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   r7   zSafeSessionState.filtered_state_   s-     ZZ 	.;;--	. 	. 	.s   -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__e   s6    ZZ 	$;;s#	$ 	$ 	$s   6?c                    | j                          | j                  5  || j                  |<   d d d        y # 1 sw Y   y xY wr"   r9   r   r;   r5   s      r   __setitem__zSafeSessionState.__setitem__j   s8    ZZ 	%$DKK	% 	% 	%s   6?c                    | j                          | j                  5  | j                  |= d d d        y # 1 sw Y   y xY wr"   r9   r:   s     r   __delitem__zSafeSessionState.__delitem__o   s6    ZZ 	!C 	! 	! 	!s   4=c                    | j                          | j                  5  || j                  v cd d d        S # 1 sw Y   y xY wr"   r9   r:   s     r   __contains__zSafeSessionState.__contains__t   s6    ZZ 	&$++%	& 	& 	&s   5>c                D    	 | |   S # t         $ r t        | d      w xY wNz not found in session_state.KeyErrorAttributeErrorr:   s     r   __getattr__zSafeSessionState.__getattr__y   s6    	G9 	G C5(D!EFF	Gs    c                    || |<   y r"    r>   s      r   r   zSafeSessionState.__setattr__   s    S	r    c                B    	 | |= y # t         $ r t        | d      w xY wrE   rF   r:   s     r   __delattr__zSafeSessionState.__delattr__   s3    	GS	 	G C5(D!EFF	Gs    c                      fd j                   j                         D        }dj                  d |D              }d| dS )zIPresents itself as a simple dict of the underlying SessionState instance.c              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: NrK   )rP   rQ   vs      r   rR   z,SafeSessionState.__repr__.<locals>.<genexpr>   s     312aUm3s   {})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   s=     ZZ 	+++***	+ 	+ 	+s   AA	AA
AN)r   r   r   r   returnNone)r$   zWidgetMetadata[T]r%   z
str | Noner^   zRegisterWidgetResult[T])r(   WidgetStatesProtor^   r_   )r+   zset[str]r^   r_   )r^   r_   )r^   zlist[WidgetStateProto])r%   strr^   bool)r%   ra   r5   z
Any | Noner^   r_   )r^   zdict[str, Any])r;   ra   r^   r   )r;   ra   r5   r   r^   r_   )r;   ra   r^   r_   )r;   ra   r^   rb   )r^   ra   )r^   zIterator[QueryParams])__name__
__module____qualname____doc____annotations__r   r#   r'   r*   r-   r0   r2   r4   propertyr7   r<   r?   rA   rC   rI   r   rM   r[   r   r]   rK   r    r   r   r      s     ''DC)C5?C	 CC@33
<; . .
$
%
!
&
GG + +r    r   )
__future__r   r   
contextlibr   typingr   r   collections.abcr   r    streamlit.proto.WidgetStates_pb2r	   WidgetStateProtor
   r`   streamlit.runtime.state.commonr   r   r   $streamlit.runtime.state.query_paramsr   %streamlit.runtime.state.session_stater   r   rK   r    r   <module>rr      s7    #  % %2PRVV@Bs+ s+r    