
    bi                     $   U d dl 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	Z	d dl
Zd dlmZmZ d dlmZ d dlm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 i Zeeef   ed<    e	j@                         Z!defdZ"d Z# G d dee      Z$ G d de$      Z% G d de$      Z& G d de$      Z' G d de$      Z( G d de$      Z) G d de$      Z* G d d e$      Z+ G d! d"e$      Z, G d# d$e$      Z- G d% d&e$      Z. G d' d(e$      Z/ G d) d*e$      Z0d+ Z1y),    )ABCabstractmethod)Path)
HTTPStatusN)DictList)
APIHandler)url_path_join)KernelProvisionerFactory)KernelProvisionerBase   )
NsightTooltools)WebRTCManagerkernel_id_to_nsight_toolprovisionerc                 >      fd} | j                          _         y )Nc                 b     t        j                         dt        t           f fd       }|S )Ncmdc                     t         j                  j                  d       }||j                         | z   }  | fi |S N)r   get	kernel_idlaunch_kernel_cmd)r   kwargstoolfuncr   s      \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jupyterlab_nvidia_nsight/handlers.pylaunch_kernelzFwrap_provisioner.<locals>.launch_kernel_wrapper.<locals>.launch_kernel#   sD    +//0E0EtLD,,.4&v&&    )	functoolswrapsr   str)r   r   r   s   ` r   launch_kernel_wrapperz/wrap_provisioner.<locals>.launch_kernel_wrapper"   s1    			'tCy 	' 
	'
 r    )r   )r   r$   s   ` r   wrap_provisionerr%   !   s     !6k6O6O PKr    c                  H    d }  | t         j                        t         _        y )Nc                 B     t        j                          fd       }|S )Nc                  .     | i |}t        |       |S r   )r%   )argsr   r   r   s      r   create_provisioner_instancezqwrap_kernel_provisioner_factory.<locals>.create_provisioner_instance_wrapper.<locals>.create_provisioner_instance0   s     //K[)r    )r!   r"   )r   r*   s   ` r   #create_provisioner_instance_wrapperzLwrap_kernel_provisioner_factory.<locals>.create_provisioner_instance_wrapper/   s&    			 
	 +*r    )r   r*   )r+   s    r   wrap_kernel_provisioner_factoryr,   .   s!    + <_ <<<>8r    c                   T    e Zd Zed        Zej                  j                  d        Zy)HandlerBasec                      y r    )selfr   s     r   	post_implzHandlerBase.post_impl;   s    r    c           	      *   	  | j                   di | j                         xs i  y # t        $ rb}| j                  t        j
                  j                         | j                  t        j                  dt        |      i             Y d }~y d }~ww xY w)Nmessager0   )r2   get_json_bodyBaseException
set_statusr   INTERNAL_SERVER_ERRORvaluefinishjsondumpsr#   )r1   es     r   postzHandlerBase.post?   so    	9DNN:d0028b: 	9OOJ<<BBCKK

Is1v#6788	9s   $' 	BABBN)	__name__
__module____qualname__r   r2   tornadowebauthenticatedr>   r0   r    r   r.   r.   :   s2      [[9 9r    r.   c                       e Zd Zd Zy)DoIsInsideDockerHandlerc                 l    | j                  t        j                  dt        j                  i             y )Ninside_docker)r:   r;   r<   r   rH   )r1   s    r   r2   z!DoIsInsideDockerHandler.post_implI   s"    DJJ1L1LMNOr    Nr?   r@   rA   r2   r0   r    r   rF   rF   H   s    Pr    rF   c            	       ,    e Zd ZddddedededefdZy)	DoEnableHandler )r)   installation_path	tool_typer   r)   rM   c          	         t        |   |||      }|j                  Vd| d}| j                  t        j                  j
                         | j                  t        j                  d|i             y |t        |<   | j                  t        j                  |j                  xs dt        |j                               d             y )NzCould not find z\ executable. Please set the installation path in jupyterlab-nvidia-nsight extension settingsr4   rL   )
