a
    Df0                     @   sz  d 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
Z
ddlZddlmZ ddlmZmZ ddlZddlZddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZm Z  dd
l!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)mZm*Z* ddl+m,Z,m-Z- dZ.de_/da0dZ1da2dd Z3dd Z4dd Z5dd Z6ej7dd Z8e9e6 ddddd d!d"dd#d$d%dd&d'd(dd)Z:d*d+ Z;d,d- Z<d.d/ Z=ej7d0d1 Z>e4 gZ?ej7d2d3 Z@ej7d4d5 ZAej7d6d7 ZBej7d8d9 ZCej7d:d; ZDej7d<d= ZEej7d>d? ZFej7d@dA ZGej7dBdC ZHej7dDdE ZIej7dFdG ZJej7dHdI ZKej7dJdK ZLe7 dLdM ZMe7 dNdO ZNej7dPdQ ZOej7dRdS ZPedTdU ZQej7dVdWdXdY ZRej7dVdWdZd[ ZSej7dVdWd\d] ZTej7d^d_ ZUej7d`da ZVej7dbdc ZWej7ddde ZXej7dfdg ZYej7dhdi ZZej7djdk Z[ej7dldm Z\ej7dndo Z]dS )pz5
A module containing testing utilities and fixtures.
    N)contextmanager)PIPEPopen)pull_sessionDocument)curdoc
set_curdocComm)configserve)panel_extension)_local_modules_modules_watched_filesasync_file_watcherwatch)r	   state)HTMLMarkdown)uijupyter
subprocessFi"     c                 C   s8   t  t jt j}|d |d| fdk}|  |S )N   z	127.0.0.1r   )socketAF_INETSOCK_STREAM
settimeout
connect_exclose)portsockZis_open r$   a/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/tests/conftest.py	port_open+   s
    
r&   c                  C   sB   t tjdd} tjdd}t tdd|}d||  d  S )	NPYTEST_XDIST_WORKER_COUNT1PYTEST_XDIST_WORKER0\D i)#  
   )intosenvirongetresub)worker_count	worker_idZ
