Ë
    úmxià  ã                  ó  — d dl mZ d dlZd dlZd dlZd dl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 d d
lmZ d dl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" d dl#m$Z$  G d„ de«      Z%ddd„Z&y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAny)Úparse)Úruntime)ÚForwardMsgQueue)ÚMemoryFragmentStorage)ÚMemoryUploadedFileManager)Ú	RerunDataÚScriptRunnerÚScriptRunnerEvent)ÚScriptCache)ÚElementTreeÚparse_tree_from_messages)Ú
ForwardMsg)ÚWidgetStates)ÚPagesManager)ÚScriptRunContext)ÚSafeSessionStatec                  óœ   ‡ — e Zd ZdZ	 	 d		 	 	 	 	 	 	 	 	 	 	 d
ˆ fd„Zdd„Zdd„Z	 	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 	 	 dd„Z	dd„Z
ˆ xZS )ÚLocalScriptRunnerz9Subclasses ScriptRunner to provide some testing features.c                óØ  •‡ — t         j                  j                  |«      st        d|› �«      ‚t	        «       ‰ _        |‰ _        |‰ _        |�|nd‰ _        |�|ni ‰ _	        t        ‰‰ �-  d|‰ j                  j                  t        d«      t        «       t        «       ddit!        «       |¬«	       g ‰ _        g ‰ _        	 	 	 	 	 	 	 	 dˆ fd	„}‰ j&                  j)                  |d
¬«       y)z7Initializes the ScriptRunner for the given script_path.zFile not found at N© ztest session idz/mock/uploadÚemailztest@example.com)	Ú
session_idÚmain_script_pathÚsession_stateÚuploaded_file_mgrÚscript_cacheÚinitial_rerun_dataÚ	user_infoÚfragment_storageÚpages_managerc                óþ   •— | �| ‰k7  rt        d«      ‚‰j                  j                  |«       ‰j                  j                  |«       |t        j
                  k(  r!|d   }‰j                  j                  |«       y y )Nz$Unexpected ScriptRunnerEvent sender!Úforward_msg)ÚRuntimeErrorÚeventsÚappendÚ
event_datar   ÚENQUEUE_FORWARD_MSGÚforward_msg_queueÚenqueue)ÚsenderÚeventÚkwargsr%   Úselfs       €ú_/home/htdocs/ttos/venv/lib/python3.12/site-packages/streamlit/testing/v1/local_script_runner.pyÚrecord_eventz0LocalScriptRunner.__init__.<locals>.record_eventL   su   ø€ ð
 Ð! f°¢nÜ"Ð#IÓJÐJà�K‰K×Ñ˜uÔ%Ø�O‰O×"Ñ" 6Ô*ð Ô)×=Ñ=Ò=Ø$ ]Ñ3�Ø×&Ñ&×.Ñ.¨{Õ;ð >ó    F)Úweak)r-   zScriptRunner | Noner.   r   r/   r   ÚreturnÚNone)ÚosÚpathÚisfileÚFileNotFoundErrorr   r+   Úscript_pathr   Úargsr/   ÚsuperÚ__init__Ú_stater
   r   r   r	   r'   r)   Úon_eventÚconnect)r0   r;   r   r#   r<   r/   r2   Ú	__class__s   `      €r1   r>   zLocalScriptRunner.__init__)   sø   ù€ ô �w‰w�~‰~˜kÔ*Ü#Ð&8¸¸Ð$FÓGÐGä!0Ó!2ˆÔØ&ˆÔØ*ˆÔØ Ð,‘D°"ˆŒ	Ø &Ð 2‘f¸ˆŒä‰ÑØ(Ø(Ø×,Ñ,×3Ñ3Ü7¸ÓGÜ$›Ü(›{ØÐ 2Ð3Ü2Ó4Ø'ð 	ô 
	
ð 02ˆŒØ%'ˆŒð	<Ø'ð	<Ø0Að	<ØMPð	<àõ	<ð  	�‰×Ñ˜l°ÐÕ7r3   c                óR   — | j                   �| j                   j                  «        yy)z7Wait for the script thread to finish, if it is running.N)Ú_script_threadÚjoin©r0   s    r1   rE   zLocalScriptRunner.join^   s%   € à×ÑÐ*Ø×Ñ×$Ñ$Õ&ð +r3   c                ó.   — | j                   j                  S )z+Return all messages in our ForwardMsgQueue.)r+   Ú_queuerF   s    r1   Úforward_msgszLocalScriptRunner.forward_msgsc   s   € à×%Ñ%×,Ñ,Ð,r3   c                óø   — d}|rt        j                  |d¬«      }t        |||¬«      }| j                  |«       | j                  s| j                  «        t        | |«       t        | j                  «       «      S )z|Run the script, and parse the output messages for querying
        and interaction.

        Timeout is in seconds.
        Ú T)Údoseq)Úwidget_statesÚquery_stringÚpage_script_hash)	r   Ú	urlencoder   Úrequest_rerunrD   ÚstartÚrequire_widgets_deltasr   rI   )r0   Úwidget_stateÚquery_paramsÚtimeoutÚ	page_hashrN   Ú
