B
    \	                 @   s   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 )    N)
JupyterApp
base_flags)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 Zdd Zdd Zdd Zdd Z  ZS )	KernelAppz3Launch a kernel by name in a local subprocess.
    z$Run a kernel locally in a subprocesszKernelApp.kernel_namezKernelManager.ip)ZkernelZipdebugz"The name of a kernel type to start)helpT)configNc                s^   t t| | t| j| jd| _dt  }t	j
| j|| j_t | _| j| j d S )N)kernel_namer   zkernel-%s.json)superr   
initializer
   r   r   kmuuidZuuid4ospathjoinZruntime_dirconnection_filer   ZcurrentloopZadd_callback_record_started)selfargvZcf_basename)	__class__ 7lib/python3.7/site-packages/jupyter_client/kernelapp.pyr      s    
zKernelApp.initializec                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_handler-   s    z1KernelApp.setup_signals.<locals>.shutdown_handler)r   namesignalSIGTERMSIGINT)r   r#   Zsigr   )r   r   setup_signals(   s
    
zKernelApp.setup_signalsc             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    2   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)   r*   r   r   basename)r   Zcfr   r   r   log_connection_info7   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   <   s    zKernelApp._record_startedc             C   sJ   | j d| j z(| j  |   |   | j  W d | j	  X d S )NzStarting kernel %r)
r)   r*   r   r   Zstart_kernelr-   r(   r   startZcleanup)r   r   r   r   r3   F   s    
zKernelApp.start)N)__name__
__module____qualname____doc__r   versionZdescriptionr
   r   classesaliasesr   flagsr   r	   tagr   r   r(   r    r-   r   r3   __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	   Zmanagerr
   r   Zlaunch_instancemainr   r   r   r   <module>   s   D