
    Be'                        d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl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mZ dd	lmZmZmZmZmZmZmZ m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z) ddl*m+Z+ ddl,Z,ddl-m.Z. ddl/m0Z0 ddl1m2Z3 ddl4m5Z6 ddl7m8Z8m9Z9 ddlm:Z:m;Z;  ej<        d          Z=erkddl>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZG ddlHmIZI ddl4mJZJ ddlKmLZL ddlMmNZN ddlOmPZP ddlQmRZR dd lSmTZT dd!lUmVZV dd"lWmXZX dd#lYmZZZ dd$l[m\Z\  e&d%          Z]ed/d(            Z^d0d*Z_ G d+ d,          Z`e'ej        eej        gej        f         e ej                 f         Za G d- d.e,jb                  Zc ec            ZddS )1zH
Various utilities for recording and embedding state in a rendered app.
    )annotationsN)CounterOrderedDictdefaultdict)Iterator)contextmanager)
ContextVar)partialwraps)TYPE_CHECKINGAnyCallableClassVar	CoroutineDictr   ListLiteralOptionalTupleTypeTypeVarUnion)urljoin)WeakKeyDictionary)Document)UnlockedDocumentProxy)curdoc)CommManager   )decode_tokenparse_timedelta   )LOG_SESSION_RENDEREDLOG_USER_MSGzpanel.state)Future)ImportedStyleSheet)Model)BokehSessionContext)Server)DisplayHandle)CommIOLoop)BaseTemplate)Viewable)BooleanIndicatorBrowserInfoPeriodicCallbackLocationNotificationArea)StoppableThreadTdocr   c              #     K   t           j                            |           }	 d V  t           j                            |           d S # t           j                            |           w xY wN)state_curdocsetreset)r;   tokens     .lib/python3.11/site-packages/panel/io/state.py
set_curdocrD   @   sa      Mc""E#E"""""E""""s   A !A)returnc                     	 t                      } n# t          $ r Y d S w xY wt          | t                    r| j        } | S r=   )r?   RuntimeError
isinstancer   _docr;   s    rC   curdoc_lockedrK   H   sS    ii   tt#,-- hJs    
c                      e Zd ZdS )
_UndefinedN)__name__
__module____qualname__     rC   rM   rM   Q   s          rR   rM   c                  ^   e Zd ZU dZ ej        ddd          Z ej        ddd          Z ej	        i d	          Z
 ej        d
d	          Z ej        ddd          Z ej	        dd e            dd	          Z ej        d
d	          Z ej        dd	          Z ej	        i d	          Z edd
          ZdZded<    e            Zded<   d
Zd
ZeZded<   dZded<   i Z e            Z ded<   d
Z!ded <    e            Z"d!ed"<   d
Z#d#ed$<    e            Z$d%ed&<   d
Z%d'ed(<    e            Z&d)ed*<   d
Z'd+ed,<    e            Z(d-ed.<   i Z)d/ed0<   g Z*d1ed2<   i Z+d3ed4<   i Z,d5ed6<    e            Z-d7ed8<   i Z.d9ed:<    e            Z/ e            Z0d;ed<<   g Z1d=ed><   g Z2d=ed?<   g Z3d=ed@<    e            Z4dAedB<   d
Z5i Z6dCedD<    e            Z7dEedF<   g Z8dGedH<   g Z9 ej	         e:e;                    Z<i Z= e            Z>dIedJ<    e            Z?dKedL<   dM e@jA                    iZBdNedO<   i ZCi ZDi ZE eF            ZGddRZHeIddT            ZJeIdU             ZKeIddW            ZLeIddY            ZMeIddZ            ZNeIdd\            ZOeOjP        dd`            ZOddcZQ ejR        ddde          df             ZS ejR        dgde          ddh            ZTdi ZUdj ZVeIdk             ZWddmZXddnZYdddpZZddrZ[ds Z\dddvZ]ddwZ^ddzZ_dddZ`	 	 dddZadddZbd Zc	 dddZdddZeddZfdddZgddZhddZiddZj	 dddZkd Zl	 	 dddZmddZnddZod ZpeIdd            ZqeIdd            ZreIdd            ZseIdd            ZtetjP        dd            ZteIdd            ZueIdd            ZveIdd            ZweIdd            ZxeId             ZyeIdd            ZzeIdd            Z{eId             Z|eIddĄ            Z}eIddƄ            Z~eIddǄ            ZeIddɄ            Zd
S )_statezw
    Holds global state associated with running apps, allowing running
    apps to indicate their state to a user.
    /Tz&
       Base URL for all server paths.)defaultreadonlyr;   FzT
       Whether the application is currently busy processing a user
       callback.z
       Global location you can use to cache large datasets or expensive computation results
       across multiple client sessions for a given server.)rV   r;   Nz}
       Object with encrypt and decrypt methods to support encryption
       of secret variables including OAuth information. z
       Relative path from the current app being served to the root URL.
       If application is embedded in a different server via autoload.js
       this will instead reflect an absolute path.r   )totallivesessionsz>
       Tracks information and statistics about user sessions.z>
      Selenium webdriver used to export bokeh models to pngs.z:
       Count of active callbacks current being processed.z1
       A dictionary used by the cache decorator.r   )rV   zClassVar[bool]_holdz*ClassVar[WeakKeyDictionary[Document, int]]_thread_id_zClassVar[Type[_CommManager]]_comm_manager_jupyter_kernel_contextz*ClassVar[WeakKeyDictionary[Document, Any]]_ipykernelszClassVar[BrowserInfo | None]_browserz2ClassVar[WeakKeyDictionary[Document, BrowserInfo]]	_browserszClassVar[Location | None]	_locationz/ClassVar[WeakKeyDictionary[Document, Location]]