target_exer   )r   rP   r7   r   r8   r9   r:   r;   r<   r   r#   r   )r1   rN   r   r)   rM   r   r4   s          r   r2   zDoEnableHandler.post_implN   s    Y	+<dC??"'	{ 3b bGOOJ<<BBCKK

Iw#789.2 +DJJdoo.C),T-C-C-E)F H I 	Jr    Nr?   r@   rA   r#   r2   r0   r    r   rK   rK   M   s2    >@[]J J-0J8;JUXJr    rK   c                       e Zd ZdefdZy)DoDisableHandlerr   c                n    t         j                  |      }|j                          | j                          y r   )r   popcleanupr:   )r1   r   r   s      r   r2   zDoDisableHandler.post_impl]   s$    '++I6r    NrQ   r0   r    r   rS   rS   \   s    c r    rS   c                       e Zd ZdedefdZy)DoSetVersionHandlerr   versionc          	         	 t         |   j                  |      }|r'| j                  t        j                  d|i             y | j                          y # t
        j                  $ rb}| j                  t        j                  j                         | j                  t        j                  dt        |      i             Y d }~y d }~ww xY w)Nwarningr4   )r   set_versionr:   r;   r<   r   VersionErrorr7   r   r8   r9   r#   )r1   r   rY   r[   r=   s        r   r2   zDoSetVersionHandler.post_impld   s    	9.y9EEgNGDJJ	7';<=&& 	9OOJ<<BBCKK

Is1v#6788	9s   A A A C	'ACC	NrQ   r0   r    r   rX   rX   c   s    	9c 	9C 	9r    rX   c                       e Zd ZdefdZy)DoGetStartCodeHandlerr   c                    t        |   j                  di |}| j                  t        j                  d|i             y Ncoder0   )r   get_start_coder:   r;   r<   )r1   r   start_kwargsrb   s       r   r2   zDoGetStartCodeHandler.post_implq   s3    '	2AAQLQDJJ~./r    NrQ   r0   r    r   r_   r_   p   s    0c 0r    r_   c                       e Zd Zd Zy)DoGetStopCodeHandlerc                    t        |   j                  di |}| j                  t        j                  d|i             y ra   )r   get_stop_coder:   r;   r<   )r1   r   stop_kwargsrb   s       r   r2   zDoGetStopCodeHandler.post_implw   s3    '	2@@O;ODJJ~./r    NrI   r0   r    r   rf   rf   v   s    0r    rf   c                   &    e Zd ZeddededefdZy)DoStartWebRTCHandler)hostreport_pathrN   rl   c          	      2   	 t        j                  |t        j                  |      |      }|P| j	                  t
        j                  j                         | j                  t        j                  ddi             y | j                  t        j                  dd| d| i             y # t        $ rb}| j	                  t
        j                  j                         | j                  t        j                  dt        |      i             Y d }~y d }~ww xY w)Nr4   z Failed to start WebRTC containerurlzhttp://:)r   runr   normalize_pathr7   r   r8   r9   r:   r;   r<   	Exceptionrepr)r1   rm   rN   rl   portr=   s         r   r2   zDoStartWebRTCHandler.post_impl}   s    		: $$Y
0I0I+0VX\]D|
 @ @ F FGDJJ	3U'VWXDJJav/F'GHI 	:OOJ<<BBCKK

ItAw#7899	:s   A;B+ >,B+ +	D4ADDN)r?   r@   rA   default_hostr#   r2   r0   r    r   rk   rk   |   s    IU 
: 
: 
:3 
:r    rk   c                       e Zd ZdefdZy)DoStopWebRTCHandlerrm   c                t    t        j                  t        j                  |             | j	                          y r   )r   stopr   rr   r:   )r1   rm   s     r   r2   zDoStopWebRTCHandler.post_impl   s$    :44[ABr    NrQ   r0   r    r   rx   rx      s     r    rx   c                       e Zd ZdefdZy)DoIsFileExistsHandlerpathc                    | j                  t        j                  dt        j                  |      j                         i             y )Nexists)r:   r;   r<   r   rr   r   )r1   r}   s     r   r2   zDoIsFileExistsHandler.post_impl   s0    DJJ**C*CD*I*P*P*RSTUr    NrQ   r0   r    r   r|   r|      s    V Vr    r|   c                       e Zd ZdefdZy)DoIsWebRTCPulledHandlerrN   c                X   	 t        j                  t        j                         |       | j                  t	        j
                  ddi             y # t        j                  j                  $ r;}| j                  t	        j
                  d|j                  d             Y d }~y d }~ww xY w)NpulledTF)r   r4   )
