U
    lufL                     @  s  d Z ddlmZ ddlZddlZddlZddlZddlZddl	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 dd	lmZmZmZ 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 )z#A Jupyter console app to run files.    )annotationsN)
JupyterAppbase_aliases
base_flags)AnyDictFloat)catch_config_error   )__version__)JupyterConsoleAppapp_aliases	app_flags
   c                      s   e Zd 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d	d
d fddZedd	d
d fddZdd
dddZd
dddZd
d fddZ  ZS )RunAppz$An Jupyter Console app to run files.z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.
        )confighelpNzlist[str] | NoneNone)argvreturnc                   s,   t  | | | j | jdd | _dS )z!Parse the command line arguments.N)superparse_command_lineZbuild_kernel_argv
extra_argsfilenames_to_runselfr   	__class__ 9/tmp/pip-unpacked-wheel-naub1w99/jupyter_client/runapp.pyr   ?   s    zRunApp.parse_command_linec                   s>   | j d t | t|  ttj| j |   dS )zInitialize the app.zjupyter run: initialize...N)	logdebugr   
initializer   signalSIGINThandle_sigintinit_kernel_infor   r   r   r    r#   E   s
    
zRunApp.initializezt.Any)argsr   c                 G  s"   | j r| j   n| jd dS )zHandle SIGINT.z*Cannot interrupt kernels we didn't start.
N)Zkernel_managerZinterrupt_kernelr!   error)r   r(   r   r   r    r&   N   s    zRunApp.handle_sigint)r   c              
   C  s   | j }t }| jj  | j }z| jjdd}W nB tjk
rx } z"t | |krhd}t	||W 5 d}~X Y q$X |d 
d|kr$|d | _dS q$dS )z4Wait for a kernel to be ready, and store kernel infor
   timeoutz,Kernel didn't respond to kernel_info_requestNZparent_headermsg_idcontent)kernel_timeouttimekernel_clientZ
hb_channelZunpauseZkernel_infoZget_shell_msgqueueEmptyRuntimeErrorget)r   r+   Zticr,   replyemsgr   r   r    r'   U   s    

zRunApp.init_kernel_infoc              
     s   | j d t   | jr| jD ]f}| j d| t|F}| }| jj|t	d}|d d dkrjdnd}|r~t
d	| W 5 Q R X q"nBtj }| jj|t	d}|d d dkrdnd}|rd
}t
|dS )zStart the application.zjupyter run: starting...zjupyter run: executing `%s`r*   r-   statusokr   r
   zjupyter-run error running '%s'z!jupyter-run error running 'stdin'N)r!   r"   r   startr   openreadr0   Zexecute_interactiveOUTPUT_TIMEOUT	Exceptionsysstdin)r   filenamefpcoder5   Zreturn_coder7   r   r   r    r:   g   s"    



zRunApp.start)N)N)__name__
__module____qualname____doc__r   versionnamedescriptionr   flagsaliasesr   frontend_aliasesfrontend_flagsr   r.   r   r	   r#   r&   r'   r:   __classcell__r   r   r   r    r   )   s&   r   __main__))rG   
__future__r   r1   r$   r?   r/   typingtZjupyter_core.applicationr   r   r   Z	traitletsr   r   r   Ztraitlets.configr	    r   Z
consoleappr   r   r   r=   dictrK   Zfrontend_flags_dictupdaterL   Zfrontend_aliases_dictsetkeysrM   rN   r   Zlaunch_instancemainZlaunch_new_instancerD   r   r   r   r    <module>   s0   

T