_locationsz!ClassVar[NotificationArea | None]_notificationz7ClassVar[WeakKeyDictionary[Document, NotificationArea]]_notificationszClassVar[BaseTemplate | None]	_templatez3ClassVar[WeakKeyDictionary[Document, BaseTemplate]]
_templateszBClassVar[Dict[str, Tuple[Viewable, Model, Document, Comm | None]]]_viewszClassVar[List[str]]_fake_rootszKClassVar[Dict[str, Tuple[Server, Viewable | BaseTemplate, List[Document]]]]_serversz$ClassVar[Dict[str, StoppableThread]]_threadsz0ClassVar[WeakKeyDictionary[Any, Dict[str, Any]]]_server_configz/ClassVar[Dict[str, [DisplayHandle, List[str]]]]_handlesz,ClassVar[Dict[Document, Callable[[], None]]]_onloadz3ClassVar[List[Callable[[BokehSessionContext], []]]]_on_session_created_on_session_created_internal_on_session_destroyedz+ClassVar[WeakKeyDictionary[Document, bool]]_loadedz=ClassVar[Dict[str, Tuple[Iterator[int], Callable[[], None]]]]
_scheduledz=ClassVar[WeakKeyDictionary[Document, List[PeriodicCallback]]]	_periodicz ClassVar[List[BooleanIndicator]]_indicatorszDClassVar[WeakKeyDictionary[Document, Dict[str, ImportedStyleSheet]]]_stylesheetsz0ClassVar[WeakKeyDictionary[Document, List[str]]]_extensions_mainz#ClassVar[Dict[str, threading.Lock]]_cache_locksrE   strc                
   g }| j                                         D ]<\  }}}|                    d                    |j        pd|j        |                     =|sdS d                    d                    |                    S )Nz{}:{:d} - {!r}	localhostzstate(servers=[])zstate(servers=[
  {}
])z,
  )rk   valuesappendformataddressportjoin)selfserver_infoserverpaneldocss        rC   __repr__z_state.__repr__   s    #'=#7#7#9#9 	 	FE4 ''(E+v{TYZZ     	'&&*11',,{2K2KLLLrR   'IOLoop'c                j    t           j        rt          j                    S ddlm}  |j                    S )Nr   r,   )r>   _is_pyodideasyncioget_running_looptornado.ioloopr-   current)r   r-   s     rC   _ioloopz_state._ioloop   s>     	$+---------!6>###rR   c                D    | j         }|r	|| j        v sd S | j        |         S r=   )r   rx   r   r;   s     rC   _extensionsz_state._extensions   s1    k 	t000F %%rR   
str | Nonec                B    t          j                    }|r|j        nd }|S r=   )	threadingcurrent_threadident)r   thread	thread_ids      rC   _current_threadz_state._current_thread   s&    )++$*4FLL	rR   boolc                d    | j         }|r|j        sdS t          |j        j        j                   S )NF)r   session_contextr   server_contextr[   r   r   s     rC   _is_launchingz_state._is_launching   s:     	V3 	5.=FGGGGrR   c                    dt           j        v S )N_pyodide)sysmodulesr   s    rC   r   z_state._is_pyodide   s    S[((rR   
int | Nonec                R    | j         r| j                            | j                   nd S r=   )r   r]   getr   s    rC   
_thread_idz_state._thread_id  s'    48KIt##DK000TIrR   r   intNonec                6    | j         r|| j        | j         <   d S d S r=   )r   r]   )r   r   s     rC   r   z_state._thread_id  s+    ; 	6,5DT[)))	6 	6rR   r;   r   c                4    || j         u o| j        | j        d fv S r=   )r   r   r   r   s     rC   
_unblockedz_state._unblocked  s$    dk!Udo$:NPT9U&UUrR   _busy_counter)watchc                &    | j         dk    | _        d S )Nr"   )r   busyr   s    rC   _update_busy_counterz_state._update_busy_counter  s    &!+			rR   r   c                2    | j         D ]}| j        |_        d S r=   )rv   r   valuer   	indicators     rC   _update_busyz_state._update_busy  s)    ) 	( 	(I"iIOO	( 	(rR   c                   | j         j        sd S ddlm} | j         j        j        }| j        d                             |i           }|                    d          d S |                    t          t	          | j                              | j        dxx         dz  cc<   |	                    dt          j                                                                        i           | j                            d           d S )Nr"   )loggerr[   renderedrZ   session_info)r   r   r   r   idr   r   infor#   updatedtdatetimenow	timestampparamtrigger)r   eventr   
session_idr   s        rC   _init_sessionz_state._init_session  s    {* 	F""""""[03
(488RHHJ''3F("T[//:::&!!!Q&!!!))3355
 	 	 	 	
>*****rR   c                   |j         }| j        d         }||v r||         d         r||         }|d         | j        dxx         dz  cc<   t          j                                                                        |d<   | j                            d           |j        }|| j	        v r>| j	        |         D ](}	 |
                    |           # t          $ r Y %w xY w| j	        |= || j        v r4t          j        |         }|                    |           t          j        |= || j        v r/| j        |         }|                    |           t          j        |= || j        v r
