o
    +wi~                     @   s   d 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mZ ddlmZmZ dd	lmZ G d
d deZejZdS )z@An application to launch a kernel by name in a local subprocess.    N)
JupyterApp
base_flags)IOLoop)Unicode   )__version__)NATIVE_KERNEL_NAMEKernelSpecManager)KernelManagerc                       s   e Zd ZdZeZdZeegZ	dddZ
ded iZeeddjd	d
Zddejeeje df ddf fddZdddZdeddfddZdddZdddZdddZ  ZS )	KernelAppz.Launch a kernel by name in a local subprocess.z$Run a kernel locally in a subprocesszKernelApp.kernel_namezKernelManager.ip)kernelipdebugz"The name of a kernel type to start)helpT)configNargvreturnc                    sh   t  | dt  }| jdi dtj| j	| t
| j| jd| _t | _| j| j dS )zInitialize the application.zkernel-%s.jsonr
   connection_file)kernel_namer   N)super
initializeuuiduuid4r   
setdefaultospathjoinruntime_dirr
   r   kmr   currentloopadd_callback_record_started)selfr   cf_basename	__class__ U/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/jupyter_client/kernelapp.pyr   #   s   
zKernelApp.initializec                    sL   t jdkrdS dtdtjddf fdd}tjtjfD ]}t|| qdS )z&Shutdown on SIGTERM or SIGINT (Ctrl-C)ntNsignoframer   c                    s    j  j|  d S N)r    add_callback_from_signalshutdown)r*   r+   r#   r'   r(   shutdown_handler5   s   z1KernelApp.setup_signals.<locals>.shutdown_handler)r   nameinttAnysignalSIGTERMSIGINT)r#   r0   sigr'   r/   r(   setup_signals0   s   
zKernelApp.setup_signalsr*   c                 C   s&   | j d| | j  | j  dS )zShut down the application.zShutting down on signal %dN)loginfor   shutdown_kernelr    stop)r#   r*   r'   r'   r(   r.   ;   s   
zKernelApp.shutdownc                 C   s0   | j j}| jd| | jdtj| dS )z'Log the connection info for the kernel.zConnection file: %sz"To connect a client: --existing %sN)r   r   r:   r;   r   r   basename)r#   cfr'   r'   r(   log_connection_infoA   s   zKernelApp.log_connection_infoc                 C   sH   t jd}|dur"t|d	 W d   dS 1 sw   Y  dS dS )zvFor tests, create a file to indicate that we've started

        Do not rely on this except in our own tests!
        *JUPYTER_CLIENT_TEST_RECORD_STARTUP_PRIVATENwb)r   environgetopen)r#   fnr'   r'   r(   r"   G   s   "zKernelApp._record_startedc                 C   sR   | j d| j z| j  |   |   | j  W | j	  dS | j	  w )zStart the application.zStarting kernel %rN)
r:   r;   r   r   start_kernelr@   r9   r    startcleanup_resourcesr/   r'   r'   r(   rH   Q   s   
zKernelApp.startr,   )r   N)__name__
__module____qualname____doc__r   versiondescriptionr
   r	   classesaliasesr   flagsr   r   tagr   r3   UnionstrSequencer   r9   r2   r.   r@   r"   rH   __classcell__r'   r'   r%   r(   r      s$    *



r   )rM   r   r5   typingr3   r   jupyter_core.applicationr   r   tornado.ioloopr   	traitletsr    r   
kernelspecr   r	   managerr
   r   launch_instancemainr'   r'   r'   r(   <module>   s    
L