
    @=d*                     ^   d 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
mZmZmZmZmZ ddlmZ dd	lmZ 	 	 d'dZd(dZi Ze                    e
j                   e                    dd           e                    dd           e                    ddd
iidfddddidfddd
iidfddd
iidfd           ed         ed<    G d de
          Z G d de          Z G d de          Z G d  d!e
          Zd"Z G d# d$e
          Zej        Z d% Z!e"d&k    r e              dS dS ))z;Utilities for installing server extensions for the notebook    N)jupyter_config_path   )__version__)BaseJSONConfigManager)BaseExtensionApp_get_config_dirGREEN_ENABLEDRED_DISABLEDGREEN_OKRED_X)Bool)import_itemTFc                 
   |rdn|}t          ||          }t          ||          }|                    d          }|                    di                               di           }	|	                    | d          }
||n|
 }|r3|r|                    d|             n|                    d	|             ||	| <   |r|                    d
|            |                    d|           |rt          | |           dS dS )av  Toggle a server extension.

    By default, toggles the extension in the system-wide Jupyter configuration
    location (e.g. /usr/local/etc/jupyter).

    Parameters
    ----------

    import_name : str
        Importable Python module (dotted-notation) exposing the magic-named
        `load_jupyter_server_extension` function
    enabled : bool [default: None]
        Toggle state for the extension.  Set to None to toggle, True to enable,
        and False to disable the extension.
    parent : Configurable [default: None]
    user : bool [default: True]
        Toggle in the user's configuration location (e.g. ~/.jupyter).
    sys_prefix : bool [default: False]
        Toggle in the current Python environment's configuration location
        (e.g. ~/.envs/my-env/etc/jupyter). Will override `user`.
    logger : Jupyter logger [optional]
        Logger instance to use
    Fuser
sys_prefixparent
config_dirjupyter_notebook_configNotebookAppnbserver_extensionsNz
Enabling: zDisabling: z- Writing config: )r   r   get
setdefaultinfoupdatevalidate_serverextension)import_nameenabledr   r   r   loggerr   cmcfgserver_extensionsold_enablednew_enableds               :lib/python3.11/site-packages/nbclassic/serverextensions.pytoggle_serverextension_pythonr'      sI   2 (55DD dzBBBJ	f	D	D	DB
&&*
+
+C}b))	)2	.	. 
 $''T::K$0''+oK 5 	5KK2[223333KK3k33444%0k" 7555666II'--- 6 f555556 6    c                 d   g }g }d}r                     d           	 t          j        |           }t          |dd          }t          |dd          }n&# t          $ r                     d|            Y nw xY wd}|/|                    |                    t          |                      n.|                    |                    t          |                      d}rN|rfd	|D              fd
|D              n/                     |                    | |t                               |S )a\  Assess the health of an installed server extension

    Returns a list of validation warnings.

    Parameters
    ----------

    import_name : str
        Importable Python module (dotted-notation) exposing the magic-named
        `load_jupyter_server_extension` function
    logger : Jupyter logger [optional]
        Logger instance to use
    Nz    - Validating...load_jupyter_server_extensionr    z!Error loading server extension %sz     {} is {} importable?z      {} {} {}c                 :    g | ]}                     |          S  )r   ).0r   r    s     r&   
