
    Xh                     j   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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 ddl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 ddlmZ  e
j>                   e
j@                  e!            Z"d Z#d Z$d Z%d Z&d Z' G d d      Z( G d de      Z) G d de      Z*y)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                      t        j                  d      } t        j                  | d      }t	        |d      5 }|j                  d       d d d        | S # 1 sw Y   | S xY w)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      M/var/www/html/myenv/lib/python3.12/site-packages/jupyterlab/tests/test_app.py_create_template_dirr      s_    ##=9LXXlL9N	nc	" 
c			

0 1
0 s   AAc                  2    t        j                  d      } | S )Nr   r   )r   r   )
static_dirs    r   _create_static_dirr    ;   s    !!7J    c                     t        j                  d      t        j                  dd      } t	        j
                  |        t        j                  }d}t        |      j                  |      j                         }t        t        j                  | d      d      5 }|j                  |j                  d             d	d	d	       t        j                  fd
       S # 1 sw Y   #xY w)z)Create a temporary directory for schemas.mock_schemasr   z@jupyterlabzapputils-extensionz8tests/schemas/@jupyterlab/apputils-extension/themes.jsonzthemes.jsonr   zutf-8Nc                  0    t        j                   d      S NTshutilrmtreeroot_dirs   r   <lambda>z%_create_schemas_dir.<locals>.<lambda>L       FMM(D9 r!   )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!!C*c                  d     t        j                  d       t        j                   fd        S ),Create a temporary directory for workspaces.mock_user_settingsr   c                  0    t        j                   d      S r%   r&   r)   s   r   r+   z+_create_user_settings_dir.<locals>.<lambda>S   r,   r!   r   r   r4   r5   r)   s   @r   _create_user_settings_dirr@   P   s&    ';<H
OO9:Or!   c                  d     t        j                  d       t        j                   fd        S )r<   mock_workspacesr   c                  0    t        j                   d      S r%   r&   r)   s   r   r+   z(_create_workspaces_dir.<locals>.<lambda>Z   r,   r!   r?   r)   s   @r   _create_workspaces_dirrD   W   s&    '89H
OO9:Or!   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestEnvzuSet Jupyter path variables to a temporary directory

    Useful as a context manager or with explicit start/stop
    c                    t               x| _        }t        j                  t        j
                  t        |j                  d      t        |j                  d      t        |j                  d      t        |j                  d      d      | _        | j                  j                          t        j                  t        j                  t        |j                  dd      gt        |j                  ddd      gt        |j                  dd      gt        |j                  ddd      g	      | _        | j                  j                          y )
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   r]   z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                     | j                   j                          | j                  j                          	 | j                  j	                          y # t
        $ r Y y w xY wN)r\   stopra   rW   cleanupOSErrorrb   s    r   rf   zTestEnv.stopy   sI    	MM!!# 		s   A 	AAc                 N    | j                          | j                  j                  S re   )r]   rW   r[   ri   s    r   	__enter__zTestEnv.__enter__   s    

}}!!!r!   c                 $    | j                          y re   )rf   )rb   exc_infos     r   __exit__zTestEnv.__exit__   s    		r!   N)r0   
__module____qualname____doc__r]   rf   rk   rn    r!   r   rF   rF   ^   s    
 *"r!   rF   c                   >     e Zd ZdZdZd Z fdZd Zd Zd Z	 xZ
S )ProcessTestAppzDA process app for running tests, includes a mock contents directory.*c                 D    t               g| _        t               g| _        y re   )r    static_pathsr   template_pathsri   s    r   initialize_templatesz#ProcessTestApp.initialize_templates   s    /12356r!   c                    t               | _        | j                  j                          t        j                  |        t
        j                  | j                  d<   | j                  d   | _	        | j                  d   | _        t               | _        t               | _        t!               | _        | j%                          d| j                  d   _        t(        | U          y )Nallow_originr   echokernel_manager)rF   r\   r]   r   __init__rt   r{   settingsrw   r   rx   r   r:   schemas_dirr@   user_settings_dirrD   workspaces_dir_install_default_kernelsdefault_kernel_namesuperinitialize_settings)rb   	__class__s    r   r   z"ProcessTestApp.initialize_settings   s     D!(6(C(Cn%++A. //2.0!:!<46%%'>D&';#%r!   c                 "   t         j                  }t        |j                         d|      }t	        j
                  |       t        t        |d      d      5 }|j                  t        j                  |             ddd       y# 1 sw Y   yxY w)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)
r_   r`   rZ   jupyter_data_dirr-   r.   r   r   jsondumps)rb   kernel_namekernel_specr`   
kernel_dirfs         r   _install_kernelzProcessTestApp._install_kernel   so     ""5113YL

J%
M2C8 	-AGGDJJ{+,	- 	- 	-s   %BBc                     | j                  dt        j                  ddddgddd       t        j                  }t        |j                         d	d
      }t        |       y )Nr|   z-mzjupyterlab.tests.echo_kernelz-fz{connection_file}zEcho Kernel)argvdisplay_namelanguage)r   r   r   rK   )r   sys
executabler_   r`   rZ   r   r   )rb   r`   ipykernel_dirs      r   r   z'ProcessTestApp._install_default_kernels   sk     NN2' !."
 	 	
 ""e446	9M-(r!   c                    | j                   j                  j                          | j                   j                  j                          | j                  j                          	 t        j                  |j                                y # t        $ rC}| j                  j                  t        |             t        j                  d       Y d }~y d }~ww xY w)N   )	serverapphttp_serverrf   io_loopr\   r-   _exitresult	Exceptionlogerrorstr)rb   futurees      r   _process_finishedz ProcessTestApp._process_finished   s    ""'')##%	HHV]]_% 	HHNN3q6"HHQKK	s   $#B 	C9CC)r0   ro   rp   rq   r{   ry   r   r   r   r   __classcell__)r   s   @r   rt   rt      s$    NL7&$- )*r!   rt   c                   (    e Zd Z ed      d        Zy)RootedServerAppr*   c                 &   t        j                  d      t        j                  t	        j
                  d             t        t	        j
                  dd      d      5 }|j                  d       ddd       t	        j
                  dd      }t        |d      5 }|j                  d	       ddd       t        j                  |t        t        z  t        z         t        j                  fd
       S # 1 sw Y   xY w# 1 sw Y   WxY w)z6Create a temporary directory with some file structure.	mock_rootr   srcztemp.txtr   helloNzreadonly-temp.txtzhello from a readonly filec                  0    t        j                   d      S r%   r&   r)   s   r   r+   z3RootedServerApp._default_root_dir.<locals>.<lambda>   s    h = r!   )r   r   r-   mkdirr   r   r   r   chmodr   r   r   r4   r5   )rb   r   readonly_filepathr*   s      @r   _default_root_dirz!RootedServerApp._default_root_dir   s     ##;7
(E*+#((8UJ7= 	IIg	  HHXu6IJ#S) 	4SII23	4 	"Gg$5$?@=>	 		4 	4s   "C;D;DDN)r0   ro   rp   r   r   rr   r!   r   r   r      s    Z r!   r   )+rq   r4   r   r-   r'   r   r   importlib.resourcesr   r   r   os.pathr   rZ   statr   r   r   r	   unittest.mockr
   r_   r/   ipykernel.kernelspecr   jupyter_server.serverappr   jupyterlab_server.process_appr   	traitletsr   realpathdirname__file__HEREr   r    r:   r@   rD   rF   rt   r   rr   r!   r   <module>r      s    >   	  
  %  ! * * '    2 . 4 s||KCKK)*<
 ( (VHZ HVi r!   