o
    iS                     @   s   d 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.    N)which)ensure_async)ExtensionApp)trans)Type   )api_handlershandlers)TerminalManagerc                   @   s\   e Zd ZdZdZeeddjddZdZ	dd	 Z
d
d Zdd Zdd Zdd Zdd ZdS )TerminalsExtensionAppr   jupyter_server_terminalsz"The terminal manager class to use.)default_valuehelpT)configFc                 C   s    |    | jd| jd dS )zInitialize settings.T)terminals_availableterminal_managerN)initialize_configurablessettingsupdater   self r   W/var/www/edux/Edux_v2/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jd}t|trt	|}|du r*t j
dp(|gn|}t jdkr?|du r?tj s?|d | j|| jj| jjd| jd	| _| jj| j_dS )
zInitialize configurables.ntzpowershell.exeshshell_commandNSHELLz-l)JUPYTER_SERVER_ROOTJUPYTER_SERVER_URL)r   	extra_envparent)osnamer   	serverappterminado_settingsget
isinstancestrshlexsplitenvironsysstdoutisattyappendterminal_manager_classroot_dirconnection_urlr   log)r   default_shellshell_overrideshellr   r   r   r   )   s$   



z.TerminalsExtensionApp.initialize_configurablesc                 C   sP   | j dt jd| jif | j tj | j| jjj	d< | j	d | jjj	d< dS )zInitialize handlers.z/terminals/websocket/(\w+)term_managerr   r   N)
r
   r0   
TermSocketr   extendr	   default_handlersr%   web_appr   r   r   r   r   initialize_handlersG   s   z)TerminalsExtensionApp.initialize_handlersc                 C   s   | j r| jj}|r|S dS dS )zGet current activity info.N)r   r   	terminals)r   r>   r   r   r   current_activityV   s   z&TerminalsExtensionApp.current_activityc                    sR   | j sdS | j}t| }tdd|}| j||  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 terminals)
r   r   lenlistr   ngettextr4   infor   terminate_all)r   r   n_terminalsterminal_msgr   r   r   cleanup_terminals]   s   z'TerminalsExtensionApp.cleanup_terminalsc                    s   |   I dH  dS )zStop the extension.N)rG   r   r   r   r   stop_extensionn   s   z$TerminalsExtensionApp.stop_extensionN)__name__
__module____qualname____doc__r$   r   r   tagr1   r   r   r   r=   r?   rG   rH   r   r   r   r   r      s    r   )rL   r#   r*   r-   shutilr   jupyter_core.utilsr   $jupyter_server.extension.applicationr   jupyter_server.transutilsr   	traitletsr    r	   r
   terminalmanagerr   r   r   r   r   r   <module>   s    