<listcomp>z,validate_serverextension.<locals>.<listcomp>t   s%    1114V[[111r(   c                 :    g | ]}                     |          S r-   )warn)r.   warningr    s     r&   r/   z,validate_serverextension.<locals>.<listcomp>u   s%    :::gV[[!!:::r(   )
r   	importlibimport_modulegetattr	Exceptionr2   appendformatr   r   )	r   r    warningsinfosfuncmodversion
import_msgpost_mortems	    `       r&   r   r   M   so    HED +)***I%k22s;TBB#}b11 I I I:KHHHHHI -JZ&&x==>>>>
))%==>>>"K L 	L111151111:::::::::KK**;JJKKKOs   6A  A:9A:yzgenerate-configToggleServerExtensionAppr   z*Perform the operation for the current userr   z!Perform the operation system-wider   z=Use sys.prefix as the prefix for installing server extensionspythonInstall from a Python package)r   systemz
sys-prefixpyrE   c                       e Zd ZdZdZdZeZ eddd          Z eddd          Z	 eddd	          Z
d
 Zd Zd ZdS )rA   z.A base class for enabling/disabling extensionsz0jupyter nbclassic-serverextension enable/disablezEEnable/disable a server extension using frontend configuration files.TzWhether to do a user install)confighelpFz Use the sys.prefix as the prefixrC   c                 X    t          || j        | | j        | j        | j                   dS )a.  Change the status of a named server extension.

        Uses the value of `self._toggle_value`.

        Parameters
        ---------

        import_name : str
            Importable Python module (dotted-notation) exposing the magic-named
            `load_jupyter_server_extension` function
        )r   r   r   r    N)r'   _toggle_valuer   r   log)selfr   s     r&   toggle_server_extensionz0ToggleServerExtensionApp.toggle_server_extension   s<     	&+Dtytx	9 	9 	9 	9 	9 	9r(   c                 n    t          |          \  }}|D ]}|d         }|                     |            dS )a,  Change the status of some server extensions in a Python package.

        Uses the value of `self._toggle_value`.

        Parameters
        ---------

        package : str
            Importable Python module exposing the
            magic-named `_jupyter_server_extension_paths` function
        moduleN)_get_server_extension_metadatarM   )rL   packagemserver_exts
server_extrO   s         r&   toggle_server_extension_pythonz7ToggleServerExtensionApp.toggle_server_extension_python   sO     8@@;% 	1 	1J)F((0000	1 	1r(   c                     | j         st          j        d           | j         D ]4}| j        r|                     |           |                     |           5dS )'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitrB   rU   rM   )rL   args     r&   startzToggleServerExtensionApp.start   sq     	WHUVVV? 	2 	2C{ 233C8888,,S1111		2 	2r(   N)__name__
__module____qualname____doc__namedescriptionflagsr   r   r   rB   rM   rU   r\   r-   r(   r&   rA   rA      s        88=DYKE4T(FGGGDeD/QRRRJT%+JKKKF9 9 9 1 1 1"2 2 2 2 2r(   c                       e Zd ZdZdZdZdZdS )EnableServerExtensionAppz5An App that enables (and validates) Server Extensionsz(jupyter nbclassic-serverextension enablez
    Enable a serverextension in configuration.

    Usage
        jupyter nbclassic-serverextension enable [--system|--sys-prefix]
    TNr]   r^   r_   r`   ra   rb   rJ   r-   r(   r&   re   re      s'        ??5DK MMMr(   re   c                       e Zd ZdZdZdZdZdS )DisableServerExtensionAppz&An App that disables Server Extensionsz)jupyter nbclassic-serverextension disablez
    Disable a serverextension in configuration.

    Usage
        jupyter nbclassic-serverextension disable [--system|--sys-prefix]
    FNrf   r-   r(   r&   rh   rh      s'        006DK MMMr(   rh   c                   *    e Zd ZdZdZeZdZd Zd Z	dS )ListServerExtensionsAppz3An App that lists (and validates) Server Extensionsz&jupyter nbclassic-serverextension listz<List all server extensions known by the configuration systemc                    t                      }|D ]}t          | |          }|                    d          }|                    di                               di           }|rt	          d|            |                                D ]=\  }}t	          d| d|rt          nt                      t          || j	                   >dS )	zList all enabled and disabled server extensions, by config path

        Enabled extensions are validated, potentially generating warnings.
        r   r   r   r   zconfig dir: z     N)
r   r   r   r   printitemsr	   r
   r   rK   )rL   config_dirsr   r!   datar#   r   r   s           r&   list_server_extensionsz.ListServerExtensionsApp.list_server_extensions   s    
 *++% 	@ 	@J&dzJJJB66344Dr221266  ! 31Z11222(9(?(?(A(A @ @$WW[WWG+U==WWXXX(dh????@	@ 	@r(   c                 .    |                                   dS )rW   N)rq   )rL   s    r&   r\   zListServerExtensionsApp.start  s    ##%%%%%r(   N)
r]   r^   r_   r`   ra   r   r=   rb   rq   r\   r-   r(   r&   rj   rj      sJ        ==3DGPK@ @ @&& & & & &r(   rj   aJ  
jupyter nbclassic-serverextension list                        # list all configured server extensions
jupyter nbclassic-serverextension enable --py <packagename>   # enable all server extensions in a Python package
jupyter nbclassic-serverextension disable --py <packagename>  # disable all server extensions in a Python package
c                   Z     e Zd ZdZdZeZdZeZ	 e
edfedfedf          Z fdZ xZS )	ServerExtensionAppzRoot level server extension appz!jupyter nbclassic-serverextensionz#Work with Jupyter server extensionszEnable a server extensionzDisable a server extensionzList server extensions)enabledisablelistc                     t                                                       d                    t          | j                            }t          j        d|            dS )rW   z, z'Please supply at least one subcommand: N)superr\   joinsortedsubcommandsrY   rZ   )rL   subcmds	__class__s     r&   r\   zServerExtensionApp.start  sQ     ))F4#34455D7DDEEEEEr(   )r]   r^   r_   r`   ra   r   r=   rb   	_examplesexamplesdictre   rh   rj   r|   r\   __classcell__)r~   s   @r&   rt   rt     s        )).DG7KH$(*EF*,HI%'?@  KF F F F F F F F Fr(   rt   c                     t          |           }t          |d          st          d|  d          ||                                fS )a  Load server extension metadata from a module.

    Returns a tuple of (
        the package as loaded
        a list of server extension specs: [
            {
                "module": "mockextension"
            }
        ]
    )

    Parameters
    ----------

    module : str
        Importable Python module exposing the
        magic-named `_jupyter_server_extension_paths` function
    _jupyter_server_extension_pathszThe Python module z- does not include any valid server extensions)r   hasattrKeyErrorr   )rO   rR   s     r&   rP   rP   0  sV    & 	FA1788 caFaaabbba//1111r(   __main__)NNTFN)N)#r`   r3   rY   jupyter_core.pathsr   _versionr   config_managerr   
extensionsr   r   r	   r
   r   r   	traitletsr   traitlets.utils.importstringr   r'   r   rc   r   poprA   re   rh   rj   r   rt   launch_instancemainrP   r]   r-   r(   r&   <module>r      s   A A
     



 2 2 2 2 2 2 ! ! ! ! ! ! 1 1 1 1 1 1                      4 4 4 4 4 4 EIFJ36 36 36 36l, , , ,f 	 # $ $ $ 		#t    		
T " " " "T&
 9 	#&
 &
 0	 	#4&
 L 	#t&
 ,#    . +h42 42 42 42 42/ 42 42 42n	 	 	 	 	7 	 	 		 	 	 	 	 8 	 	 	& & & & &. & & &<	F F F F F) F F F. )2 2 20 zDFFFFF r(   