| j        |= d S d S )Nr[   endedr   rZ   r"   r   )r   r   r   r   r   r   r   r   	_documentru   _cleanup	Exceptionrd   r>   _server_destroyrf   rh   )	r   r   r   r[   sessionr;   cblocnotifications	            rC   _destroy_sessionz_state._destroy_session'  s   $'
$Z0!!hz&:7&C&Kz*Gz".!&)))Q.)))!{00::<<GGJ~...' $.  nS)  KK0000    Ds# $/!!"3'C000 % $%%%.s3L((999$S) $/!!$$$ "!s   9C
CCc                    t          j                    }| j                            |d           }|ddlm}  |            }|| j        |<   |S )Nr"   )_Stack)r   r   _stacksr   cacher   )r   r   stackr   s       rC   _current_stackz_state._current_stackK  sZ    "133  66=%%%%%%FHHE+0DL(rR   endpointc                     i  fd}|S )Nc                    | d         }|j         |j        n|j         }
j        	         d         }||vrd S                     t	          |          g           fd| D             sd S t                    t	          |          <   |D ]}t	          |          v r	  |j        j        di  n# t          $ r  w xY w	 t	          |          v rFfdt	          |                   D             }|r|t	          |          <   t	          |          = # t	          |          v rFfdt	          |                   D             }|r|t	          |          <   nt	          |          = w xY wd S )Nr   c                <    i | ]}|j         v|j         |j        S rQ   )namenew).0r   updatings     rC   
<dictcomp>z6_state._get_callback.<locals>.link.<locals>.<dictcomp>^  s5     5 5 5833 j%)333rR   c                    g | ]}|v|	S rQ   rQ   )r   pr~   s     rC   
<listcomp>z6_state._get_callback.<locals>.link.<locals>.<listcomp>l  s    &X&X&XQQWqrR   rQ   )	objcls_rest_endpointsr   r   listr   r   r   )eventsr   r   parameterizedsparameterizednot_updatedr   r~   	_updatingr   r   s         @@rC   linkz"_state._get_callback.<locals>.linkW  s   1IE$y0%))eiC!1(;A>N.(( }}RWWb11H5 5 5 5 5 5 5F !%fIbgg!/ 3 3m$$	11
3.M'.888888     9 #ww)++&X&X&X&X)BsGG2D&X&X&X& 31<Ibgg.. )"S'' 2 #ww)++&X&X&X&X)BsGG2D&X&X&X& 31<Ibgg.. )"S'' 222223 3s   %B87D 8CD  AE9rQ   )r   r   r   r   s   `` @rC   _get_callbackz_state._get_callbackU  s4    %'		3 	3 	3 	3 	3 	3 	34 rR   c                    | j         rK| j                             | j        |          }|                    t	          | j        |                     d S |                     |           d S )NrJ   )_thread_poolsubmit_on_loadadd_done_callbackr
   _handle_future_exception)r   r;   r   futures       rC   _schedule_on_loadz_state._schedule_on_loads  sj     	&--dmSAAF$$WT-JPS%T%T%TUUUUUMM#rR   Optional[Document]c                h   |p| j         }d| j        |<   | j                            |g           }|sd S ddlm} ddlm} t          |          5  |r	|| j        v s|j	        s*|D ]}| 
                    |d           	 d d d            d S  ||j	                  5 }|D ]}| 
                    |d           	 d d d            n# 1 swxY w Y   |j        j        j        }| j        |dz   |j	        fxx         |z  cc<   | j                            d	           d d d            d S # 1 swxY w Y   d S )
NTr   configr"   )profile_ctxFschedulez:on_load	_profiles)r   rs   ro   popr   profiler   rD   
_launchingprofilerexecuter   requestpathr  r   r   )r   r;   	callbacksr   r   r   r[   r	  s           rC   r   z_state._on_loadz  s"    T[ SL$$S"--	 	F######((((((__ 
	, 
	, t..v.# 5 5BLLeL4444	
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	,
 V_-- 5# 5 5BLLeL444455 5 5 5 5 5 5 5 5 5 5 5 5 5 5 &.3DNDOV_=>>>(J>>>J{+++
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	, 
	,s=   0D'D'C9D'C			D'C		AD''D+.D+r   c                  K   || j         vrd S | j         |         \  }}	 t          |          }n# t          $ r d }| j         |= Y nw xY w|dt          j                                                                        }||z
  }| j                            |t          | j
        |                     	  |            }t          j        |          r
| d {V  d S d S # t          $ r }|                     |           Y d }~d S d }~ww xY w)Ndelaycallback)rt   nextr   r   r   r   r   r   
call_laterr
   _scheduled_cbinspectisawaitable_handle_exception)	r   r   diterr   atr   call_time_secondsreses	            rC   r  z_state._scheduled_cb  sI     t&&FOD)	r	&eBB 	& 	& 	&B%%%	& >+//##--//C!#cL##*;gdN`bfFgFg#hhh	&"$$C"3'' 									  	& 	& 	&""1%%%%%%%%%	&s'   / AA0&C 
