
    Bec                        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
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 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$ d dl%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- e	j.        /                    d          d             Z0e	j.        /                    d          d             Z1e	j.        /                    d          d             Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d  Z?d! Z@d" ZAd# ZBd$ ZCd% ZDd& ZEe	j.        /                    d          d'             ZFe	j.        /                    d          d(             ZGe	j.        /                    d          d)             ZHe	j.        /                    d          d*             ZIe	j.        /                    d          d+             ZJd, ZKd- ZLd. ZMd/ ZNd0 ZOd1 ZPd2 ZQd3 ZR G d4 d5e$          ZSd6 ZTd7 ZUd8 ZVd9 ZW G d: d;e"          ZXd< ZYd= ZZd> Z[d? Z\d@ Z]dA Z^dKdBZ_dKdCZ`e	j.        a                    dDdEe_fdFe_fdEe`fdFe`fg          dG             Zbe	j.        a                    dDdEe_fdFe_fdEe`fdFe`fg          dH             Zce	j.        a                    dDdEe_fdFe_fdEe`fdFe`fg          dI             ZddJ ZedS )L    N)ButtonClick)config)state)DIST_DIR)
INDEX_HTML
get_serverserve
set_curdoc)Row)HTML)TableEditEvent)Markdown)ReactiveHTML)BootstrapTemplate)serve_and_requestserve_and_wait
wait_until)Button	TabulatorTerminal	TextInputservernamec                     | \  }}}}|j         |k    sJ |j        j        d         }t          |t                    sJ |j        dk    sJ d S )Nr   z&lt;h1&gt;Title&lt;/h1&gt;)portdocumentroots
isinstanceBkHTMLtexthtml_server_sessionhtmlr   sessionr   roots         7lib/python3.11/site-packages/panel/tests/test_server.pytest_get_serverr(   !   sc    "5D&'4;$!!$DdF#####94444444    c                     | \  }}}}d|_         |                                 |j        j        d         }t	          |t
                    sJ |j        dk    sJ d S )N<h1>New Title</h1>r   z&lt;h1&gt;New Title&lt;/h1&gt;)objectpullr   r   r   r    r!   r"   s         r'   test_server_updater.   *   sd    "5D&'4&DKLLNNN!!$DdF#####98888888r)   c                     | \  }}}fd}|j                             |d           |                    j        d d ddd           d S )Nc                 2    t           j        j        u sJ d S N)r   curdocr   )eventr%   s    r'   handle_eventz1test_server_change_io_state.<locals>.handle_event8   s    |w///////r)   r,   r!   z<h1>Title</h1>r+   )paramwatch_server_changer   )r#   r$   r   r   r4   r%   s        @r'   test_server_change_io_stater8   4   sm    "5D&'40 0 0 0 0 	J\8,,,($f>NPdeeeeer)   c                     t          d          } dt          j                            t                    i}t          | |d          }t          t          d          5 }|                                |j        	                    d          
                    dd          k    sJ 	 d d d            d S # 1 swxY w Y   d S )	N# Titletestsz/tests/test_server.py)static_dirssuffixutf-8encoding

)r   ospathdirname__file__r   openreadcontentdecodereplace)r$   staticrfs       r'   test_server_static_dirsrO   ?   s    IDrwx001F$F;RSSSA	h	)	)	) KQvvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   AB33B7:B7c                      t          d          } t          d| idt          d          }d|j                            d          v sJ d S )Nr:   appTF)	use_indexindexredirect_rootzhref="./app"r>   )r   r   r   rI   rJ   )r$   rM   s     r'   test_server_root_handlerrU   J   sY    ID	Zu	 	 	A QY--g66666666r)   c                  F   t                      } t          d| id          }t          t          dz  dz  dz  d          5 }|                                |j                            d                              d	d
          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Ntemplatez@/static/extensions/panel/bundled/bootstraptemplate/bootstrap.cssr=   bundledbootstraptemplatebootstrap.cssr>   r?   rA   rB   r   r   rG   r   rH   rI   rJ   rK   rW   rM   rN   s      r'   %test_server_template_static_resourcesr^   T   s     ""H:x09{|||A	h"%88?JU\	]	]	] Kabvvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   ABBBc                  H   t                      } t          d| idd          }t          t          dz  dz  dz  d	          5 }|                                |j                            d                              d
d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )NrW   /prefixzG/prefix/static/extensions/panel/bundled/bootstraptemplate/bootstrap.cssprefixr=   rY   rZ   r[   r>   r?   rA   rB   r\   r]   s      r'   1test_server_template_static_resources_with_prefixrc   ]   s	    ""H:x0  LU  	V  	V  	VA	h"%88?JU\	]	]	] Kabvvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   ABBBc                      t                      } t          d| idd          }d|j                            d          v sJ d S )NrW   r`   /prefix/templatera   zFhref="static/extensions/panel/bundled/bootstraptemplate/bootstrap.css"r>   r   r   rI   rJ   rW   rM   s     r'   >test_server_template_static_resources_with_prefix_relative_urlrh   f   sQ     ""H:x0K]^^^ASWXW`WgWghoWpWpppppppr)   c                      t                      } t          d| idd          }d|j                            d          v sJ d S )N/subpath/templater`   /prefix/subpath/templatera   zIhref="../static/extensions/panel/bundled/bootstraptemplate/bootstrap.css"r>   rf   rg   s     r'   Jtest_server_template_static_resources_with_subpath_and_prefix_relative_urlrl   n   sR     ""H.9)TnoooAVZ[ZcZjZjkrZsZsssssssr)   c                  P    t          d          } t          |           j        sJ d S )Nr:   )r   r   ok)mds    r'   test_server_extensions_on_rootrp   v   s,    	)		BR  ######r)   c                     t          d          }d}d| d|  d| }t          ||i| d| d|           }|j        dk    sJ d	|  d
|j                            d          v sJ d S )Nr:   testz,bokeh-autoload-element=1002&bokeh-app-path=/z%&bokeh-absolute-url=http://localhost:/z/autoload.js?)r   r=      http://localhost:z%/static/extensions/panel/panel.min.jsr>   )r   r   status_coderI   rJ   )r   r$   app_nameargsrM   s        r'   test_autoload_jsry   {   s    IDHz(zzimzzpxzzD8T*>_(>_>_Y]>_>_```A=CJtJJJaiN^N^_fNgNgggggggr)   c                     t          d          } g dgffd	}|                     |           t          |            t          | j                                                  d         d         j        }t          |          5  t          d          D ]}| xj	        dz  c_	        	 d d d            n# 1 swxY w Y   t          fd           d S )NClickr   r   c                    K   |dxx         dz  cc<                        |d                    t          j        d           d {V  |dxx         dz  cc<   d S Nr      appendasynciosleepr3   countcountss     r'   cbz'test_server_async_callbacks.<locals>.cb   sm      aAeAhmAaAr)      r~   c                  P    t                     dk    ot                     dk    S r}   lenmaxr   s   r'   <lambda>z-test_server_async_callbacks.<locals>.<lambda>        s6{{Q:3v;;? r)   )r   on_clickr   list_modelsvaluesr   r
   rangeclicksr   )buttonr   doc_r   s       @r'   test_server_async_callbacksr      s2   !!!FF c       OOBf