r   get_docker_imageget_docker_clientr:   r;   r<   dockererrorsImageNotFoundexplanation)r1   rN   r=   s      r   r2   z!DoIsWebRTCPulledHandler.post_impl   sx    	Q**=+J+J+LiXKK

Hd#345}}** 	QKK

e#NOPP	Qs   AA B).1B$$B)NrQ   r0   r    r   r   r      s    Qc Qr    r   c                       e Zd ZdefdZy)DoPullWebRTCHandlerrN   c                N    t        j                  |       | j                          y r   )r   
pull_imager:   )r1   rN   s     r   r2   zDoPullWebRTCHandler.post_impl   s      +r    NrQ   r0   r    r   r   r      s    c r    r   c                       e Zd ZdefdZy)DoCheckOutputDirr}   c          	         t        j                  |      }|j                         sT| j                  t        j
                  j                         | j                  t        j                  dd| di             y |j                         sT| j                  t        j
                  j                         | j                  t        j                  dd| di             y |dz  }	 |j                          |j                          | j                          y # t        $ rV | j                  t        j
                  j                         | j                  t        j                  dd| di             Y y w xY w)Nr4   z"Output directory does not exist: ""z&Output directory is not a directory: "z,jupyterlab_nvidia_nsight_permission_test.txtz#Output directory is not writable: ")r   rr   r   r7   r   r8   r9   r:   r;   r<   is_dirtouchunlinkPermissionError)r1   r}   	test_paths      r   r2   zDoCheckOutputDir.post_impl   s*   ((.{{}OOJ<<BBCKK

I1STXSYYZ/[#\]^{{}OOJ<<BBCKK

I1WX\W]]^/_#`ab II		`OOKKM 	`OOJ<<BBCKK

I1TUYTZZ[/\#]^_	`s   $0D AE43E4NrQ   r0   r    r   r   r      s    ` `r    r   c                 b   t        | j                  d   d      }dt        fdt        fdt        fdt
        fdt        fdt        fd	t        fd
t        fdt        fdt        fdt        fdt        ffD cg c]  \  }}t        ||      |f }}}| j                  d|       t                y c c}}w )Nbase_urlzjupyterlab-nvidia-nsightzis-inside-dockerenabledisablezset-versionzget-start-codezget-stop-codezstart-webrtczstop-webrtczis-file-existszis-webrtc-pulledzpull-webrtczcheck-output-directoryz.*$)r
   settingsrF   rK   rS   rX   r_   rf   rk   rx   r|   r   r   r   add_handlersr,   )web_appbase_route_patternnamehandlerhandlerss        r   setup_handlersr      s    &w'7'7
'CE_`  !89'()/0452312/045!89/0%'78
D' 
)4	0':H " )#%%s   3B+)2abcr   r   pathlibr   httpr   r!   r;   socketdocker.errorsr   typingr   r   jupyter_server.base.handlersr	   jupyter_server.utilsr
   rB   jupyter_client.provisioningr   ,jupyter_client.provisioning.provisioner_baser   nsight_toolsr   r   webrtc_containerr   r   r#   __annotations__getfqdnrv   r%   r,   r.   rF   rK   rS   rX   r_   rf   rk   rx   r|   r   r   r   r   r0   r    r   <module>r      s   $ #        3 .  @ N + + 35 $sJ/ 4v~~
Q"7 
Q	>9*c 9Pk P
Jk J{ 
9+ 
90K 00; 0:; :+ VK V
Qk Q+ `{ `,&r    