o
    ^ix                     @  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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mZ d	dlmZ G dd deZdS )A terminals extension app.    )annotationsN)which)ensure_async)ExtensionApp)trans)Type   )api_handlershandlers)TerminalManagerc                   @  sr   e Zd ZU dZdZeeddjddZde	d< d	Z
dddZdddZdddZdddZdddZdddZdS )TerminalsExtensionAppr   jupyter_server_terminalsz"The terminal manager class to use.)default_valuehelpT)configztype[TerminalManager]terminal_manager_classFreturnNonec                 C  sB   | j r| j js| jddi dS |   | jd| jd dS )zInitialize settings.terminals_availableFNT)r   terminal_manager)	serverappterminals_enabledsettingsupdateinitialize_configurablesr   self r   W/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/jupyter_server_terminals/app.pyinitialize_settings%   s   
z)TerminalsExtensionApp.initialize_settingsc                 C  s   t jdkrdntd}| jdusJ | jjd}t|tr#t	|}|du r0t j
dp.|gn|}t jdkrE|du rEtj sE|d | j|| jj| jjd| jd	| _| jj| j_dS )
zInitialize configurables.ntzpowershell.exeshNshell_commandSHELLz-l)JUPYTER_SERVER_ROOTJUPYTER_SERVER_URL)r#   	extra_envparent)osnamer   r   terminado_settingsget
isinstancestrshlexsplitenvironsysstdoutisattyappendr   root_dirconnection_urlr   log)r   default_shellshell_overrideshellr   r   r   r   /   s"   


z.TerminalsExtensionApp.initialize_configurablesc                 C  s   | j sdS | j js| jd | j jjd< dS | jdtjd| jif | jt	j
 | j dus0J | j| j jjd< | jd | j jjd< dS )zInitialize handlers.Nr   z/terminals/websocket/(\w+)term_managerr   )r   r   r   web_appr   r5   
TermSocketr   extendr
   default_handlersr   r   r   r   initialize_handlersK   s&   z)TerminalsExtensionApp.initialize_handlersdict[str, t.Any] | Nonec                 C  s   | j r| jj}|r|S dS )zGet current activity info.N)r   r   	terminals)r   rC   r   r   r   current_activitye   s
   z&TerminalsExtensionApp.current_activityc                   sR   | j sdS | j}t| }tdd|}| jd|| t|	 I dH  dS )zShutdown all terminals.

        The terminals will shutdown themselves when this process no longer exists,
        but explicit shutdown allows the TerminalManager to cleanup.
        NzShutting down %d terminalzShutting down %d terminalsz%s %% %s)
r   r   lenlistr   ngettextr8   infor   terminate_all)r   r   n_terminalsterminal_msgr   r   r   cleanup_terminalsm   s   z'TerminalsExtensionApp.cleanup_terminalsc                   s   |   I dH  dS )zStop the extension.N)rL   r   r   r   r   stop_extension~   s   z$TerminalsExtensionApp.stop_extensionN)r   r   )r   rB   )__name__
__module____qualname____doc__r*   r   r   tagr   __annotations__r   r    r   rA   rD   rL   rM   r   r   r   r   r      s   
 





r   )rQ   
__future__r   r)   r/   r2   typingtshutilr   jupyter_core.utilsr   $jupyter_server.extension.applicationr   jupyter_server.transutilsr   	traitletsr    r
   r   terminalmanagerr   r   r   r   r   r   <module>   s    