
    dS                         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e	          ZdS )A terminals extension app.    N)which)ensure_async)ExtensionApp)trans)Type   )api_handlershandlers)TerminalManagerc                       e Zd ZdZdZ eed                              d          ZdZ	d Z
d	 Zd
 Zd Zd Zd ZdS )TerminalsExtensionAppr   jupyter_server_terminalsz"The terminal manager class to use.)default_valuehelpT)configFc                 r    |                                   | j                            d| j        d           dS )zInitialize settings.T)terminals_availableterminal_managerN)initialize_configurablessettingsupdater   selfs    <lib/python3.11/site-packages/jupyter_server_terminals/app.pyinitialize_settingsz)TerminalsExtensionApp.initialize_settings"   sF    %%'''$(d>STT	
 	
 	
 	
 	
    c                 N   t           j        dk    rd}nt          d          }| j        j                            d          }t          |t                    rt          j	        |          }|"t           j
                            d          p|gn|}t           j        dk    r5|3t          j                                        s|                    d           |                     || j        j        | j        j        d| j        	          | _        | 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shells       r   r   z.TerminalsExtensionApp.initialize_configurables)   s   7d??,MM!$KKM:>>OOnc** 	9"[88N:H:PRZ^^G$$566Vd 	 7d??~5cj>O>O>Q>Q5LL $ ; ;'+~'>&*n&C  > !< !
 !
 %)N$6!!!r   c                    | 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   r4   
TermSocketr   extendr
   default_handlersr)   web_appr   r   s    r   initialize_handlersz)TerminalsExtensionApp.initialize_handlersG   s    -#!67	
 	
 	
 	\:;;;>B>S'(:;AE!B
'(=>>>r   c                 8    | j         r| j        j        }|r|S dS dS )zGet current activity info.N)r   r   	terminals)r   rD   s     r   current_activityz&TerminalsExtensionApp.current_activityV   s:    # 	!-7I !  	! 	!! !r   c                    K   | j         sdS | j        }t          |                                          }t	          j        dd|          }| j                            ||z             t          |	                                           d{V  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   ngettextr8   infor   terminate_all)r   r   n_terminalsterminal_msgs       r   cleanup_terminalsz'TerminalsExtensionApp.cleanup_terminals]   s       ' 	F0*//1122~')E{
 
 	l[0111+99;;<<<<<<<<<<<r   c                 >   K   |                                   d{V  dS )zStop the extension.N)rN   r   s    r   stop_extensionz$TerminalsExtensionApp.stop_extensionn   s0      $$&&&&&&&&&&&r   N)__name__
__module____qualname____doc__r(   r   r   tagr5   r   r   r   rB   rE   rN   rP    r   r   r   r      s        $$%D!T%,P  	cc   
 
 
7 7 7<
 
 
! ! != = ="' ' ' ' 'r   r   )rT   r'   r.   r1   shutilr   jupyter_core.utilsr   $jupyter_server.extension.applicationr   jupyter_server.transutilsr   	traitletsr    r
   r   terminalmanagerr   r   rV   r   r   <module>r^      s        				  



       + + + + + + = = = = = = + + + + + +       $ $ $ $ $ $ $ $ , , , , , ,`' `' `' `' `'L `' `' `' `' `'r   