a
    D¿b)  ã                   @   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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y²   dZY n0 ejjZG dd„ deƒ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   úQlib/python3.9/site-packages/notebook/services/sessions/tests/test_sessions_api.pyÚ__init__   s    zSessionAPI.__init__Nc                 C   s\   | j |td|ƒ|d}d|j  kr,dk rPn n z| ¡ d |_W n   Y n0 | ¡  |S )Nzapi/sessions)Údatai  iX  Úmessage)r   r   Ústatus_codeÚjsonÚreasonÚraise_for_status)r   ZverbÚpathÚbodyZresponser   r   r   Ú_req!   s    
ÿzSessionAPI._reqc                 C   s   |   dd¡S )NÚGETÚ ©r   ©r   r   r   r   Úlist.   s    zSessionAPI.listc                 C   s   |   d|¡S )Nr   r   ©r   Úidr   r   r   Úget1   s    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   Úcreate4   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_deprecated;   s    
ÿÿzSessionAPI.create_deprecatedc                 C   s   t  d|i¡}|  d||¡S )Nr   ÚPATCHr(   ©r   r   r   r   r   r   r   Úmodify_pathA   s    zSessionAPI.modify_pathc                 C   s    t  dd|ii¡}|  d||¡S )Nr!   r   r/   r(   r0   r   r   r   Úmodify_path_deprecatedE   s    z!SessionAPI.modify_path_deprecatedc                 C   s   t  d|i¡}|  d||¡S )Nr%   r/   r(   )r   r   r%   r   r   r   r   Úmodify_typeI   s    zSessionAPI.modify_typec                 C   s    t  dd|ii¡}|  d||¡S )Nr&   r$   r/   r(   )r   r   r*   r   r   r   r   Úmodify_kernel_nameM   s    zSessionAPI.modify_kernel_namec                 C   s"   t  d|ddœi¡}|  d||¡S )Nr&   r-   )r   r$   r/   r(   )r   r   r+   r   r   r   r   Úmodify_kernel_idQ   s    zSessionAPI.modify_kernel_idc                 C   s   |   d|¡S )NZDELETEr   r   r   r   r   ÚdeleteV   s    zSessionAPI.delete)N)r!   r"   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r,   r.   r1   r2   r3   r4   r5   r6   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 n2 tyP } z|jtjkr<‚ W Y d }~n
d }~0 0 ˆ  tt	j
|dd¡ tjt|dƒddd$}tƒ }t||dd	 W d   ƒ n1 s¨0    Y  tˆ jƒˆ _ˆ j‡ fd
d„ƒ}d S )Nr-   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   r6   ÚtimeÚsleep)Zsessionr   r   r   Úcleanup_sessionsn   s    z.SessionAPITest.setUp.<locals>.cleanup_sessions)Znotebook_dirÚpjoinÚosÚmkdirÚOSErrorÚerrnoZEEXISTZ
addCleanupr   ÚshutilZrmtreeÚioÚopenr   r   r
   r   rA   )r   ZnbdirZsubdirÚeÚfZnbrD   r   r   r   ÚsetUp\   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/{0})rA   r   r   ÚassertEqualÚlenr,   r   ÚassertInÚheadersÚ