v~$$&&
'
'
*1
-
6C	C  q 	 	AMMQMMM	              
 ::::;;;;;s   #B66B:=B:c                      i fdfd} t          | d           t          fd           t          fd           d S )Nc                    K   t           j        } t          j        d           d {V  g | <   t	          d          D ]A}t          j        d           d {V  |                              t           j                   Bd S )N      ?r   皙?)r   r2   r   r   r   r   )r2   idocss     r'   taskz+test_server_async_local_state.<locals>.task   s      mC         Vq 	. 	.A-$$$$$$$$$L----	. 	.r)   c                  0    t          j                    dS NzMy appr   executer   s   r'   rQ   z*test_server_async_local_state.<locals>.app       dxr)      nc                  *    t                     dk    S Nr   r   r   s   r'   r   z/test_server_async_local_state.<locals>.<lambda>       s4yyA~ r)   c                  Z    t          d                                  D                       S )Nc                 h    g | ]/\  }}t          t          |                    d k    o	|d         |u 0S )r~   r   r   set.0r   r   s      r'   
<listcomp>zCtest_server_async_local_state.<locals>.<lambda>.<locals>.<listcomp>   s:    aaaysDCD		NNa/BDGsNaaar)   allitemsr   s   r'   r   z/test_server_async_local_state.<locals>.<lambda>   s+    saaTXT^T^T`T`aaabb r)   r   r   rQ   r   r   s    @@r'   test_server_async_local_stater      s    D. . . . .     cQ %%%%&&&bbbbcccccr)   c                      i dfd	fd} t          | d           t          fd           t          fd           d S )	Nr~   c                 P  K   t           j        }t          j        d           d {V  | dk    r t          j         | dz
                       g |<   t          d          D ]A}t          j        d           d {V  |                             t           j                   Bd S )Nr   r   r~   
   r   )r   r2   r   r   ensure_futurer   r   )depthr2   r   r   r   s      r'   r   z8test_server_async_local_state_nested_tasks.<locals>.task   s      mC         199!$$uQw--000Vr 	. 	.A-$$$$$$$$$L----	. 	.r)   c                  0    t          j                    dS r   r   r   s   r'   rQ   z7test_server_async_local_state_nested_tasks.<locals>.app   r   r)   r   r   c                  *    t                     dk    S r   r   r   s   r'   r   z<test_server_async_local_state_nested_tasks.<locals>.<lambda>   r   r)   c                  Z    t          d                                  D                       S )Nc              3   p   K   | ]1\  }}t          t          |                    d k    o	|d         |u V  2dS )r~   r   Nr   r   s      r'   	<genexpr>zOtest_server_async_local_state_nested_tasks.<locals>.<lambda>.<locals>.<genexpr>   sD      ``ic43s4yy>>Q.A47c>``````r)   r   r   s   r'   r   z<test_server_async_local_state_nested_tasks.<locals>.<lambda>   s+    s``SWS]S]S_S_````` r)   )r~   r   r   s    @@r'   *test_server_async_local_state_nested_tasksr      s    D. . . . . . .     cQ %%%%&&&````aaaaar)   c                     ddfd} fd}d\  }}t          | |           t          ||           t          j        d| d          j                            d	          }t          j        d| d          j                            d	          }t
          j        vsJ t
          j        vsJ |v sJ |vsJ |vsJ |v sJ d S )
