o
    i*                     @   sz  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dZd+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 de
ZG dd deZG d d! d!eZG d"d# d#e
Zd$ZG d%d& d&e
ZejZ d'd( Z!e"d)kre   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                 C   s   |rdn|}t ||d}t||d}|d}|di di }	|	| d}
|dur-|n|
 }|rE|r=|d|   n|d	|   ||	| < |rS|d
|  |d| |rbt| | 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_enabled r$   T/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/serverextensions.pytoggle_serverextension_python   s(   

r&   c           	         s   g }g }d} r  d zt| }t|dd}t|dd}W n ty/    d|  Y nw d}|dur@||t|  n	||t	|  d} rm|rc fd	d
|D   fdd
|D  |S   || |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 | ]}  |qS r$   )r   ).0r   r   r$   r%   
<listcomp>t       z,validate_serverextension.<locals>.<listcomp>c                    r)   r$   )warn)r*   warningr+   r$   r%   r,   u   r-   )
r   	importlibimport_modulegetattr	Exceptionr/   appendformatr
   r   )	r   r   warningsinfosfuncmodversion
import_msgpost_mortemr$   r+   r%   r   M   s0   

r   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pyrB   c                   @   s^   e Zd ZdZdZdZeZeddddZeddddZ	eddd	dZ
d
d Zdd Zdd ZdS )r>   z.A base class for enabling/disabling extensionsz&jupyter 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 prefixr@   c                 C   s    t || j| | j| j| jd 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   r$   r$   r%   toggle_server_extension   s   
z0ToggleServerExtensionApp.toggle_server_extensionc                 C   s,   t |\}}|D ]}|d }| | q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_metadatarH   )rG   packagemserver_exts
server_extrI   r$   r$   r%   toggle_server_extension_python   s
   z7ToggleServerExtensionApp.toggle_server_extension_pythonc                 C   s<   | j std | j D ]}| jr| | q| | qdS )'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitr?   rO   rH   )rG   argr$   r$   r%   start   s   

zToggleServerExtensionApp.startN)__name__
__module____qualname____doc__namedescriptionflagsr   r   r   r?   rH   rO   rU   r$   r$   r$   r%   r>      s    c                   @      e Zd ZdZdZdZdZdS )EnableServerExtensionAppz5An App that enables (and validates) Server Extensionszjupyter serverextension enablez~
    Enable a serverextension in configuration.

    Usage
        jupyter serverextension enable [--system|--sys-prefix]
    TNrV   rW   rX   rY   rZ   r[   rE   r$   r$   r$   r%   r^      
    r^   c                   @   r]   )DisableServerExtensionAppz&An App that disables Server Extensionszjupyter serverextension disablez
    Disable a serverextension in configuration.

    Usage
        jupyter serverextension disable [--system|--sys-prefix]
    FNr_   r$   r$   r$   r%   ra      r`   ra   c                   @   s,   e Zd ZdZdZeZdZdd Zdd Z	dS )	ListServerExtensionsAppz3An App that lists (and validates) Server Extensionszjupyter serverextension listz<List all server extensions known by the configuration systemc                 C   s   t  }|D ]=}t| |d}|d}|di di }|r%td|  | D ]\}}td| d|r6tnt  t|| j	 q)q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   rF   )rG   config_dirsr   r   datar!   r   r   r$   r$   r%   list_server_extensions   s   

z.ListServerExtensionsApp.list_server_extensionsc                 C   s   |    dS )rP   N)rh   )rG   r$   r$   r%   rU     s   zListServerExtensionsApp.startN)
rV   rW   rX   rY   rZ   r   r:   r[   rh   rU   r$   r$   r$   r%   rb      s    rb   a,  
jupyter serverextension list                        # list all configured server extensions
jupyter serverextension enable --py <packagename>   # enable all server extensions in a Python package
jupyter serverextension disable --py <packagename>  # disable all server extensions in a Python package
c                       sJ   e Zd ZdZdZeZdZeZ	e
edfedfedfdZ fdd	Z  ZS )
ServerExtensionAppzRoot level server extension appzjupyter serverextensionz#Work with Jupyter server extensionszEnable a server extensionzDisable a server extensionzList server extensions)enabledisablelistc                    s.   t    dt| j}td|  dS )rP   z, z'Please supply at least one subcommand: N)superrU   joinsortedsubcommandsrR   rS   )rG   subcmds	__class__r$   r%   rU     s   
zServerExtensionApp.start)rV   rW   rX   rY   rZ   r   r:   r[   	_examplesexamplesdictr^   ra   rb   rp   rU   __classcell__r$   r$   rr   r%   ri     s    ri   c                 C   s.   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KeyErrorrx   )rI   rL   r$   r$   r%   rJ   0  s   
rJ   __main__)NNTFN)N)#rY   r0   rR   jupyter_core.pathsr   _versionr   config_managerr   
extensionsr   r   r   r	   r
   r   	traitletsr   traitlets.utils.importstringr   r&   r   r\   r   popr>   r^   ra   rb   rt   ri   launch_instancemainrJ   rV   r$   r$   r$   r%   <module>   sp     

637
