
    ^h                     j   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r
  SSKJr  SSKJrJrJr  SSKJr  SSKJr  SSKrSSKrSS	KJr  SS
KJr  SSKJr  SSKJr  \
R>                  " \
R@                  " \!5      5      r"S r#S r$S r%S r&S r' " S S5      r( " S S\5      r) " S S\5      r*g)z7A lab app that runs a sub process for a demo or a test.    N)files)path)join)S_IRGRPS_IROTHS_IRUSR)TemporaryDirectory)patch)write_kernel_spec)	ServerApp)
ProcessApp)defaultc                      [         R                  " SS9n [        R                  " U S5      n[	        US5       nUR                  S5        S S S 5        U $ ! , (       d  f       U $ = f)Nmock_staticprefixz
index.htmlwa  
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>{% block title %}Jupyter Lab Test{% endblock %}</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    {% block meta %}
    {% endblock %}
</head>
<body>
  <h1>JupyterLab Test Application</h1>
  <div id="site">
    {% block site %}
    {% endblock site %}
  </div>
  {% block after_site %}
  {% endblock after_site %}
</body>
</html>)tempfilemkdtempospr   openwrite)template_dirindex_filepathfids      S/home/james-whalen/.local/lib/python3.13/site-packages/jupyterlab/tests/test_app.py_create_template_dirr      s]    ##=9LXXlL9N	nc	"c			
 