Nzbody { background-color: red }z body { background-color: green }c                  "     gt           _        d S r1   r   raw_css)CSS1s   r'   app1z1test_serve_config_per_session_state.<locals>.app1       r)   c                  "     gt           _        d S r1   r   )CSS2s   r'   app2z1test_serve_config_per_session_state.<locals>.app2   r   r)   )iY  iZ  r   ru   rs   r>   )r   requestsgetrI   rJ   r   r   )r   r   port1port2r1r2r   r   s         @@r'   #test_serve_config_per_session_stater      s'   +D-D                   LE54e$$$$4e$$$$	2%222	3	3	;	B	B7	K	KB	2%222	3	3	;	B	B7	K	KBv~%%%%v~%%%%2::::r>>>>r>>>>2::::::r)   c                      g fd} t          j        |            t          d          }t          |d           t	                    dk    sJ d S )Nc                 2                         |            d S r1   r   session_contextsession_contextss    r'   append_sessionz6test_server_on_session_created.<locals>.append_session       00000r)   r:   r   r   )r   on_session_createdr   r   r   r   r$   r   s     @r'   test_server_on_session_createdr      ss    1 1 1 1 1	^,,,IDda      A%%%%%%r)   c                      g fd} t          j        |            t          d          }t          |ddd           t	          fd           d S )Nc                 2                         |            d S r1   r   r   s    r'   r   z8test_server_on_session_destroyed.<locals>.append_session   r   r)   r:   r   i  )r   "check_unused_sessions_milliseconds$unused_session_lifetime_millisecondsc                  *    t                     dk    S r   r   )r   s   r'   r   z2test_server_on_session_destroyed.<locals>.<lambda>   s    s+,,1 r)   )r   on_session_destroyedr   r   r   r   s     @r'    test_server_on_session_destroyedr      sv    1 1 1 1 1	~...IDdaCnqrrrr111122222r)   c                  ,   t          j        d          5  t          d          } t          |            t          j        d         dk    sJ t          t          j        d                   dk    sJ t          t          j        d                                                   d         \  }}|d         	                    d	          sJ t          j        d
         dk    sJ t          | j
                                                  d         }t          j                    }t          j                    }i |_        ||_        ||_        ||_        t%          j        |          |_        t+          |          5  t	          j        d            t          j        d
         dk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |           t	          j        |           t          j        d
         dk    sJ d S )N)session_historyr:   totalr~   sessionsr   
user_agentzpython-requestslive)r   r   r   r   r   session_infor   r   r   
startswith
_documentskeysr5   Parameterized	argumentsrequest	_documentidweakrefref_session_contextr
   _init_session_server_destroy_destroy_session)r$   sidr%   r   r   r   s         r'   test_server_session_infor     sd   	B	'	'	' 3 3	""$!'*a////5%j122a7777E.z:@@BBCCAFW|$//0ABBBBB!&)Q....4?''))**1--//%''")$'! &{?;;__ 	3 	3%%%%f-22222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3'3 3 3 3 3 3 3 3 3 3 3 3 3 3 3. 	)))	?+++f%******s6   E!G7-F1%G1F5	5G8F5	9GGGc                  t    dt           j        d<   d fd} t          |            t          d            d S )Nr   r   c                  :    t           j        dxx         dz  cc<   d S )Nr   r~   r   cache r)   r'   periodic_cbz0test_server_schedule_repeat.<locals>.periodic_cb  s&    G!r)   c                  6    t          j        d d           dS )Nperiodicz0.5s)period# state.schedule testr   schedule_task)r  s   r'   rQ   z(test_server_schedule_repeat.<locals>.app!  s!    JFCCCC&&r)   c                  .    t           j        d         dk    S )Nr   r   r  r  r)   r'   r   z-test_server_schedule_repeat.<locals>.<lambda>'  s    u{7+a/ r)   )r   r  r   r   )rQ   r  s    @r'   test_server_schedule_repeatr    s_    EK" " "' ' ' ' ' c//00000r)   c                  v   d t           j                                        t          j        d          z   fd} t	          |            t          d            t          t          j        d         z
            t          j        d          k     sJ t          t          j
                  dk    sJ d S )	Nc                  \    t           j                                        t          j        d<   d S Nat)dtdatetimenowr   r  r  r)   r'   r  z,test_server_schedule_at.<locals>.periodic_cb+  s     KOO--Dr)   Q?secondsc                  6    t          j        d            dS Nr	  )r  r  r  )r  	scheduleds   r'   rQ   z$test_server_schedule_at.<locals>.app0  s!    J	BBBB&&r)   c                      dt           j        v S r  r  r  r)   r'   r   z)test_server_schedule_at.<locals>.<lambda>7  s    tu{* r)   r  皙?r   )r  r  r  	timedeltar   r   absr   r  r   
