o
    ¹iŸ(  ã                   @   sÞ   d Z ddlZddlm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mZ ddlmZ ddlmZ z
dd	lmZ d
ZW n eyQ   dZY nw ejjZG dd„ dƒZG dd„ deƒZG dd„ deƒZdS )z"Test the sessions web service API.é    N)Úpartial)ÚSkipTest)Úurl_path_join)ÚNotebookTestBaseÚassert_http_error)Únew_notebook)Úwrite)ÚAsyncMultiKernelManagerTFc                   @   st   e Zd ZdZdd„ Zddd„Zdd„ Zd	d
„ Zdd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 )Ú
SessionAPIzWrapper for notebook API calls.c                 C   s
   || _ d S ©N)Úrequest)Úselfr   © r   úm/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/services/sessions/tests/test_sessions_api.pyÚ__init__   s   
zSessionAPI.__init__Nc                 C   sX   | j |td|ƒ|d}d|j  krdk r&n nz	| ¡ d |_W n   Y | ¡  |S )Nzapi/sessions)Údatai  iX  Úmessage)r   r   Ústatus_codeÚjsonÚreasonÚraise_for_status)r   ÚverbÚpathÚbodyÚresponser   r   r   Ú_req   s   
ÿzSessionAPI._reqc                 C   s   |   dd¡S )NÚGETÚ ©r   ©r   r   r   r   Úlist,   ó   zSessionAPI.listc                 C   ó   |   d|¡S )Nr   r   ©r   Úidr   r   r   Úget/   r!   zSessionAPI.getÚnotebookÚpythonc                 C   s&   t  ||||dœdœ¡}|  dd|¡S )N©Únamer$   )r   ÚtypeÚkernelÚPOSTr   ©r   Údumpsr   )r   r   r*   Úkernel_nameÚ	kernel_idr   r   r   r   Úcreate2   s   ÿþzSessionAPI.createc                 C   s(   t  d|idddœdœ¡}|  dd|¡S )Nr   r'   Úfoor(   )r&   r+   r,   r   r-   )r   r   r   r   r   r   Úcreate_deprecated9   s   
ÿÿzSessionAPI.create_deprecatedc                 C   ó   t  d|i¡}|  d||¡S )Nr   ÚPATCHr-   ©r   r$   r   r   r   r   r   Úmodify_path?   ó   zSessionAPI.modify_pathc                 C   ó    t  dd|ii¡}|  d||¡S )Nr&   r   r5   r-   r6   r   r   r   Úmodify_path_deprecatedC   ó   z!SessionAPI.modify_path_deprecatedc                 C   r4   )Nr*   r5   r-   )r   r$   r*   r   r   r   r   Úmodify_typeG   r8   zSessionAPI.modify_typec                 C   r9   )Nr+   r)   r5   r-   )r   r$   r/   r   r   r   r   Úmodify_kernel_nameK   r;   zSessionAPI.modify_kernel_namec                 C   s"   t  d|ddœi¡}|  d||¡S )Nr+   r2   )r$   r)   r5   r-   )r   r$   r0   r   r   r   r   Úmodify_kernel_idO   s   zSessionAPI.modify_kernel_idc                 C   r"   )NÚDELETEr   r#   r   r   r   ÚdeleteT   r!   zSessionAPI.deleter   )r&   r'   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r    r%   r1   r3   r7   r:   r<   r=   r>   r@   r   r   r   r   r
      s    

r
   c                   @   sp   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d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚSessionAPITestz!Test the sessions web service APIc              
      sÒ   ˆ j }t|dƒ}zt |¡ W n ty( } z|jtjkr‚ W Y d }~nd }~ww ˆ  tt	j
|dd¡ tt|dƒddd}tƒ }t||dd	 W d   ƒ n1 sSw   Y  tˆ jƒˆ _ˆ j‡ fd
d„ƒ}d S )Nr2   T)Úignore_errorsz	nb1.ipynbÚwzutf-8)Úencodingé   )Úversionc                     s2   ˆ j  ¡  ¡ D ]
} ˆ j  | d ¡ qt d¡ d S )Nr$   gš™™™™™¹?)Úsess_apir    r   r@   ÚtimeÚsleep)Úsessionr   r   r   Úcleanup_sessionsl   s   z.SessionAPITest.setUp.<locals>.cleanup_sessions)Únotebook_dirÚpjoinÚosÚmkdirÚOSErrorÚerrnoÚEEXISTÚ
addCleanupr   ÚshutilÚrmtreeÚopenr   r   r
   r   rK   )r   ÚnbdirÚsubdirÚeÚfÚnbrO   r   r   r   ÚsetUpZ   s$   
ÿ€þþzSessionAPITest.setUpc                 C   sÒ   | j  ¡  ¡ }|  t|ƒd¡ | j  d¡}|  |jd¡ | ¡ }|  d|¡ |  |d d¡ |  |d d¡ |  |jd | j	› d	|d › ¡ | j  ¡  ¡ }|  ||g¡ |d }| j  
|¡ ¡ }|  ||¡ d S )
Nr   úfoo/nb1.ipynbéÉ   r$   r   r*   r&   ÚLocationúapi/sessions/)rK   r    r   ÚassertEqualÚlenr1   r   ÚassertInÚheadersÚ
url_prefixr%   )r   ÚsessionsÚrespÚ
newsessionÚsidÚgotr   r   r   Útest_createy   s   "zSessionAPITest.test_createc                 C   óJ   | j jddd}|  |jd¡ | ¡ }|  |d d¡ |  |d d¡ d S )Nz
foo/nb1.pyÚfile©r*   rb   r   r*   ©rK   r1   re   r   r   ©r   rk   rl   r   r   r   Útest_create_file_session   ó
   z'SessionAPITest.test_create_file_sessionc                 C   rp   )Nz