D$C??Dc                @     t                     fd            }|S )Nc                 p    	  | i |S # t           $ r }                    |           Y d }~d S d }~ww xY wr=   )r   r  )argskwr  r  r   s      rC   wrapperz1_state._handle_exception_wrapper.<locals>.wrapper  sb    *x,,,, * * *&&q)))))))))*s    
505)r   )r   r  r  s   `` rC   _handle_exception_wrapperz _state._handle_exception_wrapper  s9    	x	* 	* 	* 	* 	* 
	*
 rR   r   r%   c                    |                                 }|d S t          |          5  |                     |           d d d            d S # 1 swxY w Y   d S r=   )	exceptionrD   r  )r   r   r;   r!  s       rC   r   z_state._handle_future_exception  s    $$&&	F__ 	. 	.""9---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAc                    ddl m } |j        r|                    |           d S t          |t                    r||                     d| d           d S )Nr   r   z"Exception of unknown type raised: error)level)r   exception_handlerrH   BaseExceptionlog)r   r!  r   s      rC   r  z_state._handle_exception  sw    ####### 	V$$Y/////	=11 	VOHHE)EEWHUUUUUrR   r   r(   c                N    | j         D ]}|j                            |           d S r=   )rr   r   on_session_destroyed)r   r   r   s      rC   _register_session_destroyedz"_state._register_session_destroyed  s8    , 	? 	?B%::2>>>>	? 	?rR   keyfnCallable[[], T]ttlr:   c                   |ft          d t          |                                          D                       z   }|rt          j                    |z   nd}| j        d         5  || j        v r| j        |         }nt          j                    x| j        |<   }ddd           n# 1 swxY w Y   	 |5  || j        v r| j        	                    |          \  }}n	t          d}}|t          u s|.|t          j                    k     r |di ||fx\  }}	| j        |<   ddd           n# 1 swxY w Y   |                                s|| j        v r| j        |= n*# |                                s|| j        v r| j        |= w xY w|S )a&  
        Caches the return value of a function globally across user sessions, memoizing on the given
        key and supplied keyword arguments.

        Note: Keyword arguments must be hashable.

        Example:

        >>> def load_dataset(name):
        >>>     # some slow operation that uses name to load a dataset....
        >>>     return dataset
        >>> penguins = pn.state.as_cached('dataset-penguins', load_dataset, name='penguins')

        Arguments
        ---------
        key: (str)
          The key to cache the return value under.
        fn: (callable)
          The function or callable whose return value will be cached.
        ttl: (int)
          The number of seconds to keep an item in the cache, or None
          if the cache should not expire. The default is None.
        **kwargs: dict
          Additional keyword arguments to supply to the function,
          which will be memoized over as well.

        Returns
        -------
        Returns the value returned by the cache or the value in
        the cache.
        c              3  $   K   | ]\  }}||fV  d S r=   rQ   )r   kvs      rC   	<genexpr>z#_state.as_cached.<locals>.<genexpr>  s*      EEdaAq6EEEEEErR   Nry   rQ   )tuplesorteditemstime	monotonicrz   r   Lockr   r   rM   locked)
r   r+  r,  r.  kwargs
new_expirylockretexpiry_s
             rC   	as_cachedz_state.as_cached  sM   @ fUEEfV\\^^.D.DEEEEEE/2<T^%%++