_scheduled)rQ   r  r  s    @@r'   test_server_schedule_atr"  *  s    . . . !!BL$>$>$>>I' ' ' ' ' ' c **+++u{4 9,--S0I0I0IIIIIu  A%%%%%%r)   c                     g t           j        d<   d t          j                                        t          j        d          z   t          j                                        t          j        d          z   fdfd} t          |            t          d            t          t           j        d         d	         z
            t          j        d
          k     sJ t          t           j        d         d         z
            t          j        d
          k     sJ t          t           j
                  d	k    sJ d S )Nr  c                      t           j        d                             t          j                                                   d S r  r   r  r   r  r  r  r  r)   r'   r  z5test_server_schedule_at_iterator.<locals>.periodic_cb>  /    D  !2!233333r)   r  r  (\?c               3      K    V  V  d S r1   r  )
scheduled1
scheduled2s   r'   schedulez2test_server_schedule_at_iterator.<locals>.scheduleD  s%      r)   c                  F    t          j        d                         dS r  r  r  r+  s   r'   rQ   z-test_server_schedule_at_iterator.<locals>.appH  s'    J

CCCC&&r)   c                  H    t          t          j        d                   dk    S Nr     r   r   r  r  r)   r'   r   z2test_server_schedule_at_iterator.<locals>.<lambda>O      s5;t,--2 r)   r   r  r~   )r   r  r  r  r  r  r   r   r   r   r!  )rQ   r  r+  r)  r*  s    @@@@r'    test_server_schedule_at_iteratorr3  <  sY   EK4 4 4 ""R\$%?%?%??J""R\$%?%?%??J     ' ' ' ' ' ' c 22333u{4 #j011BL4M4M4MMMMMu{4 #j011BL4M4M4MMMMMu  A%%%%%%r)   c                     g t           j        d<   d t          j                                        t          j        d          z   t          j                                        t          j        d          z   g} t          |           fdfd}t          |           t          d            d	 | D             } t          t           j        d         d
         | d
         z
            t          j        d          k     sJ t          t           j        d         d         | d         z
            t          j        d          k     sJ t          t           j                  d
k    sJ d S )Nr  c                      t           j        d                             t          j                                                   d S r  r%  r  r)   r'   r  z5test_server_schedule_at_callable.<locals>.periodic_cbW  r&  r)   r  r  r'  c                 "    t                    S r1   )next)utcnowsiters    r'   r+  z2test_server_schedule_at_callable.<locals>.schedule`  s    E{{r)   c                  6    t          j        d            dS r  r  r-  s   r'   rQ   z-test_server_schedule_at_callable.<locals>.appc  s!    JAAAA&&r)   c                  H    t          t          j        d                   dk    S r/  r1  r  r)   r'   r   z2test_server_schedule_at_callable.<locals>.<lambda>j  r2  r)   c                     g | ]M}|                     t          j        j                                                                        d           NS ))tzinfoN)rK   r  timezoneutc
astimezone)r   ss     r'   r   z4test_server_schedule_at_callable.<locals>.<listcomp>m  sW        	
			))4466>>d>KK  r)   r   r  r~   )r   r  r  r  r8  r  iterr   r   r   r   r!  )r  rQ   r  r+  r9  s     @@@r'    test_server_schedule_at_callablerC  U  s   EK4 4 4 	r|D9999
r|D9999I OOE    ' ' ' ' ' ' c 22333   I u{4 #il233bl36O6O6OOOOOu{4 #il233bl36O6O6OOOOOu  A%%%%%%r)   c                 H   dgfd}t          |d          \  }}t          t          j                  dk    sJ dt          j        v sJ t          j        d         }|j        |j                            d          v sJ |j        |j                            d          vsJ d S )Nr   c                 <    d| d          }| dxx         dz  cc<   |S )N# Count r   r~   r  )r   rI   s     r'   rQ   z'test_server_reuse_sessions.<locals>.appx  s-    (VAY((q			Q			r)   r0  r   r~   )rs   defaultr>   )r   r   r   	_sessionstokenrI   rJ   )reuse_sessionsrQ   r   r   r%   s        r'   test_server_reuse_sessionsrK  v  s    3    
 sa(((FBu1$$$$u....o./G=BJ--g666666=
 1 1' : :::::::r)   c                    d t           _        dgfd}t          ||            t          j        d|  d          }t          j        d|  d          }t          t          j                  dk    sJ d	t          j        v sJ d
t          j        v sJ t          j                                        \  }}|j	        |j
                            d          v sJ |j	        |j
                            d          v sJ d S )Nc                 T    | j         | j                            ddg          d         fS )Narg r   )rD   r   r   )rM   s    r'   r   zBtest_server_reuse_sessions_with_session_key_func.<locals>.<lambda>  s$    1M1Ma1P(Q r)   r   c                    dt           j        v r,t           j        d         d                             d          }nd}d| d          }t          |          }|j                            |           | dxx         dz  cc<   |S )NrN  r   r>   EmptyrF  )titler~   )r   session_argsrJ   r   mainr   )r   rR  rI   tmpls       r'   rQ   z=test_server_reuse_sessions_with_session_key_func.<locals>.app  s    E&&&&u-a077@@EEE(VAY(( u---	!!!q			Q			r)   r   ru   z	/?arg=fooz	/?arg=barr0  )rs   s   foo)rs   s   barr>   )r   session_key_funcr   r   r   r   r   rH  r   rI  rI   rJ   )r   rJ  rQ   r   r   session1session2s          r'   0test_server_reuse_sessions_with_session_key_funcrY    s   QQF3 	 	 	 	 3T""""	9$999	:	:B	9$999	:	:Bu1$$$$EO++++EO++++//11Hh>RZ..w777777>RZ..w77777777r)   c                 j    | ^ }}|^ }}t          t                    }d| d|v sJ d| d|v sJ d S )Nz
