o
    ^i5                     @  s  U d Z ddlmZ ddlZddlZddlZddlZddlm	Z	 ddl
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mZ dJdKddZ	dLdMddZG dd deZi Zded< 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$< i Z"ded(< e"e	j# G d)d de	Z$ej%d*krd+nd,Z&ej%d*krd-nd.Z'ej%d*krd/nd0Z(ej%d*krd1nd2Z)				dNdOd8d9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$< d>Z+G d?d: d:e$Z,G d@dA dAe,Z-G dBdC dCe,Z.G dDdE dEe$Z/dFZ0G dGdH dHe$Z1e1j2Z3e4dIkrWe3  dS dS )Pz#Utilities for installing extensions    )annotationsN)
JupyterApp)ENV_CONFIG_PATHSYSTEM_CONFIG_PATHjupyter_config_dir)LogFormatter)Bool)__version__)ExtensionConfigManager)ExtensionManagerExtensionPackageFuserbool
sys_prefixreturnstrc                 C  s6   | r|rd}| rt  }|S |rtd }|S td }|S )a8  Get the location of config files for the current context

    Returns the string to the environment

    Parameters
    ----------
    user : bool [default: False]
        Get the user's .jupyter config directory
    sys_prefix : bool [default: False]
        Get sys.prefix, i.e. ~/.envs/my-env/etc/jupyter
    Fr   )r   r   r   )r   r   extdir r   c/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/jupyter_server/extension/serverextension.py_get_config_dir   s   r   jupyter_server_config.d	write_dirtuple[str, ExtensionManager]c                 C  s6   t ||d}t|gtj|| d}t|d}||fS )a  Get an extension manager pointing at the current context

    Returns the path to the current context and an ExtensionManager object.

    Parameters
    ----------
    write_dir : str [default: 'jupyter_server_config.d']
        Name of config directory to write extension config.
    user : bool [default: False]
        Get the user's .jupyter config directory
    sys_prefix : bool [default: False]
        Get sys.prefix, i.e. ~/.envs/my-env/etc/jupyter
    r   r   read_config_pathwrite_config_dir)config_manager)r   r
   ospathjoinr   )r   r   r   
config_dirr   extension_managerr   r   r   _get_extmanager_for_context-   s   r#   c                   @  s   e Zd ZdS )ArgumentConflictN)__name__
__module____qualname__r   r   r   r   r$   H   s    r$   dict[str, t.Any]_base_flagsyzgenerate-configBaseExtensionAppTz+Apply the operation only for the given userr   zApply the operation system-widezTUse sys.prefix as the prefix for installing extensions (for environments, packaging)pythonInstall from a Python package)r   systemz
sys-prefixpyr/   _base_aliasesc                   @  sb   e Zd ZdZeZeZeZ	e
ZeddddZeddddZeddddZdd
dZedddZdS )r+   zBase extension installer appFTzWhether to do a user install)confighelpz Use the sys.prefix as the prefixr-   r   r   c                 C  s   dS )zA default format for messagesz%(message)sr   selfr   r   r   _log_format_default   s   z$BaseExtensionApp._log_format_defaultc                 C  s   t | j| jdS )Nr   )r   r   r   r3   r   r   r   r!      s   zBaseExtensionApp.config_dirN)r   r   )r%   r&   r'   __doc__r   _log_formatter_clsr)   flagsr0   aliasesr	   versionr   r   r   r,   r5   propertyr!   r   r   r   r   r+   {   s    
ntz[32menabled[0menabledz[31mdisabled[0mdisabledz[32mOK[0mokz[31m X[0mz Ximport_namebool | Noneparentt.AnyNonec                 C  sP   |rdn|}t ||d}t|gtj|dd}|r!||  dS ||  dS )zZToggle the boolean setting for a given server extension
    in a Jupyter config file.
    Fr   r   r   N)r   r
   r   r   r    enabledisable)r@   r=   rB   r   r   r!   managerr   r   r   toggle_server_extension_python   s   
rH   ToggleServerExtensionAppz*Perform the operation for the current userz!Perform the operation system-widez=Use sys.prefix as the prefix for installing server extensionszEEnable/disable a server extension using frontend configuration files.c                   @  s>   e Zd ZdZdZeZeZe Z	dZ
dZddd	Zdd
dZdS )rI   z.A base class for enabling/disabling extensionsz'jupyter server extension enable/disable r@   r   r   rD   c              
   C  sZ  t | j| jd\}}z| j| j  d|  | jd|  | jd| d |j}d}|rI| }||vrEd| d}t	||| }t
||d	}| sYd
}t	||j}	| jd| d|	 dt  |j}|r| jdu r{|| n|| | jd| j d W dS  ty }
 z| jdt d|
  W Y d}