#0 1 
#	"0 s   A
A#c                  .    [         R                  " SS9n U $ )Nr   r   )r   r   )
static_dirs    r   _create_static_dirr    ;   s    !!7J    c                    ^ [         R                  " SS9m[        R                  " TSS5      n [        R
                  " U 5        [        R                  nSn[        U5      R                  U5      R                  5       n[        [        R                  " U S5      S5       nUR                  UR                  S5      5        S	S	S	5        [        R                  " U4S
 j5        T$ ! , (       d  f       N*= f)z)Create a temporary directory for schemas.mock_schemasr   z@jupyterlabzapputils-extensionz8tests/schemas/@jupyterlab/apputils-extension/themes.jsonzthemes.jsonr   zutf-8Nc                  2   > [         R                  " T S5      $ NTshutilrmtreeroot_dirs   r   <lambda>%_create_schemas_dir.<locals>.<lambda>L       FMM(D9r!   )r   r   r   r   osmakedirsjupyterlab_server__name__r   joinpath
read_bytesr   r   decodeatexitregister)extension_dirschema_packageschema_paththemesr   r*   s        @r   _create_schemas_dirr;   @   s    ~6HHHX}6JKMKK '//NLK>"++K8CCEF	chh}m4c	:c		&--() 
;
OO9:O 
;	:s   !C$$
C2c                  d   ^  [         R                  " SS9m [        R                  " U 4S j5        T $ ),Create a temporary directory for workspaces.mock_user_settingsr   c                  2   > [         R                  " T S5      $ r%   r&   r)   s   r   r+   +_create_user_settings_dir.<locals>.<lambda>S   r-   r!   r   r   r5   r6   r)   s   @r   _create_user_settings_dirrB   P   s&    ';<H
OO9:Or!   c                  d   ^  [         R                  " SS9m [        R                  " U 4S j5        T $ )r=   mock_workspacesr   c                  2   > [         R                  " T S5      $ r%   r&   r)   s   r   r+   (_create_workspaces_dir.<locals>.<lambda>Z   r-   r!   rA   r)   s   @r   _create_workspaces_dirrG   W   s&    '89H
OO9:Or!   c                   0    \ rS rSrSrS rS rS rS rSr	g)	TestEnv^   zmSet Jupyter path variables to a temporary directory

Useful as a context manager or with explicit start/stop
c                    [        5       =U l        n[        R                  " [        R
                  [        UR                  S5      [        UR                  S5      [        UR                  S5      [        UR                  S5      S.5      U l        U R                  R                  5         [        R                  " [        R                  [        UR                  SS5      /[        UR                  SSS5      /[        UR                  SS5      /[        UR                  SSS5      /S	9U l        U R                  R                  5         g )
Njupyterjupyter_datajupyter_runtimeipython)JUPYTER_CONFIG_DIRJUPYTER_DATA_DIRJUPYTER_RUNTIME_DIR
IPYTHONDIRshareenvetc)SYSTEM_JUPYTER_PATHENV_JUPYTER_PATHSYSTEM_CONFIG_PATHENV_CONFIG_PATH)r	   test_dirr
   dictr.   environpjoinname	env_patchstartmultiplejupyter_corepaths
path_patch)selftds     r   ra   TestEnv.startd   s    /11JJ&+BGGY&?$)"''>$B',RWW6G'H#BGGY7	
 	..!&rww!C D#BGGUGYGH %bggui @A"277E5)DE
 	r!   c                     U R                   R                  5         U R                  R                  5          U R                  R	                  5         g ! [
         a     g f = fN)r`   stopre   r[   cleanupOSErrorrf   s    r   rk   TestEnv.stopy   sI    	MM!!# 		s   A 
AAc                 N    U R                  5         U R                  R                  $ rj   )ra   r[   r_   rn   s    r   	__enter__TestEnv.__enter__   s    

}}!!!r!   c                 $    U R                  5         g rj   )rk   )rf   exc_infos     r   __exit__TestEnv.__exit__   s    		r!   )r`   re   r[   N)
r1   
__module____qualname____firstlineno____doc__ra   rk   rq   ru   __static_attributes__ r!   r   rI   rI   ^   s    
 *"r!   rI   c                   H   ^  \ rS rSrSrSrS rU 4S jrS rS r	S r
S	rU =r$ )
ProcessTestApp   zDA process app for running tests, includes a mock contents directory.*c                 D    [        5       /U l        [        5       /U l        g rj   )r    static_pathsr   template_pathsrn   s    r   initialize_templates#ProcessTestApp.initialize_templates   s    /12356r!   c                   > [        5       U l        U R                  R                  5         [        R                  " U 5        [
        R                  U R                  S'   U R                  S   U l	        U R                  S   U l        [        5       U l        [        5       U l        [!        5       U l        U R%                  5         SU R                  S   l        [(        TU ]U  5         g )Nallow_originr   echokernel_manager)rI   r`   ra   r   __init__r~   r   settingsr   r   r   r   r;   schemas_dirrB   user_settings_dirrG   workspaces_dir_install_default_kernelsdefault_kernel_namesuperinitialize_settings)rf   	__class__s    r   r   "ProcessTestApp.initialize_settings   s     D!(6(C(Cn%++A. //2.0!:!<46%%'>D&';#%r!   c                 0   [         R                  n[        UR                  5       SU5      n[        R
                  " U5        [        [        US5      S5       nUR                  [        R                  " U5      5        SSS5        g! , (       d  f       g= f)zInstall a kernel spec to the data directory.

Parameters
----------
kernel_name: str
    Name of the kernel.
kernel_spec: dict
    The kernel spec for the kernel
kernelszkernel.jsonr   N)
rc   rd   r^   jupyter_data_dirr.   r/   r   r   jsondumps)rf   kernel_namekernel_specrd   
kernel_dirfs         r   _install_kernelProcessTestApp._install_kernel   sf     ""5113YL

J%
M2C8AGGDJJ{+, 988s   &B
Bc                     U R                  S[        R                  SSSS/SSS.S9  [        R                  n[        UR                  5       S	S
5      n[        U5        g )Nr   z-mzjupyterlab.tests.echo_kernelz-fz{connection_file}zEcho Kernel)argvdisplay_namelanguage)r   r   r   rO   )r   sys
executablerc   rd   r^   r   r   )rf   rd   ipykernel_dirs      r   r   'ProcessTestApp._install_default_kernels   sk     NN2' !."
 	 	
 ""e446	9M-(r!   c                    U R                   R                  R                  5         U R                   R                  R                  5         U R                  R                  5          [
        R                  " UR                  5       5        g ! [         aD  nU R                  R                  [        U5      5        [
        R                  " S5         S nAg S nAff = f)N   )	serverapphttp_serverrk   io_loopr`   r.   _exitresult	Exceptionlogerrorstr)rf   futurees      r   _process_finished ProcessTestApp._process_finished   s    ""'')##%	HHV]]_% 	HHNN3q6"HHQKK	s   $$B	 	
C:CC)r`   r   r   r   r   r   r   r   )r1   rw   rx   ry   rz   r   r   r   r   r   r   r{   __classcell__)r   s   @r   r~   r~      s)    NL7&$- )* r!   r~   c                   0    \ rS rSr\" S5      S 5       rSrg)RootedServerApp   r*   c                 D  ^ [         R                  " SS9m[        R                  " [        R
                  " TS5      5        [        [        R
                  " TSS5      S5       nUR                  S5        SSS5        [        R
                  " TSS5      n[        US5       nUR                  S	5        SSS5        [        R                  " U[        [        -  [        -  5        [        R                  " U4S
 j5        T$ ! , (       d  f       N= f! , (       d  f       Nd= f)z6Create a temporary directory with some file structure.	mock_rootr   srcztemp.txtr   helloNzreadonly-temp.txtzhello from a readonly filec                  2   > [         R                  " T S5      $ r%   r&   r)   s   r   r+   3RootedServerApp._default_root_dir.<locals>.<lambda>   s    h =r!   )r   r   r.   mkdirr   r   r   r   chmodr   r   r   r5   r6   )rf   r   readonly_filepathr*   s      @r   _default_root_dir!RootedServerApp._default_root_dir   s     ##;7
(E*+#((8UJ7=IIg >  HHXu6IJ#S)SII23 * 	"Gg$5$?@=> >= *)s   #D !D 
D
Dr|   N)r1   rw   rx   ry   r   r   r{   r|   r!   r   r   r      s    Z r!   r   )+rz   r5   r   r.   r'   r   r   importlib.resourcesr   r   r   os.pathr   r^   statr   r   r   r	   unittest.mockr
   rc   r0   ipykernel.kernelspecr   jupyter_server.serverappr   jupyterlab_server.process_appr   	traitletsr   realpathdirname__file__HEREr   r    r;   rB   rG   rI   r~   r   r|   r!   r   <module>r      s    >   	  
  %  ! * * '    2 . 4 
||CKK)*<
 ( (VHZ HVi r!   