B
    2dn
                 @   s   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 d dlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ G dd deZejZdS )    N)
base_flags)
JupyterApp)IOLoop)Unicode   )__version__)KernelSpecManager)NATIVE_KERNEL_NAME)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 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)Zkernelipdebugz"The name of a kernel type to start)helpT)configNc                sh   t  | dt  }| jdi dtj| j	| t
| j| jd| _t | _| j| j d S )Nzkernel-%s.jsonr
   connection_file)kernel_namer   )super
initializeuuiduuid4r   
setdefaultospathjoinZruntime_dirr
   r   kmr   currentloopZadd_callback_record_started)selfargvZcf_basename)	__class__ e/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/jupyter_client/kernelapp.pyr   "   s    
zKernelApp.initialize)returnc                s@   t jdkrdS  fdd}x tjtjgD ]}t|| q(W dS )z&Shutdown on SIGTERM or SIGINT (Ctrl-C)ntNc                s    j  j|  d S )N)r   Zadd_callback_from_signalshutdown)signoframe)r   r!   r"   shutdown_handler3   s    z1KernelApp.setup_signals.<locals>.shutdown_handler)r   name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 )NzShutting down on signal %d)loginfor   Zshutdown_kernelr   stop)r   r&   r!   r!   r"   r%   9   s    
zKernelApp.shutdownc             C   s0   | j j}| jd| | jdtj| d S )NzConnection file: %sz"To connect a client: --existing %s)r   r   r/   r0   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 d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   C   s    zKernelApp._record_startedc             C   sJ   | j d| j z(| j  |   |   | j  W d | j	  X d S )NzStarting kernel %r)
r/   r0   r   r   Zstart_kernelr4   r.   r   startcleanup_resources)r   r!   r!   r"   r:   M   s    
zKernelApp.start)N)__name__
__module____qualname____doc__r   versiondescriptionr
   r   classesaliasesr   flagsr   r	   tagr   r   r.   intr%   r4   r   r:   __classcell__r!   r!   )r    r"   r      s   
r   )r   r*   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   H