
    &eD                         U d dl 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 d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZ  e	e          Zeed
<    G d de          ZdS )    )CallableDictListOptionalcast)Final)
get_logger)
AppSession)
ScriptData)ScriptCache)ActiveSessionInfoSessionClientSessionInfoSessionManagerSessionStorage)UploadedFileManager)LocalSourcesWatcherLOGGERc                   <   e Zd ZdZdedededeeg df                  ddf
dZ		 	 dd	e
d
edeeee         f         dee         dee         defdZdeddfdZdedee         fdZdedefdZdee         fdZdeddfdZdedee         fdZdee         fdZdS )WebsocketSessionManagera  A SessionManager used to manage sessions with lifecycles tied to those of a
    browser tab's websocket connection.

    WebsocketSessionManagers differentiate between "active" and "inactive" sessions.
    Active sessions are those with a currently active websocket connection. Inactive
    sessions are sessions without. Eventual cleanup of inactive sessions is a detail left
    to the specific SessionStorage that a WebsocketSessionManager is instantiated with.
    session_storageuploaded_file_managerscript_cachemessage_enqueued_callbackNreturnc                 L    || _         || _        || _        || _        i | _        d S N)_session_storage_uploaded_file_mgr_script_cache_message_enqueued_callback_active_session_info_by_id)selfr   r   r   r   s        Klib/python3.11/site-packages/streamlit/runtime/websocket_session_manager.py__init__z WebsocketSessionManager.__init__.   s6     !0"7)*C' IK'''    clientscript_data	user_infoexisting_session_idsession_id_overridec           	         |r|r
J d            || j         v rt                              d|           |o"|| j         vo| j                            |          }|rd|j        }|                                 t          |||j                  | j         |j	        <   | j        
                    |j	                   |j	        S t          || j        | j        | j        t          |j                  ||          }t                              dt          |          |j	                   |j	        | j         vsJ d|j	         d            t          ||          | j         |j	        <   |j	        S )NzHOnly one of existing_session_id and session_id_override should be truthyzESession with id %s is already connected! Connecting to a new session.)r(   r   r   r   local_sources_watcherr)   r+   z1Created new session for client %s. Session ID: %szsession.id 'z' registered multiple times!)r"   r   warningr   getsessionregister_file_watchersr   script_run_countiddeleter
   r   r    r!   r   main_script_pathdebug)	r#   r'   r(   r)   r*   r+   session_infoexisting_sessionr0   s	            r$   connect_sessionz'WebsocketSessionManager.connect_session=   s     	V$7	V 	VU	V 	V 	V $"AAANNW#     ?#4+JJ?%))*=>> 	  	'+333555CT -D DD+,<,?@
 !(()9)<===#&&#"&"9+&*&E"5k6R"S"S 3
 
 
 	?FWZ	
 	
 	

 Jd====B'*BBB >== 7HPW6X6X'
3zr&   
session_idc                    || j         v ru| j         |         }|j        }|                                 |                                 | j                            t          d ||j                             | j         |= d S d S )N)r'   r0   r2   )r"   r0   request_script_stopdisconnect_file_watchersr   saver   r2   )r#   r:   active_session_infor0   s       r$   disconnect_sessionz*WebsocketSessionManager.disconnect_sessionw   s    888"&"A*"M)1G''))),,...!&&#%8%I     /
;;; 98r&   c                 6    | j                             |          S r   )r"   r/   r#   r:   s     r$   get_active_session_infoz/WebsocketSessionManager.get_active_session_info   s    .22:>>>r&   c                     || j         v S r   )r"   rB   s     r$   is_active_sessionz)WebsocketSessionManager.is_active_session   s    T<<<r&   c                 N    t          | j                                                  S r   )listr"   valuesr#   s    r$   list_active_sessionsz,WebsocketSessionManager.list_active_sessions   s    D3::<<===r&   c                    || j         v r0| j         |         }| j         |= |j                                         d S | j                            |          }|r5| j                            |           |j                                         d S d S r   )r"   r0   shutdownr   r/   r4   )r#   r:   r?   r7   s       r$   close_sessionz%WebsocketSessionManager.close_session   s    888"&"A*"M/
;'00222F,00<< 	,!((444 ))+++++	, 	,r&   c                     |                      |          }|rt          t          |          S | j                            |          S r   )rC   r   r   r   r/   )r#   r:   r7   s      r$   get_session_infoz(WebsocketSessionManager.get_session_info   sD    33J?? 	3\222$((444r&   c                     t          t          t                   |                                           | j                                        z   S r   )r   r   r   rJ   r   rG   rI   s    r$   list_sessionsz%WebsocketSessionManager.list_sessions   s<    k"D$=$=$?$?@@#((**+	
r&   )NN)__name__
__module____qualname____doc__r   r   r   r   r   r%   r   r   r   strr9   r@   r   rC   boolrE   r   rJ   rM   r   rO   rQ    r&   r$   r   r   $   s        K'K  3K "	K
 $,HRX,>#?K 
K K K K( .2-18 88  8 Xc]*+	8
 &c]8 &c]8 
8 8 8 8t<S <T < < < <"?# ?(CT:U ? ? ? ?=C =D = = = =>d+<&= > > > >
, 
, 
, 
, 
, 
,53 58K3H 5 5 5 5
tK0 
 
 
 
 
 
r&   r   N)typingr   r   r   r   r   typing_extensionsr   streamlit.loggerr	   streamlit.runtime.app_sessionr
   streamlit.runtime.script_datar   +streamlit.runtime.scriptrunner.script_cacher   !streamlit.runtime.session_managerr   r   r   r   r   'streamlit.runtime.uploaded_file_managerr   streamlit.watcherr   rR   r   __annotations__r   rX   r&   r$   <module>rc      sS   8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 # # # # # # ' ' ' ' ' ' 4 4 4 4 4 4 4 4 4 4 4 4 C C C C C C              H G G G G G 1 1 1 1 1 1
8$$ $ $ $C
 C
 C
 C
 C
n C
 C
 C
 C
 C
r&   