localhost:z - HTMLz - Markdown)reprr   )r#   markdown_server_sessionr   	html_portmarkdown_portserver_infos         r'   test_show_server_infor`    s^    'MQ	/Qu++K*	***k99992222kAAAAAAr)   c                 d    | ^}}}|^}}}t          j                     |j        sJ |j        sJ d S r1   )r   kill_all_servers_stopped)r#   r\  r   server_1server_2s        r'   test_kill_all_serversrf    sK    )OAx!-OAx!	r)   c                      | dddd          \  }}|j         j        dk    sJ |j         j        dk    sJ t          j        t                    5   | dddd          \  }}ddd           dS # 1 swxY w Y   dS )z)Serve multiple apps with a title per app.)r   r   APP1APP2)slugstitles)badkeyr   N)r   rR  pytestraisesKeyError)multiple_apps_server_sessionsrW  rX  s      r'   test_multiple_titlesrq    s    76'G'GI I IHh"f,,,,"f,,,, 
x	 	  O O::"ff+M+MO O O(O O O O O O O O O O O O O O O O O Os   A22A69A6c                      t          j        t                    j        dz  dz  } t	          d| i          }d|j        j        v sJ d S )Niozpanel_app.pyz	panel-appz
/panel-apppathlibPathrF   parentr   _tornadoapplicationsrD   r   s     r'   (test_serve_can_serve_panel_app_from_filer{    sL    <!!(4/>Dd+,,F6?7777777r)   c                      t          j        t                    j        dz  dz  } t	          d| i          }d|j        j        v sJ d S )Nrs  z	bk_app.pyzbk-appz/bk-apprt  rz  s     r'   (test_serve_can_serve_bokeh_app_from_filer}    sL    <!!(4/;D4())F4444444r)   c           	      f   t          d          }t          d          }g dgffd	}|                    |           |                    |           t          ||          }t          |           t	          |j                                                  d         d         }|j        }t          |          5  |	                    ||j
        d         d ddd           |	                    ||j
        d         d ddd           d d d            n# 1 swxY w Y   t          fd           d S )	Nr{   r   r   c                     |dxx         dz  cc<                        |d                    t          j        d           |dxx         dz  cc<   d S Nr   r~   r   r   timer   r   s     r'   r   z0test_server_thread_pool_change_event.<locals>.cb  T    aAeAh
