o
    tfx                     @  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   Z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   e/var/www/html/software/conda/envs/catlas/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)ZJUPYTER_SERVER_ROOTZJUPYTER_SERVER_URL)r"   Z	extra_envparent)osnamer   r   Zterminado_settingsget
isinstancestrshlexsplitenvironsysstdoutisattyappendr   root_dirZconnection_urlr   log)r   Zdefault_shellZ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+)Zterm_managerr   )r   r   r   Zweb_appr   r0   Z
TermSocketr   extendr
   Z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   r7   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   ngettextr2   infor   Zterminate_all)r   r   Zn_terminalsZterminal_msgr   r   r   cleanup_terminalsm   s   z'TerminalsExtensionApp.cleanup_terminalsc                   s   |   I dH  dS )zStop the extension.N)r=   r   r   r   r   stop_extension~   s   z$TerminalsExtensionApp.stop_extensionN)r   r   )r   r6   )__name__
__module____qualname____doc__r&   r   r   tagr   __annotations__r   r   r   r5   r8   r=   r>   r   r   r   r   r      s   
 



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