url_prefixÚformatr    )r   ÚsessionsÚrespÚ
newsessionÚsidÚgotr   r   r   Útest_create{   s    "zSessionAPITest.test_createc                 C   sJ   | j jddd}|  |jd¡ | ¡ }|  |d d¡ |  |d d¡ d S )Nz
foo/nb1.pyÚfile©r%   rQ   r   r%   ©rA   r,   rT   r   r   ©r   r[   r\   r   r   r   Útest_create_file_session   s
    z'SessionAPITest.test_create_file_sessionc                 C   sJ   | j jddd}|  |jd¡ | ¡ }|  |d d¡ |  |d d¡ d S )Nz
foo/abc123Úconsolera   rQ   r   r%   rb   rc   r   r   r   Útest_create_console_session–   s
    z*SessionAPITest.test_create_console_sessionc                 C   sZ   | j  d¡}|  |jd¡ | ¡ }|  |d d¡ |  |d d¡ |  |d d d¡ d S )NrP   rQ   r   r%   r!   )rA   r.   rT   r   r   rc   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/kernelsrP   r   )r+   rQ   r   r&   rR   rS   )r   r   r   rA   r,   rT   r   rV   rW   rX   rY   r   r    )r   Úrr&   r[   r\   rZ   r]   r^   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   ƒ n1 sv0    Y  d S )NrP   r   éÌ   i”  )	rA   r,   r   r6   rT   r   r   r   r    )r   r\   r]   r[   rZ   r   r   r   Útest_delete»   s    
zSessionAPITest.test_deletec                 C   sN   | j  d¡ ¡ }|d }| j  |d¡ ¡ }|  |d |¡ |  |d d¡ d S )NrP   r   ú	nb2.ipynbr   )rA   r,   r   r1   rT   ©r   r\   r]   Zchangedr   r   r   Útest_modify_pathÈ   s
    zSessionAPITest.test_modify_pathc                 C   sR   | j  d¡ ¡ }|d }| j  |d¡ ¡ }|  |d |¡ |  |d d d¡ d S )NrP   r   rm   r!   r   )rA   r,   r   r2   rT   rn   r   r   r   Útest_modify_path_deprecatedÐ   s
    z*SessionAPITest.test_modify_path_deprecatedc                 C   sN   | j  d¡ ¡ }|d }| j  |d¡ ¡ }|  |d |¡ |  |d d¡ d S )NrP   r   re   r%   )rA   r,   r   r3   rT   rn   r   r   r   Útest_modify_typeØ   s
    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 )NrP   r   r&   r$   r   r%   r   rh   Úlast_activityc                 S   s   g | ]}|  d ¡‘qS ©rr   ©Úpop©Ú.0Úkr   r   r   Ú
<listcomp>ï   ó    z:SessionAPITest.test_modify_kernel_name.<locals>.<listcomp>)	rA   r,   r   r4   rT   ÚassertNotEqualr   r   ru   )r   Úbeforer]   Úafterri   Ú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 )NrP   r   r'   rh   r   r%   r&   r   rr   c                 S   s   g | ]}|  d ¡‘qS rs   rt   rv   r   r   r   ry   	  rz   z8SessionAPITest.test_modify_kernel_id.<locals>.<listcomp>)	rA   r,   r   r   r   r5   rT   r{   ru   )r   r|   r]   ri   r&   r}   r~   r   r   r   Útest_modify_kernel_idò   s"    
z$SessionAPITest.test_modify_kernel_idN)r7   r8   r9   r:   rO   r_   rd   rf   rg   rj   rl   ro   rp   rq   r   r€   r   r   r   r   r;   Z   s   r;   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t| ƒ ¡  d S )NzCAsyncSessionAPITest tests skipped due to down-level jupyter_client!)Úasync_testing_enabledr   Úsuperr   Úsetup_class)Úcls©Ú	__class__r   r   r„     s    zAsyncSessionAPITest.setup_classc                    s"   t t| ƒ ¡ }tr| dg¡ |S )Nzd--NotebookApp.kernel_manager_class=notebook.services.kernels.kernelmanager.AsyncMappingKernelManager)rƒ   r   Úget_argvr‚   Úextend)r…   Úargvr†   r   r   rˆ     s    zAsyncSessionAPITest.get_argv)r7   r8   r9   r:   Úclassmethodr„   rˆ   Ú__classcell__r   r   r†   r   r     s
   r   ) r:   rI   Ú	functoolsr   rK   rF   r   rJ   ÚsysrB   Zunittestr   Znotebook.utilsr   Znotebook.tests.launchnotebookr   r   Znbformat.v4r   Znbformatr   Zjupyter_clientr	   r‚   ÚImportErrorr   ÚjoinrE   Úobjectr
   r;   r   r   r   r   r   Ú<module>   s.   
> 4