
    Mh?                        d 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	m
Z
mZmZmZmZmZmZmZ ddlmZ ddlmZ d	d
lmZ d	dlmZmZmZmZ  G d de          Z G d de          Z G d de          ZdS )zThe extension manager.    )annotationsN)starmap)multi)	AnyBoolDict	HasTraitsInstanceListUnicodedefaultobservevalidate)LoggingConfigurable   )ExtensionConfigManager)ExtensionMetadataErrorExtensionModuleNotFound
get_loaderget_metadatac                  ,   e Zd ZdZ ed          Z edd          Z e            Z	 e
d          d             Zed             Zed	             Zed
             Zed             Zed             Zed             Zd Zd Zd Zd Zd Zd Zd ZdS )ExtensionPointzA simple API for connecting to a Jupyter Server extension
    point defined by metadata and importable from a Python package.
    FNT
allow_nonemetadatac                8   |d         }	 |d         | _         n # t          $ r d}t          |          dw xY w	 t          j        | j                   | _        n)# t          $ r d| j          d}t          |          dw xY wd|v r |d                     | _        |S )zValidate metadata.valuemodulez<There is no 'module' key in the extension's metadata packet.NzThe submodule 'z>' could not be found. Are you sure the extension is installed?app)	_module_nameKeyErrorr   	importlibimport_module_moduleImportErrorr   _app)selfproposedr   msgs       `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyter_server/extension/manager.py_valid_metadatazExtensionPoint._valid_metadata   s     G$	8 ( 2D 	8 	8 	8PC(--47	8	9$243DEEDLL 	9 	9 	93$"3 3 3 3  *#..D8	9 H'))DIs    5A &A>c                6    | j         r| j         j        S | j        S )zHas this extension point been linked to the server.

        Will pull from ExtensionApp's trait, if this point
        is an instance of ExtensionApp.
        )r    _linkedr(   s    r+   linkedzExtensionPoint.linked3   s!     8 	$8##|    c                    | j         S )z'If the metadata includes an `app` field)r'   r/   s    r+   r    zExtensionPoint.app>   s     yr1   c                F    | j         r| j                                         S i S )z:Return any configuration provided by this extension point.)r    _jupyter_server_configr/   s    r+   configzExtensionPoint.configC   s)     8 	822444 Ir1   c                    | j         S )zuName of the Python package module where the extension's
        _load_jupyter_server_extension can be found.
        )r!   r/   s    r+   module_namezExtensionPoint.module_nameM   s    
   r1   c                h    | j         r| j         j        S | j                            d| j                  S )zName of the extension.

        If it's not provided in the metadata, `name` is set
        to the extensions' module name.
        name)r    r9   r   getr7   r/   s    r+   r9   zExtensionPoint.nameT   s3     8 	!8= }  )9:::r1   c                    | j         S )z3The imported module (using importlib.import_module))r%   r/   s    r+   r   zExtensionPoint.module_   s     |r1   c                \    | j         r| j         j        }nt          | j        dd           }|S )zGet a linker._link_jupyter_server_extensionc                    d S N 	serverapps    r+   <lambda>z,ExtensionPoint._get_linker.<locals>.<lambda>n   s    $ r1   )r    r=   getattrr   )r(   linkers     r+   _get_linkerzExtensionPoint._get_linkerd   s<    8 		X<FF0&& F r1   c                D    | j         }|s| j        }t          |          }|S )zGet a loader.)r    r   r   )r(   locloaders      r+   _get_loaderzExtensionPoint._get_loaderr   s(    h 	+CCr1   c                `    | j         r| j         j        }nd }t          | j        d|          }|S )zGet a starter function.c                
   K   d S r?   r@   rA   s    r+   _noop_startz0ExtensionPoint._get_starter.<locals>._noop_start   s      r1   _start_jupyter_server_extension)r    rN   rD   r   )r(   rE   rM   s      r+   _get_starterzExtensionPoint._get_starterz   sJ    8 	X=FF   1 F r1   c                z    	 |                                   |                                  dS # t          $ r Y dS w xY w)z+Check that both a linker and loader exists.TF)rF   rJ   	Exceptionr/   s    r+   r   zExtensionPoint.validate   sV    	 4  	 	 	55	s   (, 
::c                d    | j         s(|                                 } ||           d| _        dS dS )zLink the extension to a Jupyter ServerApp object.

        This looks for a `_link_jupyter_server_extension` function
        in the extension's module or ExtensionApp class.
        TN)r0   rF   r.   )r(   rB   rE   s      r+   linkzExtensionPoint.link   sD     { 	 %%''FF9DLLL		  	 r1   c                @    |                                  } ||          S )zLoad the extension in a Jupyter ServerApp object.

        This looks for a `_load_jupyter_server_extension` function
        in the extension's module or ExtensionApp class.
        )rJ   )r(   rB   rI   s      r+   loadzExtensionPoint.load   s%     !!##vi   r1   c                P   K   |                                  } ||           d{V S )zCall's the extensions 'start' hook where it can
        start (possibly async) tasks _after_ the event loop is running.
        N)rO   )r(   rB   starters      r+   startzExtensionPoint.start   s;       ##%%WY'''''''''r1   )__name__
__module____qualname____doc__r   r.   r   r'   r   r   validate_traitr,   propertyr0   r    r5   r7   r9   r   rF   rJ   rO   r   rS   rU   rX   r@   r1   r+   r   r      s{         d5kkG3t%%%DtvvH^J   .   X   X   X ! ! X! ; ; X;   X      $  
  
  
 ! ! !( ( ( ( (r1   r   c                  0    e Zd ZdZ ed          Z edd          Z e            Z	 e            Z
 edd          Z e e            d	          Z ed
          Z ed          d             Z fdZd Zd Zd Zd Zd Zd Zd Zd Z xZS )ExtensionPackagezAn API for interfacing with a Jupyter Server extension package.

    Usage:

    ext_name = "my_extensions"
    extpkg = ExtensionPackage(name=ext_name)
    z)Name of the an importable Python package.helpFz)Whether the extension package is enabled.Tz:The module for this extension package. None if not enabled)r   rb   z5Extension metadata loaded from the extension package.z|
            The version of this extension package, if it can be found.
            Otherwise, an empty string.
            versionc                @    | j         sdS t          | j        dd          S )N __version__)enabledrD   r   r/   s    r+   _load_versionzExtensionPackage._load_version   s%    | 	2t{M2666r1   c                t     t                      j        di | | j        r|                                  dS dS )z Initialize an extension package.Nr@   )super__init__rg   _load_metadata)r(   kwargs	__class__s     r+   rk   zExtensionPackage.__init__   sL    ""6"""< 	"!!!!!	" 	"r1   c                   | j         }	 t          || j                  \  | _        | _        n+# t
          $ r}d| d| d}t          |          dd}~ww xY w| j        D ]!}t          |          }|| j        |j         <   "|S )z\Import package and load metadata

        Only used if extension package is enabled
        )loggerzThe module 'z' could not be found (z+). Are you sure the extension is installed?N)r   )	r9   r   logr   r   r&   r   r   extension_points)r(   r9   er*   mpoints         r+   rl   zExtensionPackage._load_metadata   s    
 y	9)5d48)L)L)L&DK 	9 	9 	93t 3 31 3 3 3  *#..D8	9  	6 	6A"A...E05D!%*--s   #- 
AAAc                b    t          d | j                                        D                       S )z.Validate all extension points in this package.c              3  >   K   | ]}|                                 V  d S r?   r   ).0	extensions     r+   	<genexpr>z,ExtensionPackage.validate.<locals>.<genexpr>   s.      XXI9%%''XXXXXXr1   )allrr   valuesr/   s    r+   r   zExtensionPackage.validate   s.    XX9N9U9U9W9WXXXXXXr1   c                    | j                             |d          }|s$| j        |         }|                    |           dS dS )zLink an extension point.FN)_linked_pointsr:   rr   rS   )r(   
point_namerB   r0   ru   s        r+   
link_pointzExtensionPackage.link_point   sQ    $((U;; 	")*5EJJy!!!!!	" 	"r1   c                F    | j         |         }|                    |          S )Load an extension point.)rr   rU   r(   r   rB   ru   s       r+   
load_pointzExtensionPackage.load_point   s!    %j1zz)$$$r1   c                V   K   | j         |         }|                    |           d{V S )r   N)rr   rX   r   s       r+   start_pointzExtensionPackage.start_point   s7      %j1[[+++++++++r1   c                F    | j         D ]}|                     ||           dS )zLink all extension points.N)rr   r   r(   rB   r   s      r+   link_all_pointsz ExtensionPackage.link_all_points   s5    / 	3 	3JOOJ	2222	3 	3r1   c                .      fd j         D             S )Load all extension points.c                <    g | ]}                     |          S r@   )r   )rx   r   r(   rB   s     r+   
<listcomp>z4ExtensionPackage.load_all_points.<locals>.<listcomp>  s'    ___:
I66___r1   )rr   )r(   rB   s   ``r+   load_all_pointsz ExtensionPackage.load_all_points  s$    _____I^____r1   c                V   K   | j         D ]}|                     ||           d{V  dS )r   N)rr   r   r   s      r+   start_all_pointsz!ExtensionPackage.start_all_points  sM      / 	: 	:J"":y9999999999	: 	:r1   )rY   rZ   r[   r\   r   r9   r   rg   r   r~   rr   r   r   r   r   rc   r   rh   rk   rl   r   r   r   r   r   r   r   __classcell__)rn   s   @r+   r`   r`      sr         7CDDDDd5JKKKGTVVNtvvSD'cdddFtDDFF!XYYYHg  G WY7 7 7
" " " " "  (Y Y Y" " "% % %
, , ,
3 3 3
` ` `: : : : : : :r1   r`   c                  R   e Zd ZdZ eed          Z e            Z e	d          d             Z
 ed          d             Z ed          Zed	             Z ed
          Zed             Zed             Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Z dS )ExtensionManagerzHigh level interface for finding, validating,
    linking, loading, and managing Jupyter Server extensions.

    Usage:
    m = ExtensionManager(config_manager=...)
    Tr   config_managerc                L    t                      }|                     |           |S r?   )r   _load_config_managerr(   r   s     r+   _load_default_config_managerz-ExtensionManager._load_default_config_manager  s'    /11!!.111r1   c                L    |j         r|                     |j                    d S d S r?   )newr   )r(   changes     r+   _config_manager_changedz(ExtensionManager._config_manager_changed   s2    : 	2%%fj11111	2 	2r1   zq
        Dictionary with extension package names as keys
        and ExtensionPackage objects as values.
        ra   c                h    t          t          | j                                                            S )z8Returns an extensions dictionary, sorted alphabetically.)dictsorted
extensionsitemsr/   s    r+   sorted_extensionsz"ExtensionManager.sorted_extensions0  s(     F4?002233444r1   z|
        Dictionary with extension names as keys

        values are True if the extension is linked, False if not.
        c                H    d | j                                         D             S )zCReturn mapping of extension names and sets of ExtensionApp objects.c                \    i | ])\  }}|d  |j                                         D             *S )c                *    h | ]}|j         	|j         S r@   )r    )rx   ru   s     r+   	<setcomp>z=ExtensionManager.extension_apps.<locals>.<dictcomp>.<setcomp>E  s#    [[[QVQZ[59[[[r1   )rr   r|   )rx   r9   ry   s      r+   
<dictcomp>z3ExtensionManager.extension_apps.<locals>.<dictcomp>D  sL     
 
 
i [[)*D*K*K*M*M[[[
 
 
r1   )r   r   r/   s    r+   extension_appszExtensionManager.extension_appsA  s1    
 
#'?#8#8#:#:
 
 
 	
r1   c                H    d | j                                         D             S )zCReturn mapping of extension point names and ExtensionPoint objects.c                R    i | ]$}|j                                         D ]\  }}||	%S r@   )rr   r   )rx   r   r9   ru   s       r+   r   z5ExtensionManager.extension_points.<locals>.<dictcomp>L  sT     
 
 
$5;;==
 
 e %
 
 
 
r1   )r   r|   r/   s    r+   rr   z!ExtensionManager.extension_pointsI  s1    
 
//11
 
 
 	
r1   c                    || _         dS )z1Add extensions found by an ExtensionConfigManagerN)r   r   s     r+   from_config_managerz$ExtensionManager.from_config_managerR  s     -r1   c                X    |                                 }|                     |           dS )z Actually load our config managerN)get_jpserver_extensionsfrom_jpserver_extensions)r(   r   jpserver_extensionss      r+   r   z%ExtensionManager._load_config_managerW  s/    ,DDFF%%&9:::::r1   c                h    |                                 D ]\  }}|                     ||           dS )z:Add extensions from 'jpserver_extensions'-like dictionary.)rg   N)r   add_extension)r(   r   r9   rg   s       r+   r   z)ExtensionManager.from_jpserver_extensions\  sG    06688 	6 	6MD'tW5555	6 	6r1   Fc                    	 t          ||          }|| j        |<   dS # t          $ r=}| j        r| j        j        r | j                            d|||d           Y d}~nd}~ww xY wdS )zeTry to add extension to manager, return True if successful.
        Otherwise, return False.
        )r9   rg   Tz-%s | error adding extension (enabled: %s): %sexc_infoNF)r`   r   rQ   rB   !reraise_server_extension_failuresrq   warning)r(   extension_namerg   extpkgrs   s        r+   r   zExtensionManager.add_extensiona  s    	%>7KKKF.4DON+4 		 		 		~ $."R H?         		 us    
A&3A!!A&c                   | j                             |d          }| j        |         }|s|j        r	 |                    | j                   d| j         |<   | j                            d|           dS # t          $ r=}| j        r| j        j	        r | j        
                    d||d           Y d}~dS d}~ww xY wdS dS )zLink an extension by name.FTz'%s | extension was successfully linked.z %s | error linking extension: %sr   N)linked_extensionsr:   r   rg   r   rB   rq   inforQ   r   r   )r(   r9   r0   ry   rs   s        r+   link_extensionzExtensionManager.link_extensionv  s   '++D%88OD)	 		])+ 		]]))$.999/3&t,GNNNNN ] ] ]> dn&V   !CT1W[ \\\\\\\\\]		] 		] 		] 		]s   ?A4 4