~
dS d}
~
ww )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   z: z- Writing config:     - Validating ...FzThe module 'z>' could not be found. Are you sure the extension is installed?namer=   validation failed       Tz    - Extension successfully .z     z Validation failed: N)r#   r   r   loginfo_toggle_pre_message
capitalizer   get_jpserver_extensions
ValueErrorr   validater:   GREEN_OK_toggle_valuerE   rF   _toggle_post_message	ExceptionerrorRED_X)r4   r@   r!   r"   r1   r=   jpserver_extensionsmsgextpkgr:   errr   r   r   toggle_server_extension   s@   



&z0ToggleServerExtensionApp.toggle_server_extensionc                 C  s*   | j std | j D ]}| | qdS )'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitrd   )r4   argr   r   r   start'  s
   

zToggleServerExtensionApp.startN)r@   r   r   rD   r   rD   )r%   r&   r'   r6   rN   _descdescriptionr8   r   r[   rU   r\   rd   rj   r   r   r   r   rI      s    
6c                   @  $   e Zd ZdZdZdZdZdZdZdS )EnableServerExtensionAppz5An App that enables (and validates) Server Extensionszjupyter server extension enablez
    Enable a server extension in configuration.

    Usage
        jupyter server extension enable [--system|--sys-prefix]
    Tenablingr=   N	r%   r&   r'   r6   rN   rm   r[   rU   r\   r   r   r   r   ro   /      ro   c                   @  rn   )DisableServerExtensionAppz&An App that disables Server Extensionsz jupyter server extension disablez
    Disable a server extension in configuration.

    Usage
        jupyter server extension disable [--system|--sys-prefix]
    F	disablingr>   Nrq   r   r   r   r   rs   >  rr   rs   c                   @  s0   e Zd ZdZdZeZdZdddZddd	Z	d
S )ListServerExtensionsAppz3An App that lists (and validates) Server Extensionszjupyter server extension listz<List all server extensions known by the configuration systemr   rD   c                 C  s@  dddddddddf}|D ]}t di |}td|  d}t|gtj||d}| }| D ]`\}}td| d|rCtnt	  z*td	| d
 t
||d}	|	 sad}
t|
|	j}td| d| dt  W q6 ty } z| jjddd tdt d|  W Y d}~q6d}~ww | jd qdS )zList all enabled and disabled server extensions, by config path

        Enabled extensions are validated, potentially generating warnings.
        TFr   zConfig dir: r   r   z    rQ   rK   rL   rM   rO   rP   rJ   )exc_infoNr   )r   printr
   r   r   r    rW   itemsGREEN_ENABLEDRED_DISABLEDr   rY   rX   r:   rZ   r]   rS   debugr_   rT   )r4   configurationsoptionr!   r   r   r`   rN   r=   	extensionra   r:   rc   r   r   r   list_server_extensionsT  s<    z.ListServerExtensionsApp.list_server_extensionsc                 C  s   |    dS )re   N)r   r3   r   r   r   rj   y  s   zListServerExtensionsApp.startNrk   )
r%   r&   r'   r6   rN   r	   r:   rm   r   rj   r   r   r   r   ru   M  s    
%ru   a/  
jupyter server extension list                        # list all configured server extensions
jupyter server extension enable --py <packagename>   # enable all server extensions in a Python package
jupyter server extension disable --py <packagename>  # disable all server extensions in a Python package
c                      s\   e Zd ZU dZdZeZdZded< e	Z
edfedfedfd	Zd
ed< d fddZ  ZS )ServerExtensionAppzRoot level server extension appzjupyter server extensionz#Work with Jupyter server extensionsr   rm   zEnable a server extensionzDisable a server extensionzList server extensions)rE   rF   listr(   subcommandsr   rD   c                   s,   t    dt| j}td|  dS )re   z, z)Please supply at least one subcommand: %sN)superrj   r    sortedr   rg   rh   )r4   subcmds	__class__r   r   rj     s   
zServerExtensionApp.startrk   )r%   r&   r'   r6   rN   r	   r:   rm   __annotations__	_examplesexamplesro   rs   ru   r   rj   __classcell__r   r   r   r   r     s   
 r   __main__)FF)r   r   r   r   r   r   )r   FF)r   r   r   r   r   r   r   r   )NNFT)r@   r   r=   rA   rB   rC   r   r   r   r   r   rD   )5r6   
__future__r   loggingr   rg   typingtjupyter_core.applicationr   jupyter_core.pathsr   r   r   tornado.logr   	traitletsr   jupyter_server._versionr	   jupyter_server.extension.configr
    jupyter_server.extension.managerr   r   r   r#   rX   r$   r)   r   updater8   popr0   r9   r+   rN   ry   rz   rZ   r_   rH   rl   rI   ro   rs   ru   r   r   launch_instancemainr%   r   r   r   r   <module>   s    

%	

%J1