v& 	A 	Ad'''(-090@0@@!#&		A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A

	+ J J$*$$"&*.."5"5KC",dC*$$);IYIY@Y@Y02Vj/IIFCTZ_J J J J J J J J J J J J J J J ;;== +SD,=%=%=%c* ;;== +SD,=%=%=%c*****
sC   $5B%%B),B)1E 3A*D)E )D--E 0D-1E 'F  r  .Callable[[], None] | Coroutine[Any, Any, None]periodcountOptional[int]timeoutstartr4   c                    ddl m}  |||||          }|r|                                 | j        rB| j        | j        vrg | j        | j        <   | j        | j                                     |           |S )a  
        Schedules a periodic callback to be run at an interval set by
        the period. Returns a PeriodicCallback object with the option
        to stop and start the callback.

        Arguments
        ---------
        callback: callable
          Callable function to be executed at periodic interval.
        period: int
          Interval in milliseconds at which callback will be executed.
        count: int
          Maximum number of times callback will be invoked.
        timeout: int
          Timeout in seconds when the callback should be stopped.
        start: boolean (default=True)
          Whether to start callback immediately.

        Returns
        -------
        Return a PeriodicCallback object with start and stop methods.
        r"   r3   )r  rD  rE  rG  )r
  r4   rH  r   ru   r   )r   r  rD  rE  rG  rH  r4   r   s           rC   add_periodic_callbackz_state.add_periodic_callback  s    6 	0/////fE7
 
 
  	HHJJJ; 	3{$.00.0t{+N4;'..r222	rR   waitc                    || j         vrt          d|d          |rd| j         |         d         f| j         |<   dS | j         |= dS )a  
        Cancel a task scheduled using the `state.schedule_task` method by name.

        Arguments
        ---------
        name: str
            The name of the scheduled task.
        wait: boolean
            Whether to wait until after the next execution.
        zNo task with the name z has been scheduled.Nr"   )rt   KeyError)r   r   rK  s      rC   cancel_taskz_state.cancel_task   sf     t&&PDPPPQQQ 	&%)4?4+@+C$DDOD!!!%%%rR   c                @   | j                                         D ]j}|                                 t          |d          rD|j                                         	 t          j        |j                   Z# t          $ r Y fw xY wk| j                                          dS )zE
        Clears caches generated by panel.io.cache function.
        	directoryN)
_memoize_cacher~   clearhasattrr   closeshutilrmtreerP  OSError)r   r   s     rC   clear_cachesz_state.clear_caches2  s     (//11 	 	EKKMMMuk** !!###M%/2222   D	 	!!#####s   A44
B BautoCallable([], None)r  bool | Literal['auto']c                0   |}t          |t          j                  r!|j        }t          |t          j                  !| j        }t
          j                            |          r!t
          j                            |           dS |rR|j	        rK|dk    s|dk    r?| 
                    |          s*|                    |                     |                     dS 	  |             dS # t          $ r%}t                              |           Y d}~dS d}~ww xY w)aA  
        Executes both synchronous and asynchronous callbacks
        appropriately depending on the context the application is
        running in. When running on the server callbacks are scheduled
        on the event loop ensuring the Bokeh Document lock is acquired
        and models can be modified directly.

        Arguments
        ---------
        callback: Callable[[], None]
          Callback to execute
        schedule: boolean | Literal['auto']
          Whether to schedule synchronous callback on the event loop
          or execute it immediately.
        TrY  N)rH   	functoolsr
   funcr   r   r   iscoroutinefunctionasync_executorr   r   add_next_tick_callbackr  r   r>   r  )r   r  r  r   r;   r  s         rC   r  z_state.execute@  s5   ( Y.// 	B Y.// 	k22266 	+..x88888 	+S( 	+h$.>.>8vCUCU^b^m^mnq^r^rCU&&t'E'Eh'O'OPPPPP+




 + + +''*********+s   
C& &
D0DDr  c                    ddl m}  |fdt          j                                        D                       d         d         S )z
        Returns the requested profiling output.

        Arguments
        ---------
        profile: str
          The name of the profiling output to return.

        Returns
        -------
        Profiling output wrapped in a pane.
        r"   )get_profilesc                2    i | ]\  \  }}}|k    ||f|S rQ   rQ   )r   nr  psr  s       rC   r   z&_state.get_profile.<locals>.<dictcomp>p  s7     . . .JFQB !W  VR ,rR   r   )r  rc  r>   r  r6  )r   r  rc  s    ` rC   get_profilez_state.get_profileb  sn     	*)))))| . . . .%/:O:O:Q:Q . . . / //02235 	5rR   c                $   | j                                         D ]'}	 |                                 # t          $ r Y $w xY wi | _         | j        D ]8}	 | j        |         d                                          )# t
          $ r Y 5w xY wi | _        dS )zI
        Stop all servers and clear them from the current state.
        r   N)rl   r~   stopr   rk   AssertionError)r   r   	server_ids      rC   kill_all_serversz_state.kill_all_serverss  s     m**,, 	 	F    	 	Ii(+002222!   s   2
??%A99
BBr   msgr$  c                    d}| j         r*t          | j                   f}t          j        |          } t	          t
          |                                          |g|R   dS )z
        Logs user messages to the Panel logger.

        Arguments
        ---------
        msg: str
          Log message
        level: str
          Log level as a string, i.e. 'debug', 'info', 'warning' or 'error'.
        rQ   )rm  N)r   r   r$   r   getattr_state_loggerlower)r   rm  r$  r  s       rC   r'  z
_state.log  sf     ; 	/t{OO%D%#...C-u{{}}--c9D999999rR   c                   | j         | j        rj| j        rJ| j                            t	          | j        |d                    }|                    | j                   n|                     |d           dS | j         | j        vrTg | j        | j         <   	 | j         	                    dt	          | j
        | j                              n# t          $ r Y nw xY w| j        | j                                      |           dS )z
        Callback that is triggered when a session has been served.

        Arguments
        ---------
        callback: Callable[[], None] | Coroutine[Any, Any, None]
           Callback that is executed when the application is loaded
        NFr   document_ready)r   r   r   r   r
   r  r   r   ro   on_eventr   AttributeErrorr   )r   r  r   s      rC   onloadz_state.onload  s    ;$"2  7*11'$,[`2a2a2abb(()FGGGGX666F[,,(*DL%$$%5wt?UW[Wb7c7cdddd!   T[!((22222s   3C 
CC%Callable[[BokehSessionContext], None]c                ~    | j         r| j         j        rt          d          | j                            |           dS )zG
        Callback that is triggered when a session is created.
        zCannot register session creation callback from within a session. If running a Panel application from the CLI set up the callback in a --setup script, if starting a server dynamically set it up before starting the server.N)r   r   rG   rp   r   )r   r  s     rC   on_session_createdz_state.on_session_created  sP     ; 	4;6 	.   	 ''11111rR   c                    | j         }|r|                    |           dS | j        | j        vr| j                            | j                   | j                            |           dS )zI
        Callback that is triggered when a session is destroyed.
        N)r   r)  r*  rp   r   rr   )r   r  r;   s      rC   r)  z_state.on_session_destroyed  su     k 	8$$X...../t7OOO(//0PQQQ&--h77777rR   r   param.Parameterized
parametersOptional[List[str]]c                J   t          |j                  |                    d          r
|dd         }|| j        v r| j        |         \  }}}t	                    t	          |          k    rt          d          fd|d         j                                                                        D             } |j        j        di | |	                    |           n#| 
                    |          }|g|f| j        |<   |j                            |           dS )a  
        Publish parameters on a Parameterized object as a REST API.

        Arguments
        ---------
        endpoint: str
          The endpoint at which to serve the REST API.
        parameterized: param.Parameterized
          The Parameterized object to publish parameters from.
        parameters: list(str) or None
          A subset of parameters on the Parameterized to publish.
        NrU   r"   z<Param REST API output parameters must match across sessions.c                $    i | ]\  }}|v 	||S rQ   rQ   )r   r1  r2  r|  s      rC   r   z"_state.publish.<locals>.<dictcomp>  s+    ccctq!STXbSbSbaSbSbSbrR   r   rQ   )r   r   
startswithr   r@   
ValueErrorr~   r6  r   r   r   r   )r   r   r   r|  r   old_parametersr   r~   s      `    rC   publishz_state.publish  s<     m122Js## 	$|Ht+++151Eh1O.NNB:#n"5"555 !_```cccc~a'8'>'E'E'G'G'M'M'O'OcccF&M&00000!!-0000##H--B/<oz2-ND *!!"j11111rR   c                   |                                   | j                                         | j                                         | j                                         | j                                         | j                                         | j                                         | j                                         | j	        "| j	        
                    d           d| _	        | j                                         | j                                         | j                                         | j                                         dS )zz
        Resets the state object killing running servers and clearing
        any other state held by the server.
        NF)rK  )rl  rv   rR  rd   rh   ri   rs   r   rt   r   shutdown	_sessions_session_key_funcsrp   rr   r   s    rC   rA   z_state.reset  s'   
 	   
(&&E&222 $D%%''' &&((("((*****rR   Callable[[], None]r  Tatstr | dt.timedeltacronOptional[str]c                   || j         v r8|| j         |         d         ur!| j                            d|d|d           dS t          |dd                              d          rt          d	          |5t          t                    rt                    fd
} |            }n4ddl	m	} t          j                                        n}	 |||	          }t          j                                                                        }
	 t          |          |
