o
    ,&]i                     @  s   d dl mZ d dlZd dlmZ d dlmZmZ erDd 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 dZdS )    )annotationsN)contextmanager)TYPE_CHECKINGAny)CallableIterator)WidgetState)WidgetStates)RegisterWidgetResultTWidgetMetadata)QueryParams)SessionStatec                   @  s   e Zd ZU dZded< ded< ded< dCddZdDddZdEddZdFddZdGddZ	dHd d!Z
dId$d%ZdJd(d)ZedKd+d,ZdLd/d0ZdMd1d2ZdNd3d4ZdOd5d6ZdLd7d8ZdMd9d:ZdNd;d<ZdPd=d>ZedQd@dAZdBS )R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_callbackstateyield_callbackreturnNonec                 C  s2   t | d| t | dt  t | d| d S )Nr   r   r   )object__setattr__	threadingRLock)selfr   r    r   h/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/streamlit/runtime/state/safe_session_state.py__init__-   s   zSafeSessionState.__init__metadataWidgetMetadata[T]user_key
str | NoneRegisterWidgetResult[T]c                 C  s@   |    | j | j||W  d    S 1 sw   Y  d S N)r   r   r   register_widget)r   r    r"   r   r   r   r&   6   s   $z SafeSessionState.register_widgetlatest_widget_statesWidgetStatesProtoc                 C  s@   |    | j | j| W d    d S 1 sw   Y  d S r%   )r   r   r   on_script_will_rerun)r   r'   r   r   r   r)   =   s   "z%SafeSessionState.on_script_will_rerunwidget_ids_this_runset[str]c                 C  s8   | j  | j| W d    d S 1 sw   Y  d S r%   )r   r   on_script_finished)r   r*   r   r   r   r,   F   s   "z#SafeSessionState.on_script_finishedc                 C  s6   | j  | j  W d    d S 1 sw   Y  d S r%   )r   r   maybe_check_serializabler   r   r   r   r-   J   s   "z)SafeSessionState.maybe_check_serializablelist[WidgetStateProto]c                 C  s4   | j  | j W  d   S 1 sw   Y  dS )zGReturn a list of serialized widget values for each widget with a value.N)r   r   get_widget_statesr.   r   r   r   r0   N   s   $z"SafeSessionState.get_widget_statesstrboolc                 C  s6   | j  | j|W  d    S 1 sw   Y  d S r%   )r   r   is_new_state_value)r   r"   r   r   r   r3   S   s   
$z#SafeSessionState.is_new_state_valuevalue
Any | Nonec                 C  sB   |    | j | j|| W d   dS 1 sw   Y  dS )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"   r4   r   r   r   r6   W   s   "z"SafeSessionState.reset_state_valuedict[str, Any]c                 C  s2   | j  | jjW  d   S 1 sw   Y  dS )zAThe combined session and widget state, excluding keyless widgets.N)r   r   filtered_stater.   r   r   r   r8   _   s   $zSafeSessionState.filtered_statekeyr   c                 C  s<   |    | j | j| W  d    S 1 sw   Y  d S r%   r   r   r   r   r9   r   r   r   __getitem__e      $zSafeSessionState.__getitem__c                 C  s>   |    | j || j|< W d    d S 1 sw   Y  d S r%   r:   r   r9   r4   r   r   r   __setitem__j   s   "zSafeSessionState.__setitem__c                 C  s<   |    | j | j|= W d    d S 1 sw   Y  d S r%   r:   r;   r   r   r   __delitem__o   s   
"zSafeSessionState.__delitem__c                 C  s<   |    | j || jv W  d    S 1 sw   Y  d S r%   r:   r;   r   r   r   __contains__t   r=   zSafeSessionState.__contains__c                 C  s(   z| | W S  t y   t| dw Nz not found in session_state.KeyErrorAttributeErrorr;   r   r   r   __getattr__y   s
   
zSafeSessionState.__getattr__c                 C  s   || |< d S r%   r   r>   r   r   r   r      s   zSafeSessionState.__setattr__c                 C  s*   z| |= W d S  t y   t| dw rB   rC   r;   r   r   r   __delattr__   s
   zSafeSessionState.__delattr__c                   s8    fdd j  D }ddd |D }d| dS )zIPresents itself as a simple dict of the underlying SessionState instance.c                 3  s    | ]
}| j | fV  qd S r%   )r   ).0kr.   r   r   	<genexpr>   s    z,SafeSessionState.__repr__.<locals>.<genexpr>z, c                 s  s"    | ]\}}| d |V  qdS )z: Nr   )rH   rI   vr   r   r   rJ      s     {})r   _keysjoin)r   kvsr   r.   r   __repr__   s   zSafeSessionState.__repr__Iterator[QueryParams]c                 c  s@    |    | j | jjV  W d    d S 1 sw   Y  d S r%   )r   r   r   query_paramsr.   r   r   r   rT      s
   "zSafeSessionState.query_paramsN)r   r   r   r   r   r   )r    r!   r"   r#   r   r$   )r'   r(   r   r   )r*   r+   r   r   )r   r   )r   r/   )r"   r1   r   r2   )r"   r1   r4   r5   r   r   )r   r7   )r9   r1   r   r   )r9   r1   r4   r   r   r   )r9   r1   r   r   )r9   r1   r   r2   )r   r1   )r   rS   )__name__
__module____qualname____doc____annotations__r   r&   r)   r,   r-   r0   r3   r6   propertyr8   r<   r?   r@   rA   rF   r   rG   rR   r   rT   r   r   r   r   r      s2   
 	

	

	











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   r   r   r   r   <module>   s   