o
    tf,                     @   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_dirZindex_filepathfid r   b/var/www/html/software/conda/envs/catlas/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.Z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)Zextension_dirZschema_packageZschema_paththemesr   r   r#   r   _create_schemas_dirE   s   
r1   c                      "   t jdd t fdd  S ),Create a temporary directory for workspaces.Zmock_user_settingsr   c                      r   r   r    r   r#   r   r   r%   X   r&   z+_create_user_settings_dir.<locals>.<lambda>r   r   r.   r/   r   r   r#   r   _create_user_settings_dirU      r5   c                      r2   )r3   Zmock_workspacesr   c                      r   r   r    r   r#   r   r   r%   _   r&   z(_create_workspaces_dir.<locals>.<lambda>r4   r   r   r#   r   _create_workspaces_dir\   r6   r7   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jupyterZjupyter_dataZjupyter_runtimeipython)ZJUPYTER_CONFIG_DIRZJUPYTER_DATA_DIRZJUPYTER_RUNTIME_DIRZ
IPYTHONDIRshareenvetc)ZSYSTEM_JUPYTER_PATHZENV_JUPYTER_PATHZSYSTEM_CONFIG_PATHZENV_CONFIG_PATH)r   test_dirr	   dictr'   environpjoinname	env_patchstartZmultiplejupyter_corepaths
path_patch)selftdr   r   r   rD   i   s$   




	zTestEnv.startc                 C   s:   | j   | j  z| j  W d S  ty   Y d S w N)rC   stoprG   r>   cleanupOSErrorrH   r   r   r   rK   ~   s   

zTestEnv.stopc                 C   s   |    | jjS rJ   )rD   r>   rB   rN   r   r   r   	__enter__   s   zTestEnv.__enter__c                 G   s   |    d S rJ   )rK   )rH   exc_infor   r   r   __exit__   s   zTestEnv.__exit__N)r*   
__module____qualname____doc__rD   rK   rO   rQ   r   r   r   r   r8   c   s    r8   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 rJ   )r   static_pathsr   template_pathsrN   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   echoZkernel_manager)r8   rC   rD   r   __init__rU   rZ   settingsrW   r   rX   r   r1   Zschemas_dirr5   Zuser_settings_dirr7   Zworkspaces_dir_install_default_kernelsZdefault_kernel_namesuperinitialize_settingsrN   	__class__r   r   r`      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)
rE   rF   rA   jupyter_data_dirr'   r(   r   r   jsondumps)rH   kernel_namekernel_specrF   Z
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 )Nr[   z-mzjupyterlab.tests.echo_kernelz-fz{connection_file}zEcho Kernel)argvZdisplay_namelanguage)rg   rh   rc   r:   )rj   sys
executablerE   rF   rA   rd   r
   )rH   rF   Zipykernel_dirr   r   r   r^      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   )Z	serverappZhttp_serverrK   Zio_looprC   r'   _exitresult	Exceptionlogerrorstr)rH   futureer   r   r   _process_finished   s   
z ProcessTestApp._process_finished)r*   rR   rS   rT   rZ   rY   r`   rj   r^   rx   __classcell__r   r   ra   r   rU      s    rU   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.Z	mock_rootr   srcztemp.txtr   Z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   r.   r/   )rH   r   Zreadonly_filepathr   r#   r   _default_root_dir   s   z!RootedServerApp._default_root_dirN)r*   rR   rS   r   r~   r   r   r   r   rz      s    rz   )-rT   r.   re   r'   r!   rm   r   importlib.resourcesr   ImportErrorZimportlib_resourcesr   r   Zos.pathr   rA   statr   r   r   r   Zunittest.mockr	   rE   r)   Zipykernel.kernelspecr
   Zjupyter_server.serverappr   Zjupyterlab_server.process_appr   Z	traitletsr   realpathdirname__file__ZHEREr   r   r1   r5   r7   r8   rU   rz   r   r   r   r   <module>   s@   +K