rerun_datas          r1   ÚrunzLocalScriptRunner.rung   so   € ð ˆÙÜ Ÿ?™?¨<¸tÔDˆLäØ&Ø%Ø&ô
ˆ
ð
 	×Ñ˜:Ô&Ø×"Ò"Ø�J‰JŒLÜ˜t WÔ-ä'¨×(9Ñ(9Ó(;Ó<Ð<r3   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  óB   K  — | ]  }|t         j                  k(  –— Œ y ­w)N)r   ÚSHUTDOWN)Ú.0Úes     r1   ú	<genexpr>z3LocalScriptRunner.script_stopped.<locals>.<genexpr>…   s   è ø€ ÒH°q�1Ô)×2Ñ2Õ2ÑHùs   ‚)Úanyr'   rF   s    r1   Úscript_stoppedz LocalScriptRunner.script_stopped„   s   € ÜÑH¸D¿K¹KÔHÓHÐHr3   c                óä   — |s%| j                   j                  |j                  «       | j                  j	                  | |¬«       t        j                  «       j                  j                  «        y )N)r.   )	Ú_session_stateÚon_script_finishedÚwidget_ids_this_runr@   Úsendr   Úget_instanceÚmedia_file_mgrÚremove_orphaned_files)r0   Úctxr.   Úpremature_stops       r1   Ú_on_script_finishedz%LocalScriptRunner._on_script_finished‡   sW   € ñ Ø×Ñ×2Ñ2°3×3JÑ3JÔKð 	�‰×Ñ˜4 uÐÔ-ô 	×ÑÓ×-Ñ-×CÑCÕEr3   c                ó”   — t        j                  |«      }| j                  |j                  d<   | j                  |j                  d<   |S )NÚ__argsÚ__kwargs)ÚtypesÚ
ModuleTyper<   Ú__dict__r/   )r0   ÚnameÚmodules      r1   Ú_new_modulezLocalScriptRunner._new_module•   s;   € Ü×!Ñ! $Ó'ˆØ$(§I¡Iˆ�‰˜Ñ!Ø&*§k¡kˆ�‰˜
Ñ#Øˆr3   )NN)r;   Ústrr   r   r#   r   r<   r   r/   r   r5   r6   )r5   r6   )r5   zlist[ForwardMsg])NNé   rK   )
rT   zWidgetStates | NonerU   zdict[str, Any] | NonerV   ÚfloatrW   rv   r5   r   )r5   Úbool)rj   r   r.   r   rk   ry   r5   r6   )rs   rv   r5   ztypes.ModuleType)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r>   rE   rI   rY   ra   rl   ru   Ú__classcell__)rB   s   @r1   r   r   &   sÐ   ø„ ÙCð Øð38àð38ð (ð38ð $ð	38ð
 ð38ð ð38ð 
õ38ój'ó
-ð -1Ø.2ØØð=à)ð=ð ,ð=ð ð	=ð
 ð=ð 
ó=ó:IðFØ#ðFØ,=ðFØOSðFà	óF÷r3   r   c                óB  — t        j                   «       }t        j                   «       |z
  |k  rAt        j                  d«       | j                  «       ryt        j                   «       |z
  |k  rŒAd|› d�}| j                  «        | j	                  «        t        |«      ‚)z˜Wait for the given ScriptRunner to emit a completion event. If the timeout
    is reached, the runner will be shutdown and an error will be thrown.
    gü©ñÒMbP?Nz#AppTest script run timed out after z(s))ÚtimeÚsleepra   Úrequest_stoprE   r&   )ÚrunnerrV   Út0Ú
err_strings       r1   rS   rS   œ   s„   € ô
 
�‰‹€BÜ
�)‰)‹+˜Ñ
˜WÒ
$Ü�
‰
�5ÔØ× Ñ Ô"Øô �)‰)‹+˜Ñ
˜WÓ
$ð 7°w°i¸sÐC€Jð ×ÑÔØ
‡K�K„Mä
�zÓ
"Ð"r3   )rw   )rƒ   r   rV   rx   r5   r6   )'Ú
__future__r   r7   r€   rp   Útypingr   r   Úurllibr   Ú	streamlitr   Ú#streamlit.runtime.forward_msg_queuer   Ústreamlit.runtime.fragmentr	   Ú.streamlit.runtime.memory_uploaded_file_managerr
   Ústreamlit.runtime.scriptrunnerr   r   r   Ú+streamlit.runtime.scriptrunner.script_cacher   Ú!streamlit.testing.v1.element_treer   r   Ústreamlit.proto.ForwardMsg_pb2r   Ú streamlit.proto.WidgetStates_pb2r   Ústreamlit.runtime.pages_managerr   Ú7streamlit.runtime.scriptrunner_utils.script_run_contextr   Ú*streamlit.runtime.state.safe_session_stater   r   rS   r   r3   r1   ú<module>r•      sW   ðõ #ã 	Û Û ß %Ý å Ý ?Ý <Ý Tß UÑ UÝ Cß SáÝ9Ý=Ý<ÝXÝKôs˜ô sõl#r3   