z
  }n# t          $ r Y dS w xY w||f| j         |<   | j                            |t%          | j        |                     dS )a  
        Schedules a task at a specific time or on a schedule.

        By default the starting time is immediate but may be
        overridden with the `at` keyword argument. The scheduling may
        be declared using the `period` argument or a cron expression
        (which requires the `croniter` library). Note that the `at`
        time should be in local time but if a callable is provided it
        must return a UTC time.

        Note that the scheduled callback must not be defined within a
        script served using `panel serve` because the script and all
        its contents are cleaned up when the user session is
        destroyed. Therefore the callback must be imported from a
        separate module or should be scheduled from a setup script
        (provided to `panel serve` using the `--setup` argument). Note
        also that scheduling is idempotent, i.e.  if a callback has
        already been scheduled under the same name subsequent calls
        will have no effect. This is ensured that even if you schedule
        a task from within your application code, the task is only
        scheduled once.

        Arguments
        ---------
        name: str
          Name of the scheduled task
        callback: callable
          Callback to schedule
        at: datetime.datetime, Iterator or callable
          Declares a time to schedule the task at. May be given as a
          datetime or an Iterator of datetimes in the local timezone
          declaring when to execute the task. Alternatively may also
          declare a callable which is given the current UTC time and
          must return a datetime also in UTC.
        period: str or datetime.timedelta
          The period between executions, may be expressed as a
          timedelta or a string:

            - Week:   '1w'
            - Day:    '1d'
            - Hour:   '1h'
            - Minute: '1m'
            - Second: '1s'

        cron: str
          A cron expression (requires croniter to parse)
        r"   z5A separate task was already scheduled under the name zk. The new task will be ignored. If you want to replace the existing task cancel it with `state.cancel_task(z7)` before adding adding a new task under the same name.NrO   rX   
bokeh_app_zCannot schedule a task from within the context of an application. Either import the task callback from a separate module or schedule the task from a setup script that you provide to `panel serve` using the --setup commandline argument.c               3  P  K   t          t                    r'	 t                    } |                                 V  &t	                    r}	  t
          j                                                  } | t          | 	                    t
          j
        j                                                                                  V  |                                V  t          pt
          j                                        }	 |                                V  |z  })NT)tzinfo)rH   r   r  r   callabler   r   utcnowStopIterationreplacetimezoneutc
astimezoner   )r   new_timer  rD  s     rC   dgenz"_state.schedule_task.<locals>.dgenC  s     b(++ (."2hh!mmoo---. b\\ ([ b!3!3!5!566;"//!kkkAALLNNXXZZZZZ	[
 ^,,..(((''2!2!2'",,.....&H'rR   r   )croniterr  )rt   r   warningro  r  rG   rH   r{   r!   r  r   r   r   r   r  r  r   r  r
   r  )r   r   r  r  rD  r  r  r  r  baser   r  s      ``       rC   schedule_taskz_state.schedule_task  s   f 4?""tt4Q777
""= = = 04= = =   F8\2..99,GG 	0   <&#&& 1(00' ' ' ' ' '$ DFFEE))))))(*
2;??$$$DHT4((Ekoo))++	!%es!2 	 	 	FF	!& 1#gd6H$.O.O 	  	
 	
 	
 	
 	
s   D& &
D43D4r   r0   c                    t          |j        j        t          j                  st	          d          || j        vr| j                            |           dS dS )z
        Syncs the busy state with an indicator with a boolean value
        parameter.

        Arguments
        ---------
        indicator: An BooleanIndicator to sync with the busy property
        z:Busy indicator must have a value parameterof Boolean type.N)rH   r   r   Booleanr  rv   r   r   s     rC   	sync_busyz_state.sync_busyd  sg     )//?? 	1 0 1 1 1D,,,##I..... -,rR   c                    ddl m} ddlm} | j                            |          }|d S  ||j        ||          }|                     |          S )Nr   decode_signed_valuer   r   )tornado.webr  r   cookiesr   cookie_secret_decrypt_cookie)r   cookie_namecookier  r   s        rC   _decode_cookiez_state._decode_cookiew  sp    333333######!!+..>4$$V%9;OO##F+++rR   c                    | j         |                    d          S | j                             |                              d          S )Nutf-8)
encryptiondecodedecrypt)r   r  s     rC   r  z_state._decrypt_cookie  s@    ?"==)))&&v..55g>>>rR   c                b   | j         | j        v r,d| j        | j                  v r| j        | j                  d         S |                     d          }|sdS t          |          }|d         t          j                            t          j        j                  	                                k    rdS |S )z<
        Returns the OAuth access_token if enabled.
        access_tokenNexp)
user_oauth_user_overridesr  r    r   r   r   r  r  r   )r   r  decoded_tokens      rC   r  z_state.access_token  s    
 9222~IcdhdmIn7n7n-di8HH**>:: 	F$\222;??2;?#C#C#M#M#O#OOO4rR   c                    | j         sdS | j         j        j        j        j        }|                    d          r
