ó
ù2¢\c           @  s4  d  Z  d d l m 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 e e d d „ Z d d „ Z i  Z e j e j ƒ e j d d ƒ e j d d ƒ e j i i i e d 6d 6d f d 6i i e d 6e d 6d 6d f d 6i i e d 6d 6d f d 6i i e d 6d 6d f d 6ƒ e d e d <d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d  „  ƒ  YZ! d! Z" d" e f d# „  ƒ  YZ# e# j$ Z% d$ „  Z& e' d% k r0e% ƒ  n  d S(&   s;   Utilities for installing server extensions for the notebookiÿÿÿÿ(   t   print_functionN(   t   jupyter_config_pathi   (   t   __version__(   t   BaseJSONConfigManager(   t   BaseExtensionAppt   _get_config_dirt   GREEN_ENABLEDt   RED_DISABLEDt   GREEN_OKt   RED_X(   t   Bool(   t   import_itemc         C  s  | r t  n | } t d | d | ƒ } t d | d | ƒ } | j d ƒ } | j d i  ƒ j d i  ƒ }	 |	 j |  d ƒ }
 | d k	 r | n |
 } | rÈ | r´ | j d |  ƒ qÈ | j d	 |  ƒ n  | |	 |  <| rñ | j d
 j | ƒ ƒ n  | j d | ƒ | rt	 |  | ƒ n  d S(   sv  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
    t   usert
   sys_prefixt   parentt
   config_dirt   jupyter_notebook_configt   NotebookAppt   nbserver_extensionsu   Enabling: %su   Disabling: %su   - Writing config: {}N(
   t   FalseR   R   t   gett
   setdefaultt   Nonet   infot   formatt   updatet   validate_serverextension(   t   import_namet   enabledR   R   R   t   loggerR   t   cmt   cfgt   server_extensionst   old_enabledt   new_enabled(    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyt   toggle_serverextension_python   s$    
c         C  sB  g  } g  } d } | r( | j d ƒ n  y7 t j |  ƒ } t | d d ƒ } t | d d ƒ } Wn! t k
 r‚ | j d |  ƒ n Xd } | d k	 r± | j | j t	 |  ƒ ƒ n | j | j t
 |  ƒ ƒ d } | r>| rg  | D] }	 | j |	 ƒ ^ qã g  | D] }
 | j |
 ƒ ^ qq>| j | j |  | t	 ƒ ƒ n  | S(	   s\  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
    s       - Validating...t   load_jupyter_server_extensionR   t    s!   Error loading server extension %su        {} is {} importable?u         {} {} {}N(   R   R   t	   importlibt   import_modulet   getattrt	   Exceptiont   warningt   appendR   R   R	   t   warn(   R   R   t   warningst   infost   funct   modt   versiont
   import_msgt   post_mortemR   R*   (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyR   P   s,     #t   ys   generate-configR   t   ToggleServerExtensionApps*   Perform the operation for the current userR   s!   Perform the operation system-widet   systems=   Use sys.prefix as the prefix for installing server extensionss
   sys-prefixt   pythons   Install from a Python packaget   pyc           B  sƒ   e  Z d  Z d Z d Z e Z e e d e d d ƒZ e e	 d e d d ƒZ
 e e	 d e d d ƒZ d „  Z d	 „  Z d
 „  Z RS(   s.   A base class for enabling/disabling extensionss&   jupyter serverextension enable/disablesE   Enable/disable a server extension using frontend configuration files.t   configt   helps   Whether to do a user installs    Use the sys.prefix as the prefixs   Install from a Python packagec         C  s5   t  | |  j d |  d |  j d |  j d |  j ƒd S(   s.  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#   t   _toggle_valueR   R   t   log(   t   selfR   (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyt   toggle_server_extension¬   s    c         C  s>   t  | ƒ \ } } x% | D] } | d } |  j | ƒ q Wd S(   s,  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
        t   moduleN(   t   _get_server_extension_metadataR>   (   R=   t   packaget   mt   server_extst
   server_extR?   (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyt   toggle_server_extension_python¼   s    
c         C  sW   |  j  s t j d ƒ n  x7 |  j  D], } |  j rB |  j | ƒ q# |  j | ƒ q# Wd S(   s'   Perform the App's actions as configureds>   Please specify a server extension/package to enable or disableN(   t
   extra_argst   syst   exitR7   RE   R>   (   R=   t   arg(    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyt   startÍ   s    		(   t   __name__t
   __module__t   __doc__t   namet   descriptiont   flagsR
   t   TrueR   R   R   R7   R>   RE   RJ   (    (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyR5   ¡   s   		t   EnableServerExtensionAppc           B  s    e  Z d  Z d Z d Z e Z RS(   s5   An App that enables (and validates) Server Extensionss   jupyter serverextension enables‚   
    Enable a serverextension in configuration.
    
    Usage
        jupyter serverextension enable [--system|--sys-prefix]
    (   RK   RL   RM   RN   RO   RQ   R;   (    (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyRR   Ø   s   t   DisableServerExtensionAppc           B  s    e  Z d  Z d Z d Z e Z RS(   s&   An App that disables Server Extensionss   jupyter serverextension disables„   
    Disable a serverextension in configuration.
    
    Usage
        jupyter serverextension disable [--system|--sys-prefix]
    (   RK   RL   RM   RN   RO   R   R;   (    (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyRS   ä   s   t   ListServerExtensionsAppc           B  s2   e  Z d  Z d Z e Z d Z d „  Z d „  Z RS(   s3   An App that lists (and validates) Server Extensionss   jupyter serverextension lists<   List all server extensions known by the configuration systemc         C  sË   t  ƒ  } x» | D]³ } t d |  d | ƒ } | j d ƒ } | j d i  ƒ j d i  ƒ } | rt t d j | ƒ ƒ n  xL | j ƒ  D]> \ } } t d j | | r¥ t n t ƒ ƒ t	 | |  j
 ƒ q Wq Wd S(	   s”   List all enabled and disabled server extensions, by config path

        Enabled extensions are validated, potentially generating warnings.
        R   R   R   R   R   u   config dir: {}u	       {} {}N(   R   R   R   R   t   printR   t   itemsR   R   R   R<   (   R=   t   config_dirsR   R   t   dataR    R   R   (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyt   list_server_extensionsö   s    		c         C  s   |  j  ƒ  d S(   s'   Perform the App's actions as configuredN(   RY   (   R=   (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyRJ     s    (	   RK   RL   RM   RN   R   R1   RO   RY   RJ   (    (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyRT   ð   s   	s,  
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
t   ServerExtensionAppc           B  s\   e  Z d  Z d Z e Z d Z e Z e	 d e
 d f d e d f d e d f ƒ Z d	 „  Z RS(
   s   Root level server extension apps   jupyter serverextensions#   Work with Jupyter server extensionst   enables   Enable a server extensiont   disables   Disable a server extensiont   lists   List server extensionsc         C  s@   t  t |  ƒ j ƒ  d j t |  j ƒ ƒ } t j d | ƒ d S(   s'   Perform the App's actions as configureds   , s)   Please supply at least one subcommand: %sN(   t   superRZ   RJ   t   joint   sortedt   subcommandsRG   RH   (   R=   t   subcmds(    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyRJ   $  s    (   RK   RL   RM   RN   R   R1   RO   t	   _examplest   examplest   dictRR   RS   RT   Ra   RJ   (    (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyRZ     s   c         C  sC   t  |  ƒ } t | d ƒ s3 t d j |  ƒ ƒ ‚ n  | | j ƒ  f S(   sŠ  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
    t   _jupyter_server_extension_pathsuA   The Python module {} does not include any valid server extensions(   R   t   hasattrt   KeyErrorR   Rf   (   R?   RB   (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyR@   5  s    t   __main__((   RM   t
   __future__R    R&   RG   t   jupyter_core.pathsR   t   _versionR   t   config_managerR   t
   extensionsR   R   R   R   R   R	   t	   traitletsR
   t   traitlets.utils.importstringR   R   RQ   R   R#   R   RP   R   t   popR5   RR   RS   RT   Rc   RZ   t   launch_instancet   mainR@   RK   (    (    (    s8   lib/python2.7/site-packages/notebook/serverextensions.pyt   <module>   sZ   .53	


7$		