
    Ib*                     "   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j/                  e
j,                         ej1                  dd       ej1                  dd       ej/                  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         yy))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        ||      }|j                  d      }|j                  di       j                  di       }	|	j                  | d      }
||n|
 }|r+|r|j	                  d|         n|j	                  d	|         ||	| <   |r|j	                  d
|        |j                  d|       |rt        | |       yy)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               ;/usr/lib/python3/dist-packages/notebook/serverextensions.pytoggle_serverextension_pythonr'      s    2 5DD dzBJ	f	DB
&&*
+C}b)	)2	. 
 $''T:K$0'+oKKK*[M23KK+k]34%0k"(56II'- f5     c                 d   g }g }d}|r|j                  d       	 t        j                  |       }t        |dd      }t        |dd      }d}|&|j                  |j                  t        |              n%|j                  |j                  t        |              d}|rh|r@|D 	cg c]  }	|j                  |	       c}	 |D 
cg c]  }
|j                  |
       c}
 |S |j                  |j                  | t                     |S # t        $ r |j                  d|        Y w xY wc c}	w c c}
w )	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      {} {} {})r   	importlibimport_modulegetattr	Exceptionwarningappendformatr   r   warn)r   r    warningsinfosfuncmodversion
import_msgpost_mortemr   r0   s              r&   r   r   M   s     HED)*I%%k2s;TB#}b1 -JZ&&x=>
))%=>"K+014V[[119:gV[[!: O KK**;JKO#  I:KHI 2:s   /D #D(D-D%$D%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pyr@   c                   p    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y)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                 v    t        || j                  | | j                  | j                  | j                         y)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,     	&++Dtyytxx	9r(   c                 Z    t        |      \  }}|D ]  }|d   }| j                  |        y)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_extrJ   s         r&   toggle_server_extension_pythonz7ToggleServerExtensionApp.toggle_server_extension_python   s9     8@;% 	1J)F((0	1r(   c                     | j                   st        j                  d       | j                   D ]1  }| j                  r| j	                  |       !| j                  |       3 y)'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitr=   rP   rH   )rG   args     r&   startzToggleServerExtensionApp.start   sL    HHUV?? 	2C{{33C8,,S1		2r(   N)__name__
__module____qualname____doc__namedescriptionflagsr   r   r   r=   rH   rP   rW    r(   r&   r<   r<      sP    83DYKET(FGDeD/QRJ%+JKF9 1"2r(   c                       e Zd ZdZdZdZdZy)EnableServerExtensionAppz5An App that enables (and validates) Server Extensionszjupyter serverextension enablez~
    Enable a serverextension in configuration.

    Usage
        jupyter serverextension enable [--system|--sys-prefix]
    TNrX   rY   rZ   r[   r\   r]   rE   r_   r(   r&   ra   ra      s    ?+DK Mr(   ra   c                       e Zd ZdZdZdZdZy)DisableServerExtensionAppz&An App that disables Server Extensionszjupyter serverextension disablez
    Disable a serverextension in configuration.

    Usage
        jupyter serverextension disable [--system|--sys-prefix]
    FNrb   r_   r(   r&   rd   rd      s    0,DK Mr(   rd   c                   (    e Zd ZdZdZeZdZd Zd Z	y)ListServerExtensionsAppz3An App that lists (and validates) Server Extensionszjupyter serverextension listz<List all server extensions known by the configuration systemc                 \   t               }|D ]  }t        | |      }|j                  d      }|j                  di       j                  di       }|rt	        d|        |j                         D ]8  \  }}t	        d| d|rt        nt                t        || j                         :  y)	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   s           r&   list_server_extensionsz.ListServerExtensionsApp.list_server_extensions   s    
 *+% 	@J&dzJB6634Dr2126  !ZL12(9(?(?(A @$W[MG=*VWX(dhh?@	@r(   c                 $    | j                          y)rR   N)rm   )rG   s    r&   rW   zListServerExtensionsApp.start  s    ##%r(   N)
rX   rY   rZ   r[   r\   r   r8   r]   rm   rW   r_   r(   r&   rf   rf      s    =)DGPK@&&r(   rf   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                   T     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 serverextensionz#Work with Jupyter server extensionszEnable a server extensionzDisable a server extensionzList server extensions)enabledisablelistc                     t         |           dj                  t        | j                              }t        j                  d|        y)rR   z, z'Please supply at least one subcommand: N)superrW   joinsortedsubcommandsrT   rU   )rG   subcmds	__class__s     r&   rW   zServerExtensionApp.start  s;     ))F4#3#345:7)DEr(   )rX   rY   rZ   r[   r\   r   r8   r]   	_examplesexamplesdictra   rd   rf   rx   rW   __classcell__)rz   s   @r&   rp   rp     sK    )$DG7KH(*EF*,HI%'?@KF Fr(   rp   c                 r    t        |       }t        |d      st        d|  d      ||j                         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   )rJ   rM   s     r&   rK   rK   0  sC    & 	FA178+F83`abba//111r(   __main__)NNTFN)N)#r[   r,   rT   jupyter_core.pathsr   _versionr   config_managerr   
extensionsr   r   r	   r
   r   r   	traitletsr   traitlets.utils.importstringr   r'   r   r^   r   popr<   ra   rd   rf   r{   rp   launch_instancemainrK   rX   r_   r(   r&   <module>r      s   A
  
 2 ! 1   4 EIFJ36l,f 	 ## $ 		#t  		
T " "T&
 9 	#&
 0	 	#4&
 L 	#t&
 ,# . +h42/ 42n	7 		 8 	&. &<	F) F. ))20 zF r(   