
    Ibh*                     8   d dl Z d dlZddl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 d dlmZ d	Zd
Zd Z	 ddZddZddZddZ G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zej:                  Zedk(  r e        yy)    N   )BaseExtensionApp_get_config_dirGREEN_ENABLEDRED_DISABLED)__version__)BaseJSONConfigManager)jupyter_config_path)import_item)Boolnotebookbundlerextensionsc                 v    t        |       }t        |d      st        d|  d      |j                         }||fS )a  Gets the list of bundlers associated with a Python package.

    Returns a tuple of (the module, [{
        'name': 'unique name of the bundler',
        'label': 'file menu item label for the bundler',
        'module_name': 'dotted package/module name containing the bundler',
        'group': 'download or deploy parent menu item'
    }])

    Parameters
    ----------

    module : str
        Importable Python module exposing the
        magic-named `_jupyter_bundlerextension_paths` function
    _jupyter_bundlerextension_pathszThe Python module z* does not contain a valid bundlerextension)r   hasattrKeyErrorr   )modulembundlerss      D/usr/lib/python3/dist-packages/notebook/bundler/bundlerextensions.py_get_bundler_metadatar      sG    " 	FA178+F83]^__002Hh;    c           	         |rdn|}t         j                  j                  t        ||      d      }t	        |      }	|r|j                  |rdnd d|  d| d	       |r#|	j                  t        t        | |||d
ii       n|	j                  t        t        | dii       |	j                  t              j                  t        i       j                  |       du|k(  S )a>  Set whether a bundler is enabled or disabled.

    Returns True if the final state is the one requested.

    Parameters
    ----------
    name : string
        Unique name of the bundler
    label : string
        Human-readable label for the bundler menu item in the notebook UI
    module_name : string
        Dotted module/package name containing the bundler
    group : string
        'download' or 'deploy' indicating the parent menu containing the label
    state : bool
        The state in which to leave the extension
    user : bool [default: True]
        Whether to update the user's .jupyter/nbconfig directory
    sys_prefix : bool [default: False]
        Whether to update the sys.prefix, i.e. environment. Will override
        `user`.
    logger : Jupyter logger [optional]
        Logger instance to use
    F)user
sys_prefixnbconfig)
config_dirEnabling	Disabling z	 bundler z...)labelmodule_namegroupN)
ospathjoinr   r	   infoupdateBUNDLER_SECTIONBUNDLER_SUBSECTIONget)
namer!   r"   r#   stater   r   loggerr   cms
             r   _set_bundler_stater0   )   s    4 5DDTj9:GJ	*	5BUz<AdV9[MY\]^
		/"#.#!$
 	 			/d!$
 	 FF?#s%r*s4y%)./ /r   c                     t        |      \  }}|D cg c]!  }t        |d   |d   |d   |d   | |||      # c}S c c}w )aH  Enables or disables bundlers defined in a Python package.

    Returns a list of whether the state was achieved for each bundler.

    Parameters
    ----------
    state : Bool
        Whether the extensions should be enabled
    module : str
        Importable Python module exposing the
        magic-named `_jupyter_bundlerextension_paths` function
    user : bool
        Whether to enable in the user's nbconfig directory.
    sys_prefix : bool
        Enable/disable in the sys.prefix, i.e. environment
    logger : Jupyter logger [optional]
        Logger instance to use
    r,   r!   r"   r#   )r,   r!   r"   r#   r-   r   r   r.   )r   r0   )r-   r   r   r   r.   r   r   bundlers           r   _set_bundler_state_pythonr3   a   sd    & (/KAx $%  GFO%,W%5+2=+A%,W%5%*$(Z&,. % % %s   &<c                 "    t        d| |||      S )aA  Enables bundlers defined in a Python package.

    Returns whether each bundle defined in the packaged was enabled or not.

    Parameters
    ----------
    module : str
        Importable Python module exposing the
        magic-named `_jupyter_bundlerextension_paths` function
    user : bool [default: True]
        Whether to enable in the user's nbconfig directory.
    sys_prefix : bool [default: False]
        Whether to enable in the sys.prefix, i.e. environment. Will override
        `user`
    logger : Jupyter logger [optional]
        Logger instance to use
    Tr.   r3   r   r   r   r.   s       r   enable_bundler_pythonr8   ~   s    $ %T64,24 4r   c                 "    t        d| |||      S )aB  Disables bundlers defined in a Python package.

    Returns whether each bundle defined in the packaged was enabled or not.

    Parameters
    ----------
    module : str
        Importable Python module exposing the
        magic-named `_jupyter_bundlerextension_paths` function
    user : bool [default: True]
        Whether to enable in the user's nbconfig directory.
    sys_prefix : bool [default: False]
        Whether to enable in the sys.prefix, i.e. environment. Will override
        `user`
    logger : Jupyter logger [optional]
        Logger instance to use
    Fr5   r6   r7   s       r   disable_bundler_pythonr:      s    $ %UFD*,24 4r   c                   H    e Zd ZdZdZeZdZ eddd      Z	dZ