3aAr)   r   r   r~   c                  P    t                     dk    ot                     dk    S r}   r   r   s   r'   r   z6test_server_thread_pool_change_event.<locals>.<lambda>  r   r)   )r   r   r   r   r   r   r   r   r
   r7   r   r   )	threadsr   r   button2r   layoutmodelr   r   s	           @r'   $test_server_thread_pool_change_eventr    s   !!!F'"""GF       OOBR!!Ff&&(())!,Q/E
.C	C K Kc59T?D(AqIIIsEIdOT8QJJJK K K K K K K K K K K K K K K
 ::::;;;;;s   =ADDDc                   	 dd l }|                    ddgddggddg          }t          |          }g 	dgf	fd	}|                    |           t	          |           t          |j                                                  d         d         }t          |dd          }t          d          D ]}|
                    |j        |           t          	fd	           d S )
Nr   r~   r0  AB)columnsc                     |dxx         dz  cc<                        |d                    t          j        d           |dxx         dz  cc<   d S r  r  r   s     r'   r   z/test_server_thread_pool_bokeh_event.<locals>.cb  r  r)   r   c                  P    t                     dk    ot                     dk    S r}   r   r   s   r'   r   z5test_server_thread_pool_bokeh_event.<locals>.<lambda>  r   r)   )pandas	DataFramer   on_editr   r   r   r   r   r   _server_eventr   r   )
r  r   pddf	tabulatorr   r  r3   r   r   s
            @r'   #test_server_thread_pool_bokeh_eventr    s   	1v1v&c
	;	;B"IF       bi   "))++,,Q/2E5#q))E1XX 7 76666 ::::;;;;;r)   c                 j    g dgffd	fd}t          |           t          fd           d S )Nr   c                     | dxx         dz  cc<                        | d                    t          j        d           | dxx         dz  cc<   d S r  r  r   r   s    r'   r   z,test_server_thread_pool_periodic.<locals>.cb  r  r)   c                  R    t          d          } t          j        d           | S )Nr{   r   d   )r   r   add_periodic_callback)r   r   s    r'   rQ   z-test_server_thread_pool_periodic.<locals>.app  s+    W%%%#B,,,r)   c                  P    t                     dk    ot                     dk    S r}   r   r   s   r'   r   z2test_server_thread_pool_periodic.<locals>.<lambda>  r   r)   r   )r  r   rQ   r   r   s      @@r'    test_server_thread_pool_periodicr    su    F          
 c ::::;;;;;r)   c                 b    g dgffd	}t          |d           t          fd           d S )Nr   c                      t          d          } fd}t          j        |           d }t          j        |d           |S )Nr{   r   c                       dxx         dz  cc<                         d                    t          j        d            dxx         dz  cc<   d S Nr   r~   r0  r  r  s   r'   onloadz;test_server_thread_pool_onload.<locals>.app.<locals>.onload!  sT    !HHHMHHHMM%(###JqMMM!HHHMHHHHHr)   c                  D    t          j        t           j        d            d S r1   r   _schedule_on_loadr2   r  r)   r'   loadedz;test_server_thread_pool_onload.<locals>.app.<locals>.loaded*      #EL$77777r)   Tr+  r   r   r  r   r   r   r  r  r   s   `   r'   rQ   z+test_server_thread_pool_onload.<locals>.app  m    W%%%	 	 	 	 	 	 	V	8 	8 	8ft,,,,r)   r0  r   c                  P    t                     dk    ot                     dk    S r}   r   r   s   r'   r   z0test_server_thread_pool_onload.<locals>.<lambda>3  r   r)   r   r  r   rQ   r   s      @r'   test_server_thread_pool_onloadr    s`    F#      " cQ ::::;;;;;r)   c                     t          d          d }fd                    |           fd}t          |d           t          d            d S )	Nr{   r   c                 .    t          j        d           d S )Nr   )r  r   r3   s    r'   r   z(test_server_thread_pool_busy.<locals>.cb9  s    
3r)   c                  d                          t          j        t          d                      d S N)r  _comm_eventr   r2   r   r   s   r'   simulate_clickz4test_server_thread_pool_busy.<locals>.simulate_click<  ,    5<4)@)@)@AAAAAr)   c                      t           j                                       t           j                                       t           j                                        S r1   )r   r2   add_next_tick_callback)r   r  s   r'   rQ   z)test_server_thread_pool_busy.<locals>.appA  sJ    ++N;;;++N;;;++N;;;r)   rs   rX   c                  <    t           j        dk    ot           j         S )Nr   )r   _busy_counterbusyr  r)   r'   r   z.test_server_thread_pool_busy.<locals>.<lambda>I  s    u*a/B
N r)   )r   r   r   r   )r  r   r   rQ   r   r  s       @@r'   test_server_thread_pool_busyr  6  s    !!!F  B B B B B OOB      c#&&&&BBCCCCCr)   c                 b    g dgffd	}t          |d           t          fd           d S )Nr   c                      t          d          } fd}t          j        |           d }t          j        |d           |S )Nr{   r   c                     K    dxx         dz  cc<                         d                    t          j        d           d {V   dxx         dz  cc<   d S r  r   r  s   r'   r  z5test_server_async_onload.<locals>.app.<locals>.onloadQ  sm      !HHHMHHHMM%(###-"""""""""!HHHMHHHHHr)   c                  D    t          j        t           j        d            d S r1   r  r  r)   r'   r  z5test_server_async_onload.<locals>.app.<locals>.loadedZ  r  r)   Tr  r  r  s   `   r'   rQ   z%test_server_async_onload.<locals>.appO  r  r)   r0  r   c                  H    t                     ot                     dk    S )Nr0  r   r   s   r'   r   z*test_server_async_onload.<locals>.<lambda>c  s    s6{{7s6{{a'7 r)   r   r  s      @r'   test_server_async_onloadr  L  s`    F#      " cQ 777788888r)   c                       e Zd ZdZdS )CustomBootstrapTemplate./assets/custom.cssN)__name__
__module____qualname___cssr  r)   r'   r  r  f  s         DDDr)   r  c                 n   t                      }t          d|id          }t          t          j        t
                    j        dz  dz  d          5 }|                                |j        	                    d          
                    dd	          k    sJ 	 d d d            d S # 1 swxY w Y   d S )
