B
    \                 @   s>  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 d dlm	Z	m
Z
mZmZmZmZmZmZ d dlmZmZmZ ddlmZ ddlmZmZmZ yd dlZW n ek
r   d dlZY nX d	ZeeZ eeZ!e "e! eeZ#eeZ$e#"e$ e%e$& Z$e%e!& Z!G d
d deeZ'e'j( Z)Z*e+dkr:e)  dS )    )print_functionN)catch_config_error)InstanceDictUnicodeBoolListCUnicodeAnyFloat)
JupyterApp
base_flagsbase_aliases   )__version__)JupyterConsoleAppapp_aliases	app_flags
   c                   s   e Zd ZeZdZdZeeZee	Z	e
eZe
eZeddddZd fdd		Zed fd
d	Zdd Zdd Z fddZ  ZS )RunAppzjupyter runzRun Jupyter kernel code.<   Ta5  Timeout for giving up on a kernel (in seconds).

        On first connect and restart, the console tests whether the
        kernel is running and responsive by sending kernel_info_requests.
        This sets the timeout in seconds for how long the kernel can take
        before being presumed dead.
        )ZconfighelpNc                s0   t t| | | | j | jd d  | _d S )N)superr   parse_command_lineZbuild_kernel_argvZ
extra_argsfilenames_to_run)selfargv)	__class__ 4lib/python3.7/site-packages/jupyter_client/runapp.pyr   C   s    zRunApp.parse_command_linec                sB   | j d tt| | t|  ttj| j | 	  d S )Nzjupyter run: initialize...)
logdebugr   r   
initializer   signalSIGINThandle_sigintinit_kernel_info)r   r   )r   r   r   r"   H   s
    
zRunApp.initializec             G   s,   | j r| j   ntdtjd td d S )N )filez*Cannot interrupt kernels we didn't start.
)Zkernel_managerZinterrupt_kernelprintsysstderrerror)r   argsr   r   r   r%   P   s    zRunApp.handle_sigintc             C   s   | j }t }| jj  | j }xfy| jjdd}W n. tjk
rf   t | |krbt	dY q&X |d 
d|kr&|d | _dS q&W dS )z4Wait for a kernel to be ready, and store kernel infor   )timeoutz,Kernel didn't respond to kernel_info_requestZparent_headermsg_idcontentN)kernel_timeouttimekernel_clientZ
hb_channelZunpauseZkernel_infoZget_shell_msgqueueZEmptyRuntimeErrorget)r   r.   Zticr/   replyr   r   r   r&   W   s    

zRunApp.init_kernel_infoc          
      s   | j d tt|   | jrx| jD ]h}| j d|  t|F}| }| jj	|t
d}|d d dkrrdnd}|rtd	| W d Q R X q(W n>tj }| jj	|t
d}|d d dkrdnd}|rtd
d S )Nzjupyter run: starting...zjupyter run: executing `%s`)r.   r0   Zstatusokr   r   zjupyter-run error running '%s'z!jupyter-run error running 'stdin')r    r!   r   r   startr   openreadr3   Zexecute_interactiveOUTPUT_TIMEOUT	Exceptionr*   stdin)r   filenamefpcoder7   Zreturn_code)r   r   r   r9   h   s     

zRunApp.start)N)N)__name__
__module____qualname__r   versionnameZdescriptionr   flagsaliasesr
   frontend_aliasesfrontend_flagsr   r1   r   r   r"   r%   r&   r9   __classcell__r   r   )r   r   r   1   s   r   __main__),Z
__future__r   Zloggingr#   r2   r*   Ztraitlets.configr   Z	traitletsr   r   r   r   r   r	   r
   r   Zjupyter_core.applicationr   r   r   r'   r   Z
consoleappr   r   r   r4   ImportErrorZQueuer<   dictrG   rJ   updaterH   rI   setkeysr   Zlaunch_instancemainZlaunch_new_instancerB   r   r   r   r   <module>   s4   (

J

