o
    i,                     @   sR  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zddlmZ W n e	y1   ddl
mZ Y nw 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!e"e#Z$dd Z%dd Z&dd Z'dd Z(dd Z)G dd dZ*G dd deZ+G dd deZ,dS )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                  C   sR   t jdd} t| d}t|d}|d W d    | S 1 s"w   Y  | S )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fid r   T/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyterlab/tests/test_app.py_create_template_dir"   s   
r   c                  C   s   t jdd} | S )Nr   r   )r   r   )
static_dirr   r   r   _create_static_dir@   s   r   c                     s   t jdd t dd} t|  tj}d}t|	|
 }tt| dd}||d W d	   n1 s<w   Y  t fd
d  S )z)Create a temporary directory for schemas.mock_schemasr   z@jupyterlabzapputils-extensionz8tests/schemas/@jupyterlab/apputils-extension/themes.jsonzthemes.jsonr   zutf-8Nc                         t  dS NTshutilrmtreer   root_dirr   r   <lambda>Q       z%_create_schemas_dir.<locals>.<lambda>)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   r%   r   _create_schemas_dirE   s   
r6   c                      "   t jdd t fdd  S ),Create a temporary directory for workspaces.mock_user_settingsr   c                      r    r!   r"   r   r%   r   r   r'   X   r(   z+_create_user_settings_dir.<locals>.<lambda>r   r   r0   r1   r   r   r%   r   _create_user_settings_dirU      r;   c                      r7   )r8   mock_workspacesr   c                      r    r!   r"   r   r%   r   r   r'   _   r(   z(_create_workspaces_dir.<locals>.<lambda>r:   r   r   r%   r   _create_workspaces_dir\   r<   r>   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TestEnvzuSet Jupyter path variables to a temporary directory

    Useful as a context manager or with explicit start/stop
    c              
   C   s   t   | _}ttjt|jdt|jdt|jdt|jdd| _| 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d	| _| j	  d S )
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tdr   r   r   rU   i   s$   




	zTestEnv.startc                 C   s:   | j   | j  z| j  W d S  ty   Y d S w N)rT   stoprY   rO   cleanupOSErrorrZ   r   r   r   r]   ~   s   

zTestEnv.stopc                 C   s   |    | jjS r\   )rU   rO   rS   r`   r   r   r   	__enter__   s   zTestEnv.__enter__c                 G   s   |    d S r\   )r]   )rZ   exc_infor   r   r   __exit__   s   zTestEnv.__exit__N)r,   
__module____qualname____doc__rU   r]   ra   rc   r   r   r   r   r?   c   s    r?   c                       sD   e Zd ZdZdZdd Z fddZdd Zd	d
 Zdd Z	  Z
S )ProcessTestAppzDA process app for running tests, includes a mock contents directory.*c                 C   s   t  g| _t g| _d S r\   )r   static_pathsr   template_pathsr`   r   r   r   initialize_templates   s   
z#ProcessTestApp.initialize_templatesc                    sz   t  | _| j  t|  tj| jd< | jd | _	| j
d | _t | _t | _t | _|   d| jd _t   d S )Nallow_originr   echokernel_manager)r?   rT   rU   r   __init__rg   rl   settingsri   r   rj   r   r6   schemas_dirr;   user_settings_dirr>   workspaces_dir_install_default_kernelsdefault_kernel_namesuperinitialize_settingsr`   	__class__r   r   rw      s   

z"ProcessTestApp.initialize_settingsc                 C   sf   t j}t| d|}t| tt|dd}|t	| W d   dS 1 s,w   Y  dS )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)
rW   rX   rR   jupyter_data_dirr)   r*   r   r   jsondumps)rZ   kernel_namekernel_specrX   
kernel_dirfr   r   r   _install_kernel   s   

"zProcessTestApp._install_kernelc                 C   sD   | j dtjddddgdddd tj}t| d	d
}t| d S )Nrm   z-mzjupyterlab.tests.echo_kernelz-fz{connection_file}zEcho Kernel)argvdisplay_namelanguage)r~   r   rz   rC   )r   sys
executablerW   rX   rR   r{   r
   )rZ   rX   ipykernel_dirr   r   r   rt      s   z'ProcessTestApp._install_default_kernelsc              
   C   sx   | j j  | j j  | j  z
t|  W d S  ty; } z| j	
t| td W Y d }~d S d }~ww )N   )	serverapphttp_serverr]   io_looprT   r)   _exitresult	Exceptionlogerrorstr)rZ   futureer   r   r   _process_finished   s   
z ProcessTestApp._process_finished)r,   rd   re   rf   rl   rk   rw   r   rt   r   __classcell__r   r   rx   r   rg      s    rg   c                   @   s   e Zd Zeddd ZdS )RootedServerAppr&   c                    s   t jdd tt d tt ddd}|d W d   n1 s)w   Y  t dd}t|d}|d	 W d   n1 sJw   Y  t|t	t
B tB  t fd
d  S )z6Create a temporary directory with some file structure.	mock_rootr   srcztemp.txtr   helloNzreadonly-temp.txtzhello from a readonly filec                      r    r!   r"   r   r%   r   r   r'      r(   z3RootedServerApp._default_root_dir.<locals>.<lambda>)r   r   r)   mkdirr   r   r   r   chmodr   r   r   r0   r1   )rZ   r   readonly_filepathr   r%   r   _default_root_dir   s   z!RootedServerApp._default_root_dirN)r,   rd   re   r   r   r   r   r   r   r      s    r   )-rf   r0   r|   r)   r#   r   r   importlib.resourcesr   ImportErrorimportlib_resourcesr   r   os.pathr   rR   statr   r   r   r   unittest.mockr	   rW   r+   ipykernel.kernelspecr
   jupyter_server.serverappr   jupyterlab_server.process_appr   	traitletsr   realpathdirname__file__HEREr   r   r6   r;   r>   r?   rg   r   r   r   r   r   <module>   s@   +K