U
    luf}                     @   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ejeeje df dd fddZddddZeddddZddddZddddZd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uuidZuuid4r   
setdefaultospathjoinZruntime_dirr
   r   kmr   currentloopZadd_callback_record_started)selfr   Zcf_basename	__class__ </tmp/pip-unpacked-wheel-naub1w99/jupyter_client/kernelapp.pyr   "   s     
zKernelApp.initialize)r   c                    sH   t jdkrdS ttjdd fdd}tjtjfD ]}t|| q2dS )z&Shutdown on SIGTERM or SIGINT (Ctrl-C)ntN)signoframer   c                    s    j  j|  d S )N)r   Zadd_callback_from_signalshutdown)r&   r'   r    r#   r$   shutdown_handler4   s    z1KernelApp.setup_signals.<locals>.shutdown_handler)r   nameinttAnysignalSIGTERMSIGINT)r    r*   sigr#   r)   r$   setup_signals/   s
    
zKernelApp.setup_signals)r&   r   c                 C   s&   | j d| | j  | j  dS )zShut down the application.zShutting down on signal %dN)loginfor   Z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   r4   r5   r   r   basename)r    cfr#   r#   r$   log_connection_info@   s    zKernelApp.log_connection_infoc              	   C   s.   t jd}|dk	r*t|d W 5 Q R X dS )zvFor tests, create a file to indicate that we've started

        Do not rely on this except in our own tests!
        Z*JUPYTER_CLIENT_TEST_RECORD_STARTUP_PRIVATENwb)r   environgetopen)r    fnr#   r#   r$   r   F   s    zKernelApp._record_startedc                 C   sJ   | j d| j z(| j  |   |   | j	  W 5 | j  X dS )zStart the application.zStarting kernel %rN)
r4   r5   r   r   cleanup_resourcesZstart_kernelr9   r3   r   startr)   r#   r#   r$   r@   P   s    
zKernelApp.start)N)__name__
__module____qualname____doc__r   versiondescriptionr
   r	   classesaliasesr   flagsr   r   tagr   r-   UnionstrSequencer   r3   r,   r(   r9   r   r@   __classcell__r#   r#   r!   r$   r      s"   (
r   )rD   r   r/   typingr-   r   Zjupyter_core.applicationr   r   Ztornado.ioloopr   Z	traitletsr    r   Z
kernelspecr   r	   managerr
   r   Zlaunch_instancemainr#   r#   r#   r$   <module>   s   L