foo/abc123Úconsolerr   rb   r   r*   rs   rt   r   r   r   Útest_create_console_session”   rv   z*SessionAPITest.test_create_console_sessionc                 C   sZ   | j  d¡}|  |jd¡ | ¡ }|  |d d¡ |  |d d¡ |  |d d d¡ d S )Nra   rb   r   r*   r&   )rK   r3   re   r   r   rt   r   r   r   Útest_create_deprecated›   s   z%SessionAPITest.test_create_deprecatedc                 C   sà   |   dd¡}| ¡  | ¡ }| jjd|d d}|  |jd¡ | ¡ }|  d|¡ |  |d d¡ |  |d d |d ¡ |  |jd	 | j	› d
|d › ¡ | j 
¡  ¡ }|  ||g¡ |d }| j |¡ ¡ }|  ||¡ d S )Nr,   úapi/kernelsra   r$   )r0   rb   r   r+   rc   rd   )r   r   r   rK   r1   re   r   rg   rh   ri   r    r%   )r   Úrr+   rk   rl   rj   rm   rn   r   r   r   Útest_create_with_kernel_id£   s   "z)SessionAPITest.test_create_with_kernel_idc                 C   s†   | j  d¡ ¡ }|d }| j  |¡}|  |jd¡ | j  ¡  ¡ }|  |g ¡ tdƒ | j  |¡ W d   ƒ d S 1 s<w   Y  d S )Nra   r$   éÌ   i”  )	rK   r1   r   r@   re   r   r    r   r%   )r   rl   rm   rk   rj   r   r   r   Útest_delete¹   s   
"ÿzSessionAPITest.test_deletec                 C   óN   | j  d¡ ¡ }|d }| j  |d¡ ¡ }|  |d |¡ |  |d d¡ d S )Nra   r$   ú	nb2.ipynbr   )rK   r1   r   r7   re   ©r   rl   rm   Úchangedr   r   r   Útest_modify_pathÆ   ó
   zSessionAPITest.test_modify_pathc                 C   sR   | j  d¡ ¡ }|d }| j  |d¡ ¡ }|  |d |¡ |  |d d d¡ d S )Nra   r$   r€   r&   r   )rK   r1   r   r:   re   r   r   r   r   Útest_modify_path_deprecatedÎ   s
   z*SessionAPITest.test_modify_path_deprecatedc                 C   r   )Nra   r$   rw   r*   )rK   r1   r   r<   re   r   r   r   r   Útest_modify_typeÖ   r„   zSessionAPITest.test_modify_typec                 C   sÔ   | j  d¡ ¡ }|d }| j  ||d d ¡ ¡ }|  |d |¡ |  |d |d ¡ |  |d |d ¡ |  |d d |d d ¡ |  dd¡}| ¡  | ¡ }|d  d	¡ d
d„ |D ƒ |  ||d g¡ d S )Nra   r$   r+   r)   r   r*   r   rz   Úlast_activityc                 S   ó   g | ]}|  d ¡‘qS ©r‡   ©Úpop©Ú.0Úkr   r   r   Ú
<listcomp>í   ó    z:SessionAPITest.test_modify_kernel_name.<locals>.<listcomp>)	rK   r1   r   r=   re   ÚassertNotEqualr   r   r‹   )r   Úbeforerm   Úafterr{   Úkernel_listr   r   r   Útest_modify_kernel_nameÞ   s   z&SessionAPITest.test_modify_kernel_namec                 C   sü   | j  d¡ ¡ }|d }|  dd¡}| ¡  | ¡ }| j  ||d ¡ ¡ }|  |d |¡ |  |d |d ¡ |  |d |d ¡ |  |d d |d d ¡ |  |d d |d ¡ |  dd¡}| ¡  | ¡ }| d	¡ d
d„ |D ƒ |  ||g¡ d S )Nra   r$   r,   rz   r   r*   r+   r   r‡   c                 S   rˆ   r‰   rŠ   rŒ   r   r   r   r     r   z8SessionAPITest.test_modify_kernel_id.<locals>.<listcomp>)	rK   r1   r   r   r   r>   re   r‘   r‹   )r   r’   rm   r{   r+   r“   r”   r   r   r   Útest_modify_kernel_idð   s"   
z$SessionAPITest.test_modify_kernel_idN)rA   rB   rC   rD   r`   ro   ru   rx   ry   r|   r~   rƒ   r…   r†   r•   r–   r   r   r   r   rE   X   s    rE   c                       s4   e Zd ZdZe‡ fdd„ƒZe‡ fdd„ƒZ‡  ZS )ÚAsyncSessionAPITestzETest the sessions web service API using the AsyncMappingKernelManagerc                    s   t stdƒ‚tƒ  ¡  d S )NzCAsyncSessionAPITest tests skipped due to down-level jupyter_client!)Úasync_testing_enabledr   ÚsuperÚsetup_class)Úcls©Ú	__class__r   r   rš     s   zAsyncSessionAPITest.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AsyncSessionAPITest.get_argv)rA   rB   rC   rD   Úclassmethodrš   rž   Ú__classcell__r   r   rœ   r   r—     s    r—   )rD   rU   Ú	functoolsr   rR   r   rX   rL   Úunittestr   Únotebook.utilsr   Únotebook.tests.launchnotebookr   r   Únbformat.v4r   Únbformatr   Újupyter_clientr	   r˜   ÚImportErrorr   ÚjoinrQ   r
   rE   r—   r   r   r   r   Ú<module>   s.    ÿ> 4