B;>2B66B;c                T   | j                             |          }|r|j        r	 |                    | j                   | j                            d|           dS # t          $ r=}| j        r| j        j        r | j        	                    d||d           Y d}~dS d}~ww xY wdS dS )zLoad an extension by name.z'%s | extension was successfully loaded.z.%s | extension failed loading with message: %rTr   N)
r   r:   rg   r   rB   rq   r   rQ   r   r   r(   r9   ry   rs   s       r+   load_extensionzExtensionManager.load_extension  s    O''--	 
	O* 
	O	O))$.999 GNNNNN    > dn&V   DdAX\ !         
	O 
	O 
	O 
	Os   A 
B#&2BB#c                d  K   | j                             |          }|r|j        r	 |                    | j                   d{V  | j                            d|           dS # t          $ r=}| j        r| j        j        r | j        	                    d||d           Y d}~dS d}~ww xY wdS dS )zStart an extension by name.Nz(%s | extension was successfully started.z/%s | extension failed starting with message: %rTr   )
r   r:   rg   r   rB   rq   debugrQ   r   r   r   s       r+   start_extensionz ExtensionManager.start_extension  s     O''--	 
	Q* 
	Q	Q00@@@@@@@@@ I4PPPPP    > dn&V   EtQY] !         
	Q 
	Q 
	Q 
	Qs    A$ $