d Zd	 Zd
 Zy)ToggleBundlerExtensionAppz;A base class for apps that enable/disable bundlerextensionsz'jupyter bundlerextension enable/disablez3Enable/disable a bundlerextension in configuration.Tz;Apply the configuration only for the current user (default))confighelpNc                      y)zThe default config file name.jupyter_notebook_config selfs    r   _config_file_name_defaultz3ToggleBundlerExtensionApp._config_file_name_default   s    (r   c                     | j                   rt        nt        } ||| j                  | j                  | j
                        S )aS  Toggle some extensions in an importable Python module.

        Returns a list of booleans indicating whether the state was changed as
        requested.

        Parameters
        ----------
        module : str
            Importable Python module exposing the
            magic-named `_jupyter_bundlerextension_paths` function
        )r   r   r.   )_toggle_valuer8   r:   r   r   log)rC   r   toggles      r   toggle_bundler_pythonz/ToggleBundlerExtensionApp.toggle_bundler_python   s<     ,0+=+='- 	f99!%!XX' 	'r   c                    | j                   st        j                  d       n-t        | j                         dkD  rt        j                  d       | j                  r| j                  | j                   d          y t        d      )Nz?Please specify an bundlerextension/package to enable or disable   z5Please specify one bundlerextension/package at a timer   z0Cannot install bundlers from non-Python packages)
extra_argssysexitlenpythonrI   NotImplementedErrorrB   s    r   startzToggleBundlerExtensionApp.start   s^    HHVW!A%HHLM;;&&tq'9:%&XYYr   )__name__
__module____qualname____doc__r,   r   versiondescriptionr   r   rF   rD   rI   rR   rA   r   r   r<   r<      s8    E4DGGKT(efDM)'&Zr   r<   c                       e Zd ZdZdZdZdZy)EnableBundlerExtensionAppz%An App that enables bundlerextensionszjupyter bundlerextension enablez
    Enable a bundlerextension in frontend configuration.

    Usage
        jupyter bundlerextension enable [--system|--sys-prefix]
    TNrS   rT   rU   rV   r,   rX   rF   rA   r   r   rZ   rZ      s    /,DK Mr   rZ   c                       e Zd ZdZdZdZdZy)DisableBundlerExtensionAppz&An App that disables bundlerextensionsz jupyter bundlerextension disablez
    Disable a bundlerextension in frontend configuration.

    Usage
        jupyter bundlerextension disable [--system|--sys-prefix]
    Nr[   rA   r   r   r]   r]      s    0-DK Mr   r]   c                   (    e Zd ZdZdZeZdZd Zd Z	y)ListBundlerExtensionAppz,An App that lists and validates nbextensionszjupyter nbextension listz7List all nbextensions known by the configuration systemc                    t               D cg c]"  }t        j                  j                  |d      $ }}t	        d       |D ]  }d| }d}t        | |      }|j                  d      }d|v s-|st	        |       d}|d   j                         D ]R  \  }}	|	j                  d	      }
|	j                  d
      }|
|d| dt         }nd|
 d| dt         }t	        |       T  yc c}w )zList all the nbextensionsr   zKnown bundlerextensions:z  config dir: F)parentr   r   r   Tr!   r"   Nz    r    z    "z" from )
r
   r$   r%   r&   printr	   r+   itemsr   r   )rC   pconfig_dirsr   head
head_shownr/   data
bundler_idr'   r!   r   msgs                r   list_nbextensionsz)ListBundlerExtensionApp.list_nbextensions   s    <O<QRqrww||Az2RR()% 	J#J<0DJ&dzJB66*%D"d*!$K!%J(,-@(A(G(G(I $J HHW-E!XXm4F} $ZL,@ %eWGF81]OL#J		 Ss   'C*c                 $    | j                          y))Perform the App's functions as configuredN)rk   rB   s    r   rR   zListBundlerExtensionApp.start  s     r   N)
rS   rT   rU   rV   r,   r   rW   rX   rk   rR   rA   r   r   r_   r_      s    6%DGKK6!r   r_   c                   T     e Zd ZdZdZeZdZdZ e	e
dfedfedf      Z fd	Z xZS )
BundlerExtensionAppz1Base jupyter bundlerextension command entry pointzjupyter bundlerextensionz$Work with Jupyter bundler extensionsa  
jupyter bundlerextension list                          # list all configured bundlers
jupyter bundlerextension enable --py <packagename>     # enable all bundlers in a Python package
jupyter bundlerextension disable --py <packagename>    # disable all bundlers in a Python package
zEnable a bundler extensionzDisable a bundler extensionzList bundler extensions)enabledisablelistc                     t         |           dj                  t        | j                              }t        j                  d|        y)rm   z, z'Please supply at least one subcommand: N)superrR   r&   sortedsubcommandsrM   rN   )rC   subcmds	__class__s     r   rR   zBundlerExtensionApp.start!  s;     ))F4#3#345:7)DEr   )rS   rT   rU   rV   r,   r   rW   rX   examplesdictrZ   r]   r_   rv   rR   __classcell__)rx   s   @r   ro   ro     sO    ;%DG8KH )+GH+-JK%'@AKF Fr   ro   __main__)TFN)N) rM   r$   
extensionsr   r   r   r   _versionr   notebook.config_managerr	   jupyter_core.pathsr
   traitlets.utils.importstringr   	traitletsr   r)   r*   r   r0   r3   r8   r:   r<   rZ   r]   r_   ro   launch_instancemainrS   rA   r   r   <module>r      s     	 W W " 9 2 4 ( 0 <@5/p%:4*4*)Z 0 )ZV	 9 		!: 	#!. #!LF* F4 **zF r   