|dd         n|}t          | j        |          S )zN
        Returns the URL of the app that is currently being executed.
        NrU   r"   )r   r   r   application_contexturlr  r   base_url)r   app_urls     rC   r  z_state.app_url  s\    
 { 	F+-<PT!(!3!3C!8!8E'!""++gt}g...rR   BrowserInfo | Nonec                J   ddl m } ddlm} |j        r;| j        r4| j        j        r(| j        | j        vr |            x}| j        | j        <   nT| j        %| j        |j        r |            | _        | j        }n(| j        r| j                            | j                  nd }|S )Nr   r   r"   r1   )	r   browserr2   browser_infor   r   rb   ra   r   )r   r   r2   r  s       rC   r  z_state.browser_info  s    ######(((((( 	O4; 	O4;3N 	OSWS^fjftStSt4?KMMAGdnT[11[ }$)<$ +mGG9=Ndn((555$GrR   Document | Nonec                ,   	 t                      }| j        odt          j        v}|r*|j        s|r!|| j                                        }|r|c S S | j                                        }|r|S dS # | j                                        }|r|c cY S w xY w)zH
        Returns the Document that is currently being executed.
        pyodide_kernelN)rK   r   r   r   r   r?   r   )r   r;   pyodide_sessionr   s       rC   r   z_state.curdoc  s    
	//C".V3C3;3VO +  \%%''F  \%%''F   \%%''F s   /A0 0 BBc                :    | j                             |           dS )z1
        Overrides the current Document.
        N)r?   r@   r   s     rC   r   z_state.curdoc  s     
 	rR   Dict[str, str]c                X    | j         r"| j         j        r| j         j        j        j        ni S )z[
        Returns the cookies associated with the request that started the session.
        )r   r   r  r  r   s    rC   r  z_state.cookies  -    
 ?CkqdkNiqt{*2::oqqrR   Dict[str, str | List[str]]c                X    | j         r"| j         j        r| j         j        j        j        ni S )zZ
        Returns the header associated with the request that started the session.
        )r   r   r  headersr   s    rC   r  z_state.headers  r  rR   c                V    | j         }|r|| j        v r| j        |         S |j        rdS dS )z@
        Whether the application has been fully loaded.
        FT)r   rs   r   r   s     rC   loadedz_state.loaded  sB    
  	%%|F++' utrR   Location | Nonec                6   | j         rZ| j         | j        vrLddlm} | j         j        r  |j        | j         j        j                  }n
 |            }|| j        | j         <   n7| j         | j        }n(| j         r| j                            | j                   nd }|S )Nr"   r5   )	r   rd   locationr6   r   from_requestr  rc   r   )r   r6   r   s      rC   r  z_state.location  s    ; 
	L4;do==******{* !+h+DK,G,OPPhjj+.DODK(([ .CC6:kK$/%%dk222tC
rR   c                    ddl m} |S )Nr"   )log_terminal)adminr  )r   r  s     rC   r  z_state.log_terminal  s    ''''''rR   NotificationArea | Nonec                ~   ddl m } |j        ro| j        rh| j        j        r\| j        | j        vrNddlm} i }|j        rd|j        dd|d<   |j        rd	|j        d
|d<    ||          x| j        | j        <   }|S | j        | j        j        | j        S | j        r| j        	                    | j                  nd S )Nr   r   r"   r7   successi  )typemessagedurationrs  r#  )r  r  connection_lost)	js_events)
r   notificationsr   r   rf   r8   ready_notificationdisconnect_notificationre   r   )r   r   r8   r  r  s        rC   r  z_state.notifications  s   ###### 	QDK 	QDK4O 	QTXT_gkgzTzTz777777I( z7@VMftx.y.y	*+- l8?FLj/k/k	+,?O?OZc?d?d?ddD,}  [ DK$?$G%%;?;P4&**4;777DPrR   c                t   | j         | j        v r!d| j        v r| j        | j                  d         S |                     d          }|sdS 	 t          |          }n# t          $ r |cY S w xY w|d         t
          j                            t
          j        j	                  
                                k    rdS |S )zK
        Returns the OAuth refresh_token if enabled and available.
        refresh_tokenNr  )r  r  r  r    r  r   r   r   r  r  r   )r   r  r  s      rC   r  z_state.refresh_token  s    
 9222$Jd7d7d-di8II++O<< 	F	!(77MM 	! 	! 	!    	!2;??2;?#C#C#M#M#O#OOO4s   
A A)(A)c                    	 t          j                    d         j        j        d                             d          S # t
          $ r Y dS w xY w)zx
        Whether we are currently inside a script or notebook that is
        being served using `panel serve`.
        r"   rN   r  F)r  r   frame	f_globalsr  r   r   s    rC   servedz_state.served  sS    	=??1%+5jALL\ZZZ 	 	 	55	s   ;> 