B+.2B&&B+c                   K   |D ]^}| j                             d||j                   |                                 d{V  | j                             d||j                   _dS )z.Call the shutdown hooks in the specified apps.z%s | extension app %r stoppingNz%s | extension app %r stopped)rq   r   r9   stop_extension)r(   r9   appsr    s       r+   r   zExtensionManager.stop_extension  s       	L 	LCHNN;T38LLL$$&&&&&&&&&HNN:D#(KKKK	L 	Lr1   c                D    | j         D ]}|                     |           dS )zHLink all enabled extensions
        to an instance of ServerApp
        N)r   r   r(   r9   s     r+   link_all_extensionsz$ExtensionManager.link_all_extensions  7     * 	& 	&D%%%%	& 	&r1   c                D    | j         D ]}|                     |           dS )zULoad all enabled extensions and append them to
        the parent ServerApp.
        N)r   r   r   s     r+   load_all_extensionsz$ExtensionManager.load_all_extensions  r   r1   c                X    K   t           fd j        D                        d{V  dS )zStart all enabled extensions.c                :    g | ]}                     |          S r@   )r   )rx   r9   r(   s     r+   r   z9ExtensionManager.start_all_extensions.<locals>.<listcomp>  s'    SSSDT))$//SSSr1   N)r   r   r/   s   `r+   start_all_extensionsz%ExtensionManager.start_all_extensions  sG       SSSSD<RSSSTTTTTTTTTTTr1   c                   K   t          t          t          | j        t	          t          | j                                                                                           d{V  dS )z*Call the shutdown hooks in all extensions.N)r   listr   r   r   r   r   r   r/   s    r+   stop_all_extensionsz$ExtensionManager.stop_all_extensions  s`      D!4fT$BU=V=V=\=\=^=^6_6_``aabbbbbbbbbbbr1   c                    t          t          | j                                                            D ]"\  }}|D ]}|                                r  dS #dS )zMCheck for any activity currently happening across all extension applications.TN)r   r   r   r   current_activity)r(   _r   r    s       r+   any_activityzExtensionManager.any_activity  st    d4#677==??@@ 	  	 GAt    ''))  444  	  	 r1   N)F)!rY   rZ   r[   r\   r
   r   r   r   rB   r   r   r   r   r   r   r^   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   r1   r+   r   r     s         X4FFFNIW  
 W2 2 2   J 5 5 X5    
 
 X
 
 
 X
- - -
; ; ;
6 6 6
   *] ] ]O O O Q Q Q L L L& & && & &U U Uc c c         r1   r   ) r\   
__future__r   r#   	itertoolsr   tornado.genr   	traitletsr   r   r   r	   r
   r   r   r   r   r   r]   traitlets.configr   r5   r   utilsr   r   r   r   r   r`   r   r@   r1   r+   <module>r      s     " " " " " "                 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 0 0 0 0 0 0 0 0 0 0 0 0 * * * * * * \ \ \ \ \ \ \ \ \ \ \ \_( _( _( _( _(Y _( _( _(DX: X: X: X: X:* X: X: X:v         *          r1   