worker_idxr$   r$   r%   get_default_port3   s    r6   c                  C   s   dddt tdg} t| ttddd a}t t }|j	 }t
d d	|v rVd	}qzd
|v rdd
}qzt |kr4tdq4t||d d d ad S )Nr   serverz--portz--NotebookApp.token=''r   zutf-8)stdoutstderrbufsizeencodingg{Gz?zhttp://127.0.0.1:http://localhost:z6jupyter server did not start within {timeout} seconds.   )strJUPYTER_PORTr   r   JUPYTER_PROCESStime	monotonicJUPYTER_TIMEOUTr9   readlinesleepTimeoutErrorr.   split)argsprocessdeadlinelinehostr$   r$   r%   start_jupyter9   s     

rN   c                   C   s   t d urtt jtj d S N)rA   r/   killpidsignalSIGTERMr$   r$   r$   r%   cleanup_jupyterM   s    rT   c                 C   s:   t | jj}|t | jj }dt dt	| S )Nr<   z/panel-preview/render/)
pathlibPathfspathdirnamerelative_tor   invocation_dirabsoluter@   r?   )requestpathrelr$   r$   r%   jupyter_previewQ   s    r_   z%<Command line help text for flag1...>zUI test markerz$Test only runs with the --ui option.)helpmarker-descrzskip-reasonzRuns Jupyter related testszJupyter test markerz)Test only runs with the --jupyter option.z Runs tests that fork the processzSubprocess test markerz,Test only runs with the --subprocess option.zRuns docs specific testszDocs test markerz&Test only runs with the --docs option.)r   r   r   Zdocsc                 C   s2   t  D ]$\}}| jd|dd|d d qd S )Nz--{}
store_trueFr`   )actiondefaultr`   )optional_markersitemsZ	addoptionformat)parsermarkerinfor$   r$   r%   pytest_addoptionp   s    rk   c              	   C   sD   t  D ] \}}| dd||d  q| jjr@tts@t  d S )Nmarkersz{}: {}ra   )	re   rf   Zaddinivalue_linerg   optionr   r&   r@   rN   )r   ri   rj   r$   r$   r%   pytest_configurev   s    rn   c                    s   g g  }} fddt D }| }|D ]j|rPtfddt D rP| q&|r`| q&|stfdd|D r| q&| q& jj|d ||d d < d S )Nc                    s    g | ]}  d | r|qS )z--)Z	getoption.0m)r   r$   r%   
<listcomp>       z1pytest_collection_modifyitems.<locals>.<listcomp>c                 3   s   | ]}| j v V  qd S rO   keywordsro   itemr$   r%   	<genexpr>   rs   z0pytest_collection_modifyitems.<locals>.<genexpr>c                 3   s   | ]}| j v V  qd S rO   rt   ro   rv   r$   r%   rx      rs   )rf   )re   anyappendhookZpytest_deselected)r   rf   skippedselectedrl   emptyr$   )r   rw   r%   pytest_collection_modifyitems~   s    
r   c                 c   s   |  d | V  d S )Ni N  )Zset_default_timeout)contextr$   r$   r%   r      s    
r   c                   C   s   t  S rO   r   r$   r$   r$   r%   document   s    r   c                  #   sV   t  } tj   fdd| _t|  | V  W d    n1 sB0    Y  d | _d S )Nc                      s    S rO   r$   r$   Zsession_contextr$   r%   <lambda>   rs   z!server_document.<locals>.<lambda>)r   unittestmockMock_session_contextr	   )docr$   r   r%   server_document   s    

$r   c                  #   sN   t  } t }tj   fdd|_t| z|V  W t|  n
t|  0 d S )Nc                      s    S rO   r$   r$   r   r$   r%   r      rs   zbokeh_curdoc.<locals>.<lambda>)r   r   r   r   r   r   	set_bkdoc)Zold_docr   r$   r   r%   bokeh_curdoc   s    
r   c                   C   s   t  S rO   r
   r$   r$   r$   r%   comm   s    r   c                  c   s*   t  } z| V  W |   n
|   0 d S rO   )asyncioEventset)eventr$   r$   r%   
stop_event   s    r   c                    s   g t    fdd} z<| V  W rz   d I d H  W q tyT   Y q0 n4rz   d I d H  W n ty   Y n0 0 d S )Nc                     s    t |   tt  d S rO   )r   rz   r   Zcreate_taskr   filesr   Ztasksr$   r%   watch_files   s    z watch_files.<locals>.watch_filesr   )r   r   r   FileNotFoundError)r   r$   r   r%   r      s"    r   c                  C   sN   t jdd} tt jdd}td ttdd|  }td  |7  < |S )Nr)   r*   r'   r(   r   r+   r,   )r/   r0   r1   r.   PORTr2   r3   )r5   r4   Znew_portr$   r$   r%   r"      s
    r"   c                   C   s,   t jg dg dg ddg dg ddS )N)r         )gQ	@gQ@gףp=
"@)ABC)r.   floatr?   )indexcolumns)pdZ	DataFramer$   r$   r$   r%   	dataframe   s    r   c                  c   s4   dd l } | d | jj}d| j_d V  || j_d S )Nr   ZbokehZ	holoviewsZrendererStoreZcurrent_backendZhvZprev_backendr$   r$   r%   hv_bokeh   s    
r   c                  #   s6   g   fdd} | V   D ]}|t jv rt j|= qd S )Nc                    s,     | jd  i }|g ftj| jd < |S )Nid)rz   refr   _handles)modelhandlecleanupr$   r%   display_handle   s    z*get_display_handle.<locals>.display_handle)r   r   )r   r   r$   r   r%   get_display_handle   s    
r   c                  c   s4   dd l } | d | jj}d| j_d V  || j_d S )Nr   Zplotlyr   r   r$   r$   r%   	hv_plotly   s    
r   c                  c   s4   dd l } | d | jj}d| j_d V  || j_d S )Nr   Z
matplotlibr   r   r$   r$   r%   hv_mpl  s    
r   c                 c   sX   | j j}tdd|}d}t||kr2|d | }|j|dd}|V  tt| d S )Nz[\W]_   T)Znumbered)	nodenamer2   r3   lenmktempshutilrmtreer?   )r\   Ztmpdir_factoryr   ZMAXVALZtmp_dirr$   r$   r%   tmpdir  s    r   c                  c   sf   d} t d}t|| ddd}tdd|j|jd}|||| fV  z|  W n ty`   Y n0 d S )Ni  z<h1>Title</h1>Fr"   showstartTesthttp://localhost:{:d}/Z
session_idurlio_loop)r   r   r   rg   r"   r   stopAssertionErrorr"   htmlr7   sessionr$   r$   r%   html_server_session  s    
r   c                  c   sf   d} t d}t|| ddd}tdd|j|jd}|||| fV  z|  W n ty`   Y n0 d S )Ni  z#TitleFr   r   r   r   )r   r   r   rg   r"   r   r   r   r   r$   r$   r%   markdown_server_session+  s    
r   c              	   #   sJ   g  fdd}|V  D ](}z|   W q tyB   Y qY q0 qdS )z]Serve multiple apps and yield a factory to allow
    parameterizing the slugs and the titles.c                    st   | \}}|t d|t di}t| |ddd}| td|jdd|jd}td|jdd	|jd}||fS )
Nz	First appz
Second appF)r"   titler   r   r<   dz/app1)r   r   z/app2)r   r   rz   r   r"   r   )ZslugstitlesZ	app1_slugZ	app2_slugZappsr7   Zsession1Zsession2r"   Zserversr$   r%   create_sessionsA  s    
z6multiple_apps_server_sessions.<locals>.create_sessionsN)r   r   )r"   r   r7   r$   r   r%   multiple_apps_server_sessions<  s    r   c                  c   s,   t j} t t _zd V  W | t _n| t _0 d S rO   )r   r   r   )Z
old_curdocr$   r$   r%   with_curdocZ  s
    r   c                 c   s<   t j| }|t j| < d V  |d u r.t j| = n
|t j| < d S rO   )r/   r0   r1   )env_varvalue	old_valuer$   r$   r%   set_env_vard  s    

r   T)Zautousec                     s8   ddl m}  ttj   fdd| j D | _dS )z3
    Cleanup Panel extensions after each test.
    r   _default_resolverc                    s,   i | ]$\} t  fd dD s| qS )c                 3   s   | ]} j |V  qd S rO   )
__module__
startswith)rp   trr   r$   r%   rx   x  rs   z,module_cleanup.<locals>.<dictcomp>.<genexpr>)ry   )rp   r   Zto_resetr   r%   
<dictcomp>v  s   z"module_cleanup.<locals>.<dictcomp>N)Zbokeh.core.has_propsr   listr   Z_importsvaluesZ_known_modelsrf   r   r$   r   r%   module_cleanupn  s
    
r   c                   c   sR   z*dV  W t   t  t  t  n"t   t  t  t  0 dS )z0
    Clean up server state after each test.
    N)r   resetr   clearr   r   r$   r$   r$   r%   server_cleanup{  s    
r   c                   C   s   t   d S rO   )r   Zclear_cachesr$   r$   r$   r%   cache_cleanup  s    r   c                  c   s,   dt _dd } z| V  W dt _ndt _0 d S )NTc                 S   s.   t | ttjfr| g} tdd | D  d S )Nc                 S   s   h | ]}t |qS r$   )r?   )rp   fr$   r$   r%   	<setcomp>  rs   z,autoreload.<locals>.watch.<locals>.<setcomp>)
isinstancer?   r/   PathLiker   updater   r$   r$   r%   r     s    zautoreload.<locals>.watchF)r   
autoreload)r   r$   r$   r%   r     s
    r   c               	   c   sJ   t jdddd} z| V  W |   t| j n|   t| j 0 d S )Nw.pyFmodesuffixdelete)tempfileNamedTemporaryFiler!   r/   unlinkr   tfr$   r$   r%   py_file  s    r   c               	   c   s   t jdddd} t jddtj| jd dd}z6| |fV  W |   |  t| j t|j n*|   |  t| j t|j 0 d S )Nr   r   Fr   r   )r   r   dirr   )r   r   r/   r]   rH   r   r!   r   )r   Ztf2r$   r$   r%   py_files  s     r   c                  c   s0   t jddd} z| V  W |   n
|   0 d S )Nr   z.html)r   r   )r   r   r!   r   r$   r$   r%   	html_file  s    r   c                   c   s$   dt _zdV  W d t _nd t _0 d S )Nr>   )r   Znthreadsr$   r$   r$   r%   threads  s    r   c                   c   sX   dt _z*d V  W dt _d t _tj  tj  n"dt _d t _tj  tj  0 d S )NTF)r   reuse_sessionsZsession_key_funcr   Z	_sessionsr   Z_session_key_funcsr$   r$   r$   r%   r     s    

r   c                   c   s
   d V  d S rO   r$   r$   r$   r$   r%   	nothreads  s    r   c                 c   s&   t | jj d V  t | jj d S rO   )r/   chdirrW   rX   r   rZ   )r\   r$   r$   r%   change_test_dir  s    r   c                  #   s:   g   fdd} t j}| t _z V  W |t _n|t _0 d S )Nc                    s     |  d S rO   )rz   )	exception
exceptionsr$   r%   eh  s    z)exception_handler_accumulator.<locals>.eh)r   Zexception_handler)r   Zold_ehr$   r   r%   exception_handler_accumulator  s    r  )^__doc__r   atexitr/   rU   r2   r   rR   r   r   rB   r   
contextlibr   r   r   r   Zpandasr   ZpytestZbokeh.clientr   Zbokeh.documentr   Zbokeh.io.docr   r	   r   Zpyviz_commsr   Zpanelr   r   Zpanel.configr   Zpanel.io.reloadr   r   r   r   r   Zpanel.io.stater   Z
panel.paner   r   ZCUSTOM_MARKSZapply_signaturesr@   rD   rA   r&   r6   rN   rT   Zfixturer_   registerre   rk   rn   r   r   r   r   r   r   r   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r$   r$   r$   r%   <module>   s   











	

	
	




	
	