NrW   zR/components/panel.tests.test_server/CustomBootstrapTemplate/_css/assets/custom.cssrX   assets
custom.cssr>   r?   rA   rB   r  r   rG   ru  rv  rF   rw  rH   rI   rJ   rK   )r   rW   rM   rN   s       r'   %test_server_template_custom_resourcesr  k  s   &((H:x0  :N  	O  	O  	OA	gl8$$+h6EPW	X	X	X K\]vvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   AB**B.1B.c                 t   t                      }d}t          d|id|          }t          t          j        t
                    j        dz  dz  d          5 }|                                |j        	                    d          
                    d	d
          k    sJ 	 d d d            d S # 1 swxY w Y   d S )NzY/prefix/components/panel.tests.test_server/CustomBootstrapTemplate/_css/assets/custom.cssrW   r`   ra   r  r  r>   r?   rA   rB   r  )r   rW   rD   rM   rN   s        r'   1test_server_template_custom_resources_with_prefixr  t  s   &((HfD:x04PPPA	gl8$$+h6EPW	X	X	X K\]vvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   AB--B14B1c                     t                      }t          d|idd          }d|j                            d          v sJ d S )NrW   r`   re   ra   zXhref="components/panel.tests.test_server/CustomBootstrapTemplate/_css/assets/custom.css"r>   r  r   rI   rJ   r   rW   rM   s      r'   >test_server_template_custom_resources_with_prefix_relative_urlr  }  so    &((H:x0K]^^^Aeijiriyiy  {B  jC  jC  C  C  C  C  C  Cr)   c                     t                      }t          d|idd          }d|j                            d          v sJ d S )Nrj   r`   rk   ra   z[href="../components/panel.tests.test_server/CustomBootstrapTemplate/_css/assets/custom.css"r>   r  r  s      r'   Jtest_server_template_custom_resources_with_subpath_and_prefix_relative_urlr    sp    &((H.9)TnoooAhlmlul|l|  ~E  mF  mF  F  F  F  F  F  Fr)   c                       e Zd ZdZdgZdS )CustomComponentcustomr  N)r  r  r  _extension_name__css__r  r)   r'   r  r    s        O$%GGGr)   r  c                 r   t                      }d}t          d|i|          }t          t          j        t
                    j        dz  dz  d          5 }|                                |j        	                    d          
                    dd	          k    sJ 	 d d d            d S # 1 swxY w Y   d S )
NzM/components/panel.tests.test_server/CustomComponent/__css__/assets/custom.css	componentrX   r  r  r>   r?   rA   rB   r  r   rG   ru  rv  rF   rw  rH   rI   rJ   rK   )r   r  rD   rM   rN   s        r'   &test_server_component_custom_resourcesr    s   !!IZD;	24@@@A	gl8$$+h6EPW	X	X	X K\]vvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   AB,,B03B0c                 p   t                      }t          d|idd          }t          t          j        t
                    j        dz  dz  d          5 }|                                |j        	                    d          
                    d	d
          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r`   zT/prefix/components/panel.tests.test_server/CustomComponent/__css__/assets/custom.cssra   r  r  r>   r?   rA   rB   r  )r   r  rM   rN   s       r'   2test_server_component_custom_resources_with_prefixr    s   !!I	i   <R	 	 	A 
gl8$$+h6EPW	X	X	X K\]vvxx19++G44<<VTJJJJJJJK K K K K K K K K K K K K K K K K Ks   AB++B/2B/c                     t                      }t          d|idd          }d|j                            d          v sJ d S )Nr  r`   z/prefix/componentra   zShref="components/panel.tests.test_server/CustomComponent/__css__/assets/custom.css"r>   r  r   rI   rJ   r   r  rM   s      r'   ?test_server_component_custom_resources_with_prefix_relative_urlr    sQ    !!I;	29M`aaaA`dedmdtdtu|d}d}}}}}}}r)   c                     t                      }t          d|idd          }d|j                            d          v sJ d S )N/subpath/componentr`   /prefix/subpath/componentra   zVhref="../components/panel.tests.test_server/CustomComponent/__css__/assets/custom.css"r>   r  r  s      r'   Ktest_server_component_custom_resources_with_subpath_and_prefix_relative_urlr    sl    !!I/;IVqrrrAcghgpgwgwx  hA  hA  A  A  A  A  A  Ar)   c                     t                      }t          d|id          }d|j                            d          v sJ d S )Nr  z
/componentrX   zIhref="static/extensions/panel/bundled/terminal/xterm@4.11.0/css/xterm.cssr>   r   r   rI   rJ   r  s      r'   2test_server_component_css_with_prefix_relative_urlr    sL    

