o
    i%                     @   s
  d 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
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ z
ddlmZ dZW n eyW   dZY nw G dd dZG dd deZG dd deZG dd deZdZdZG dd deZ dS )zTest the kernels service API.    N)	HTTPError)Config)HTTPRequest)IOLoop)websocket_connect)SkipTest)NATIVE_KERNEL_NAME)url_path_join)NotebookTestBaseassert_http_error)AsyncMultiKernelManagerTFc                   @   s^   e Zd ZdZdd ZdddZdd Zd	d
 ZefddZ	dd Z
dd Zdd Zdd ZdS )	KernelAPIz$Wrapper for kernel REST API requestsc                 C   s   || _ || _|| _d S N)requestbase_urlheaders)selfr   r   r    r   k/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/services/kernels/tests/test_kernels_api.py__init__   s   
zKernelAPI.__init__Nc                 C   sX   | j |td||d}d|j  krdk r&n nz	| d |_W n   Y |  |S )Napi/kernels)datai  iX  message)r   r	   status_codejsonreasonraise_for_status)r   verbpathbodyresponser   r   r   _req!   s   
zKernelAPI._reqc                 C   s   |  ddS )NGET r!   r   r   r   r   list.      zKernelAPI.listc                 C      |  d|S )Nr"   r$   r   idr   r   r   get1   r'   zKernelAPI.getc                 C   s   t d|i}| dd|S )NnamePOSTr#   )r   dumpsr!   )r   r,   r   r   r   r   start4   s   zKernelAPI.startc                 C   r(   )NDELETEr$   r)   r   r   r   shutdown8   r'   zKernelAPI.shutdownc                 C      |  dt|dS )Nr-   	interruptr!   r	   r)   r   r   r   r3   ;      zKernelAPI.interruptc                 C   r2   )Nr-   restartr4   r)   r   r   r   r6   >   r5   zKernelAPI.restartc                    sL   t  }|  tt| jdddd|d| jd}t| | fddS )	Nhttpws   r   channels)r   c                      s    S r   r   r   fr   r   <lambda>I   s    z%KernelAPI.websocket.<locals>.<lambda>)	r   make_currentr   r	   r   replacer   r   run_sync)r   r*   loopreqr   r;   r   	websocketA   s   zKernelAPI.websocketr   )__name__
__module____qualname____doc__r   r!   r&   r+   r   r/   r1   r3   r6   rC   r   r   r   r   r      s    
r   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )KernelAPITestz Test the kernels web service APIc                 C      t | j|  |  d| _d S N)r   r   r   r   r   auth_headerskern_apir%   r   r   r   setUpN      zKernelAPITest.setUpc                 C   (   | j   D ]
}| j |d  qd S Nr*   rM   r&   r   r1   r   kr   r   r   tearDownT      zKernelAPITest.tearDownc                 C   s   | j   }| |g  dS )z3Make sure there are no kernels running at the startN)rM   r&   r   assertEqual)r   kernelsr   r   r   test_no_kernelsX   s   zKernelAPITest.test_no_kernelsc                 C   s   | j dd}| }| |jd t| jd|d  | |jd | |t	 t| jd}d
d	d
| dg}| |jd | d S )Nr-   r#   locationr   r*      api/security/csp-report; frame-ancestors 'self'report-uri default-src 'none'Content-Security-Policy)rM   r!   r   rW   r   r	   
url_prefixr   assertIsInstancedictjoin)r   rkern1
report_uriexpected_cspr   r   r   test_default_kernel]   s    z!KernelAPITest.test_default_kernelc                 C   s  | j  }| }| |jd t| jd|d  | |jd | |t	 t| jd}d
dd| d	g}| |jd
 | | j  }| |jd t| tsTJ | | d d |d  | | d d |d  | j   }t|t	s~J | j  }| }| |jd t|tsJ | t|d | j |d }| |jd | j |d }| }| |d |d  | |d |d  d S )NrZ   r   r*   r[   r\   r]   r^   r_   r`   ra      r   r,         )rM   r/   r   rW   r   r	   rb   r   rc   rd   re   r&   
isinstancelenr3   r6   )r   rf   rg   rh   ri   kern2rX   rekernr   r   r   test_main_kernel_handlerm   s<   
 

z&KernelAPITest.test_main_kernel_handlerc                 C   s  | j   d }| j |}| }| |jd t|ts!J | d| | |d | d}t	dd|  | j | W d    n1 sIw   Y  | j 
|}| |jd | j   }| |g  d}t	dd|  | j 
| W d    d S 1 sw   Y  d S )Nr*   rk   z111-111-111-111-111  zKernel does not exist: rm   )rM   r/   r   r+   rW   r   rn   rd   assertInr   r1   r&   )r   kidrf   rg   bad_idrX   r   r   r   test_kernel_handler   s&   "z!KernelAPITest.test_kernel_handlerc                 C   s   | j   d }| j | }| |d d | j |}| j | }| |d d |  tdD ]}| j | }|d dkrMt	d q7 | j | }| |d d d S )Nr*   connectionsr   r9   
   g?)
rM   r/   r   r+   rW   rC   closerangetimesleep)r   ru   modelr8   ir   r   r   test_connections   s   zKernelAPITest.test_connectionsN)rD   rE   rF   rG   rN   rU   rY   rj   rr   rw   r   r   r   r   r   rH   L   s    +rH   c                       s4   e Zd ZdZe fddZe fddZ  ZS )AsyncKernelAPITestzDTest the kernels web service API using the AsyncMappingKernelManagerc                    s   t stdt   d S )NzBAsyncKernelAPITest tests skipped due to down-level jupyter_client!)async_testing_enabledr   supersetup_class)cls	__class__r   r   r      s   zAsyncKernelAPITest.setup_classc                    s   t   }tr|dg |S )Nzd--NotebookApp.kernel_manager_class=notebook.services.kernels.kernelmanager.AsyncMappingKernelManager)r   get_argvr   extendr   argvr   r   r   r      s   
zAsyncKernelAPITest.get_argv)rD   rE   rF   rG   classmethodr   r   __classcell__r   r   r   r   r      s    r   c                   @   s*   e Zd ZeddddgiiiZdd ZdS )KernelFilterTestNotebookAppMappingKernelManagerallowed_message_typeskernel_info_requestc                 C   s   |  | jjjdg d S )Nr   )rW   notebookkernel_managerr   r%   r   r   r   test_config   s   zKernelFilterTest.test_configN)rD   rE   rF   r   configr   r   r   r   r   r      s    	r      r9   c                       sD   e Zd ZdZe fddZdd Zdd Zdd	 Zd
d Z	  Z
S )KernelCullingTestzTest kernel culling c                    s*   t   }|dt dt dg |S )Nz)--MappingKernelManager.cull_idle_timeout=z%--MappingKernelManager.cull_interval=z+--MappingKernelManager.cull_connected=False)r   r   r   CULL_TIMEOUTCULL_INTERVALr   r   r   r   r      s   
zKernelCullingTest.get_argvc                 C   rI   rJ   rK   r%   r   r   r   rN      rO   zKernelCullingTest.setUpc                 C   rP   rQ   rR   rS   r   r   r   rU     rV   zKernelCullingTest.tearDownc                 C   sf   | j   d }| j |}| j | }| |d d | |r&J |  | |s1J d S )Nr*   rx   r9   )rM   r/   r   rC   r+   rW   get_cull_statusrz   )r   ru   r8   r~   r   r   r   test_culling  s   zKernelCullingTest.test_cullingc                 C   s~   d}d}t ttt | D ].}z| j| W n ty6 } z|jjdks(J d}W Y d }~ |S d }~ww t	
| q|S )Ng      ?Frs   T)r{   intr   r   rM   r+   r   r    r   r|   r}   )r   ru   	frequencyculled_er   r   r   r     s   z!KernelCullingTest.get_cull_status)rD   rE   rF   rG   r   r   rN   rU   r   r   r   r   r   r   r   r      s    		r   )!rG   r   r|   requestsr   traitlets.configr   tornado.httpclientr   tornado.ioloopr   tornado.websocketr   unittestr   jupyter_client.kernelspecr   notebook.utilsr	   notebook.tests.launchnotebookr
   r   jupyter_clientr   r   ImportErrorr   rH   r   r   r   r   r   r   r   r   r   <module>   s2    2{