
    &e                        d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ  G d d	e          Z ed
           G d d                      Z ed
           G d d                      Z G d d          ZdS )    N)	dataclass)Enum)Optionalcast)util)WidgetStates)coalesce_widget_statesc                       e Zd ZdZdZdZdS )ScriptRequestTypeCONTINUESTOPRERUNN)__name__
__module____qualname__r   r   r        Nlib/python3.11/site-packages/streamlit/runtime/scriptrunner/script_requests.pyr   r      s!        H
 D EEEr   r   T)frozenc                   d    e Zd ZU dZdZeed<   dZee	         ed<   dZ
eed<   dZeed<   defd	ZdS )
	RerunDataz+Data attached to RERUN requests. Immutable. query_stringNwidget_statespage_script_hash	page_namereturnc                 *    t          j        |           S Nr   repr_selfs    r   __repr__zRerunData.__repr__0       z$r   )r   r   r   __doc__r   str__annotations__r   r   r   r   r   r$   r   r   r   r   r   '   s}         55L#,0M8L)000cIs #            r   r   c                   `    e Zd ZU dZeed<   dZee         ed<   e	defd            Z
defdZdS )ScriptRequestz,A STOP or RERUN request and associated data.typeN_rerun_datar   c                 z    | j         t          j        urt          d          t	          t
          | j                  S )Nz)RerunData is only set for RERUN requests.)r+   r   r   RuntimeErrorr   r   r,   r"   s    r   
rerun_datazScriptRequest.rerun_data;   s5    9-333JKKKIt/000r   c                 *    t          j        |           S r   r    r"   s    r   r$   zScriptRequest.__repr__A   r%   r   )r   r   r   r&   r   r(   r,   r   r   propertyr/   r'   r$   r   r   r   r*   r*   4   s}         66
'+K)$+++1I 1 1 1 X1
 #            r   r*   c                   T    e Zd ZdZd Zd
dZdedefdZde	e
         fdZde
fd	ZdS )ScriptRequestszAn interface for communicating with a ScriptRunner. Thread-safe.

    AppSession makes requests of a ScriptRunner through this class, and
    ScriptRunner handles those requests.
    c                 ~    t          j                    | _        t          j        | _        t                      | _        d S r   )	threadingLock_lockr   r   _stater   r,   r"   s    r   __init__zScriptRequests.__init__L   s-    ^%%
'0$;;r   r   Nc                 h    | j         5  t          j        | _        ddd           dS # 1 swxY w Y   dS )zRequest that the ScriptRunner stop running. A stopped ScriptRunner
        can't be used anymore. STOP requests succeed unconditionally.
        N)r7   r   r   r8   r"   s    r   request_stopzScriptRequests.request_stopQ   sz     Z 	1 	1+0DK	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   '++new_datac                 T   | j         5  | j        t          j        k    r	 ddd           dS | j        t          j        k    r&t          j        | _        || _        	 ddd           dS | j        t          j        k    r| j        j        || _        	 ddd           dS |j        Tt          | j        j        |j                  }t          |j
        ||j        |j                  | _        	 ddd           dS 	 ddd           dS t          d| j                   # 1 swxY w Y   dS )a5  Request that the ScriptRunner rerun its script.

        If the ScriptRunner has been stopped, this request can't be honored:
        return False.

        Otherwise, record the request and return True. The ScriptRunner will
        handle the rerun request as soon as it reaches an interrupt point.
        NFT)r   r   r   r   z Unrecognized ScriptRunnerState: )r7   r8   r   r   r   r   r,   r   r	   r   r   r   r   r.   )r#   r<   coalesced_statess      r   request_rerunzScriptRequests.request_rerunX   s3    Z ,	Q ,	Q{/444,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q
 {/888 05#+ ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q {/555 #19 (0D$-,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q0 )5 (>(68N( ($ (1%-%:&6)1)B"*"4	( ( (D$  I,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	QR S,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	QX O$+OOPPPY,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Q ,	Qs/   D.D')DAD8DDD!$D!c                 t   | j         t          j        k    rdS | j        5  | j         t          j        k    r<t          j        | _         t          t          j        | j                  cddd           S | j         t          j        k    sJ t          t          j                  cddd           S # 1 swxY w Y   dS )a  Called by the ScriptRunner when it's at a yield point.

        If we have no request, return None.

        If we have a RERUN request, return the request and set our internal
        state to CONTINUE.

        If we have a STOP request, return the request and remain stopped.
        N)r8   r   r   r7   r   r*   r,   r   r"   s    r   on_scriptrunner_yieldz$ScriptRequests.on_scriptrunner_yield   s    ;+444
 4Z 	9 	9{/555/8$%6%<d>NOO	9 	9 	9 	9 	9 	9 	9 	9
 ;"3"88888 !2!788	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   AB-1/B--B14B1c                 :   | j         5  | j        t          j        k    r<t          j        | _        t          t          j        | j                  cddd           S t          j        | _        t          t          j                  cddd           S # 1 swxY w Y   dS )aY  Called by the ScriptRunner when it's about to run its script for
        the first time, and also after its script has successfully completed.

        If we have a RERUN request, return the request and set
        our internal state to CONTINUE.

        If we have a STOP request or no request, set our internal state
        to STOP.
        N)r7   r8   r   r   r   r*   r,   r   r"   s    r   on_scriptrunner_readyz$ScriptRequests.on_scriptrunner_ready   s     Z 	9 	9{/555/8$%6%<d>NOO	9 	9 	9 	9 	9 	9 	9 	9 ,0DK !2!788	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   AB)BBB)r   N)r   r   r   r&   r9   r;   r   boolr?   r   r*   rA   rC   r   r   r   r3   r3   E   s         ' ' '
1 1 1 16Qi 6QD 6Q 6Q 6Q 6Qp9x'> 9 9 9 929} 9 9 9 9 9 9r   r3   )r5   dataclassesr   enumr   typingr   r   	streamlitr    streamlit.proto.WidgetStates_pb2r   streamlit.runtime.stater	   r   r   r*   r3   r   r   r   <module>rK      so       ! ! ! ! ! !       ! ! ! ! ! ! ! !       9 9 9 9 9 9 : : : : : :        $	  	  	  	  	  	  	  	  $                v9 v9 v9 v9 v9 v9 v9 v9 v9 v9r   