AADict[str, List[bytes]]c                X    | j         r"| j         j        r| j         j        j        j        ni S )ze
        Returns the request arguments associated with the request that started the session.
        )r   r   r  	argumentsr   s    rC   session_argsz_state.session_args!  s0    
 AEsPTP[Pkst{*2<<qssrR   BaseTemplate | Nonec                    ddl m } | j        | j        v r| j        | j                 S | j        | j        r| j        S |                    |j                  }| j        || _        n|| j        | j        <   |S )Nr   r   )theme)r   r   rh   rg   templater  )r   r   r  s      rC   r  z_state.template(  s    ######;$/))?4;//[ T^ >!???66;%DNN+3DODK(rR   c                    ddl m} ddlm} | j                            d          }|rdS | j                            d          }||j        dS  ||j        d|                              d	          S )
z4
        Returns the OAuth user if enabled.
        r   r  r   r   is_guestguestr  Nr  )r  r  r   r  r   r  r  )r   r  r   r  r  s        rC   r  z_state.user6  s    
 	433333######<##J// 	7|''<6/74""6#7FFMMgVVVrR   Dict[str, Any] | Nonec                    | j                             d          }|rdddS |                     d          }|dS t          |          S )z@
        Returns the OAuth user information if enabled.
        r  r  )r  usernameid_tokenN)r  r   r  r    )r   r  r  s      rC   	user_infoz_state.user_infoG  s[    
 <##J// 	:#999&&z224H%%%rR   )rE   r{   )rE   r   )rE   r   )rE   r   )rE   r   )r   r   rE   r   )r;   r   rE   r   )rE   r   )r   r{   )r;   r   rE   r   r=   )r;   r   rE   r   )r   r{   rE   r   )r   r%   r;   r   rE   r   )r   r(   )r+  r{   r,  r-  r.  r   rE   r:   )rB  NNT)r  rC  rD  r   rE  rF  rG  r   rH  r   rE   r4   )F)r   r{   rK  r   )rY  )r  rZ  r  r[  rE   r   )r  r{   )r   )rm  r{   r$  r{   rE   r   )r  rC  )r  rw  rE   r   )r   r{   r   r{  r|  r}  rE   r   )NNN)r   r{   r  r  r  r  rD  r  r  r  rE   r   )r   r0   rE   r   )rE   r  )rE   r  )rE   r  )rE   r  )rE   r  )rE   r  )rE   r  )rE   r  )rE   r  )rN   rO   rP   __doc__r   Stringr  r  r   r   r   	Parameterr  rel_pathr   r   	webdriverIntegerr   rQ  r	   r?   r\   __annotations__r   r]   r   _admin_context_CommManagerr^   r_   _kernelsr`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   r   ro   rp   rq   rr   rs   _setup_modulert   ru   rv   r  r   r   r  r   rw   rx   r   r9  rz   r  r  r  r   _active_usersr   propertyr   r   r   r   r   r   setterr   dependsr   r   r   r   r   r   r   r   r  r  r   r  r*  rA  rJ  rN  rX  r  rg  rl  r'  rv  ry  r)  r  rA   r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  rQ   rR   rC   rT   rT   U   s
         
 u|C$ =) * * *H 5= <   D EJr (> ? ? ?E ! 4; < < <J u|B <6 7 7 7H
 5:13>;=='B 'BHAB B BL   3A B B BI "EM! 2= > > >M  UZ 14 5 5 5N j4000G "E!!!! ?P>O>Q>QKQQQQL N 3?M>>>>.33333H>O>O>Q>QKQQQQ .2H1111DUDUDWDWIWWWW ,0I////BSBSBUBUJUUUU 8<M;;;;N_N_NaNaNaaaa 04I3333FWFWFYFYJYYYY RTFSSSS (*K)))) ]_H^^^^57H7777GXGXGZGZNZZZZ ACHBBBB  !!G =N<M<O<OGOOOOOQQQQQXZ ZZZZQSSSSS;L;L;N;NGNNNN M QSJRRRRO`O`ObObIbbbb 57K6666 J
;;t#4#4555I O ZkYjYlYlLllll FWEVEXEXLXXXX :@AQAQ8RLRRRR I GIIMM M M M $ $ $ X$ & & X&    X
 H H H XH ) ) ) X) J J J XJ 6 6 6 6V V V V U]?$///, , 0/, U]6&&&( ( ( '&(+ + +"% "% "%H   X   <   , , , , ,*& & & &(  . . . . .V V V V? ? ? ?2 2 2 2 2l FJ% % % % %N& & & & &$$ $ $" ,2 +  +  +  +  +D5 5 5 5"   ": : : : :"3 3 3 302 2 2 2
8 
8 
8 
8 +/2 2 2 2 2@+ + +, AEAEg
 g
 g
 g
 g
R/ / / /&, , , ,? ? ?
    X / / / X/    X    X ]   ] r r r Xr r r r Xr 
 
 
 X
    X   X Q Q Q XQ     X"   X t t t Xt    X W W W XW  
& 
& 
& X
& 
& 
&rR   rT   )r;   r   )rE   r   )er  
__future__r   r   r   r   r]  r  loggingrU  r   r   r7  collectionsr   r   r   collections.abcr   
contextlibr   contextvarsr	   r
   r   typingr   r   r   r   r   r   	TIteratorr   r   r   r   r   r   r   urllib.parser   weakrefr   r   bokeh.documentr   bokeh.document.lockingr   bokeh.ior   r?   pyviz_commsr   r  utilr    r!   r#   r$   	getLoggerrp  concurrent.futuresr%   bokeh.document.modelsr&   bokeh.modelr'   bokeh.server.contextsr(   bokeh.server.serverr)   IPython.displayr*   r+   r   r-   template.baser.   viewabler/   widgets.indicatorsr0   r  r2   r
  r4   r  r6   r  r8   r   r9   r:   rD   rK   rM   r  ParameterizedrT   r>   rQ   rR   rC   <module>r     s6    # " " " " "             



      9 9 9 9 9 9 9 9 9 9 $ $ $ $ $ $ % % % % % % " " " " " " $ $ $ $ $ $ $ $                               
 !           % % % % % %  # # # # # # 8 8 8 8 8 8 & & & & & & 3 3 3 3 3 3 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7!!-00 ))))))888888!!!!!!999999******------      %%%%%%,,,,,,######555555$$$$$$++++++""""""//////''''''A # # # #           BK2;-"<=y?UUV}& }& }& }& }&U  }& }& }&~ 	rR   