B
    9d
                 @   s   d Z ddlZddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 G dd	 d	eZG d
d deZG dd deZG dd de
eejZdS )z+Tornado handlers for the terminal emulator.    N)web)utcnow   )IPythonHandler)WebSocketMixinc               @   s   e Zd ZdZejdd ZdS )TerminalHandlerzRender the terminal interface.c             C   s   |  | jdd| d d S )Nzterminal.htmlzterminals/websocket/)Zws_path)writeZrender_template)self	term_name r   g/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/notebook/terminal/handlers.pyget   s    zTerminalHandler.getN)__name__
__module____qualname____doc__r   authenticatedr   r   r   r   r   r      s   r   c               @   s   e Zd ZdZejdd ZdS )NamedTerminalHandlerz/Creates and renders a named terminal interface.c             C   s4   | j  }|d }| jjdd| }| | d S )Nnamezterminals/newz
terminals/)terminal_managercreaterequestpathreplaceredirect)r	   modelr
   new_pathr   r   r   r      s    
zNamedTerminalHandler.getN)r   r   r   r   r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdZejdd ZdS )NewTerminalHandlerzBCreates and renders a terminal interface using the named argument.c             C   s   |dkrt dd| jjd| |}|| jjkrh| d| | d | 	t
| j| d S | j| | | d S )Nnewi  z Terminal name 'new' is reserved.znew/ZLocationi.  )r   	HTTPErrorr   r   r   r   	terminalsZ
set_headerZ
set_statusfinishjsondumpsZget_terminal_modelZcreate_with_namer   )r	   r
   r   r   r   r   r   &   s    
zNewTerminalHandler.getN)r   r   r   r   r   r   r   r   r   r   r   r   $   s   r   c                   sF   e Zd Zdd Z fddZ fddZd fdd		Zd
d Z  ZS )
TermSocketc             C   s   dS )zvTerminado adds redundant origin_check

        Tornado already calls check_origin, so don't do anything here.
        Tr   )r	   r   r   r   origin_check7   s    zTermSocket.origin_checkc                s:   |   std|d | jjkr,tdt j||S )Ni  r   i  )Zget_current_userr   r   Zterm_managerr    superr   )r	   argskwargs)	__class__r   r   r   >   s
    

zTermSocket.getc                s   t  | |   d S )N)r&   
on_message_update_activity)r	   message)r)   r   r   r*   E   s    zTermSocket.on_messageFc                s   t  j||d |   d S )N)binary)r&   write_messager+   )r	   r,   r-   )r)   r   r   r.   I   s    zTermSocket.write_messagec             C   s2   t  | jjd< | j| jjkr.t  | jj| j _d S )NZterminal_last_activity)r   Zapplicationsettingsr
   r   r    Zlast_activity)r	   r   r   r   r+   M   s    zTermSocket._update_activity)F)	r   r   r   r%   r   r*   r.   r+   __classcell__r   r   )r)   r   r$   5   s
   r$   )r   r"   tornador   Z	terminadoZnotebook._tzr   Zbase.handlersr   Zbase.zmqhandlersr   r   r   r   r$   r   r   r   r   <module>   s   