I;	2<HHHAVZ[ZcZjZjkrZsZsssssssr)   c                     t                      }t          d|idd          }d|j                            d          v sJ d S )Nr  r`   r  ra   zLhref="../static/extensions/panel/bundled/terminal/xterm@4.11.0/css/xterm.cssr>   r  r  s      r'   >test_server_component_css_with_subpath_and_prefix_relative_urlr    sP    

I/;IVqrrrAY]^]f]m]mnu]v]vvvvvvvr)   c                     t                      r1   	Exceptionr  s    r'   synchronous_handlerr    s    
++r)   c                 "   K   t                      r1   r  r  s    r'   async_handlerr    s      
++r)   zthreads, handlerr  	nothreadsc                     |                     |            g fdfdt                                          |           fd}t          |           t	          fd           d S )Nc                 2                         |            d S r1   r   e
exceptionss    r'   exception_handlerzDtest_server_exception_handler_bokeh_event.<locals>.exception_handler      !r)   c                  d                          t          j        t          d                      d S r  r  r  s   r'   r  zAtest_server_exception_handler_bokeh_event.<locals>.simulate_click  r  r)   c                  ^    t           _        t          j                                        S r1   r   r  r   r2   r  )r   r  r  s   r'   rQ   z6test_server_exception_handler_bokeh_event.<locals>.app  s&    #4 ++N;;;r)   c                  *    t                     dk    S Nr~   r   r  s   r'   r   z;test_server_exception_handler_bokeh_event.<locals>.<lambda>      s:!+ r)   )getfixturevaluer   r   r   r   )	r  handlerr   r   rQ   r   r  r  r  s	        @@@@r'   )test_server_exception_handler_bokeh_eventr
    s     G$$$J    B B B B B XXF
OOG      
 c++++,,,,,r)   c                     |                     |            g fdfdt                      j                            |d           fd}t	          |           t          fd           d S )Nc                 2                         |            d S r1   r   r  s    r'   r  zKtest_server_exception_handler_async_change_event.<locals>.exception_handler  r   r)   c                  R                          t          j        d d ddd           d S )NvaluerO  foo)r   subpathattroldnew)r7   r   r2   )
text_inputs   r'   simulate_inputzHtest_server_exception_handler_async_change_event.<locals>.simulate_input  s.    !!%,D$WZ\bg!hhhhhr)   r  c                  ^     t           _        t          j                                       S r1   r  )r  r  r  s   r'   rQ   z=test_server_exception_handler_async_change_event.<locals>.app  s'    #4 ++N;;;r)   c                  *    t                     dk    S r  r   r  s   r'   r   zBtest_server_exception_handler_async_change_event.<locals>.<lambda>
  r  r)   )r  r   r5   r6   r   r   )	r  r	  r   r   rQ   r  r  r  r  s	        @@@@r'   0test_server_exception_handler_async_change_eventr    s     G$$$J    i i i i i J7G,,,      
 c++++,,,,,r)   c                     |                     |            g fdd t                      fd}t          |           t          fd           d S )Nc                 2                         |            d S r1   r   r  s    r'   r  zKtest_server_exception_handler_async_onload_event.<locals>.exception_handler  r   r)   c                  D    t          j        t           j        d            d S r1   r  r  r)   r'   r  z@test_server_exception_handler_async_onload_event.<locals>.loaded  s    d33333r)   c                       t           _        t          j                   t          j                                       S r1   )r   r  r   r  r2   r  )r  r	  r  r  s   r'   rQ   z=test_server_exception_handler_async_onload_event.<locals>.app!  s7    #4 W++F333r)   c                  *    t                     dk    S r  r   r  s   r'   r   zBtest_server_exception_handler_async_onload_event.<locals>.<lambda>)  r  r)   )r  r   r   r   )	r  r	  r   r   rQ   r  r  r  r  s	    `   @@@@r'   0test_server_exception_handler_async_onload_eventr    s     G$$$J    4 4 4 J        c++++,,,,,r)   c                    t          j        d          }|j        }|j        }	 d|_        |                    t           j                   t                      }t          || dd           t          j	        d           t          j        d|             t          j	        d           |j        D ]}|j        dk    rd|j        vsJ 	 |                    |           ||_        d S # |                    |           ||_        w xY w)	NbokehTF)r   threadedshowr~   ru   WARNINGEMPTY_LAYOUT)logging	getLoggerlevel	propagatesetLevelr#  r   r	   r  r   r   r   records	levelnamemessage)r   caplog	bk_logger	old_levelold_propagaterQ   recs          r'   #test_server_no_warning_empty_layoutr2  ,  s   !'**II'M,"	7?+++eect%8888 	
1///000
1> 	9 	9C}	))%S[8888	9 	9%%%+	 	9%%%+	++++s   B&C) )Dr1   )fr   r  r  r%  rC   ru  r  r   r5   rm  r   bokeh.eventsr   panel.configr   panel.ior   panel.io.resourcesr   panel.io.serverr   r   r	   r
   panel.layoutr   panel.modelsr   r    panel.models.tabulatorr   
panel.paner   panel.reactiver   panel.templater   panel.tests.utilr   r   r   panel.widgetsr   r   r   r   markxdist_groupr(   r.   r8   rO   rU   r^   rc   rh   rl   rp   ry   r   r   r   r   r   r   r  r  r"  r3  rC  rK  rY  r`  rf  rq  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  parametrizer
  r  r  r2  r  r)   r'   <module>rC     s8         				       $ $ $ $ $ $             ' ' ' ' ' '                  ' ' ' ' ' ' 1 1 1 1 1 1       ' ' ' ' ' ' , , , , , , J J J J J J J J J J           
 h''5 5 ('5 h''9 9 ('9 h''f f ('fK K K7 7 7K K KK K Kq q qt t t$ $ $
h h h< < <0d d d,b b b0  .
& 
& 
&
3 
3 
3 + + +:1 1 1& & &$& & &2& & &B h''; ; (';" h''8 8 ('86 h''B B ('B h''  (' h''
O 
O ('
O8 8 85 5 5< < <8< < <8< < <(< < <4D D D,9 9 94! ! ! ! !/ ! ! !
K K KK K KC C CF F F& & & & &l & & &K K KK K K~ ~ ~A A At t tw w w       	'(	)*	M"	m$	 - - -0 	'(	)*	M"	m$	 - - -0 	'(	)*	M"	m$	 - - -0, , , , ,r)   