o
    tf4                     @  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   Zextdir r   q/var/www/html/software/conda/envs/catlas/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   Zread_config_pathZ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   r0   r   r   r   r      s   zBaseExtensionApp.config_dirN)r   r   )r"   r#   r$   __doc__r   Z_log_formatter_clsr&   flagsr-   aliasesr	   versionr   r   r   r)   r2   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<   r9   r>   r   r   r   managerr   r   r   toggle_server_extension_python   s   
rD   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 )rE   z.A base class for enabling/disabling extensionsz'jupyter server extension enable/disable r<   r   r   r@   c              
   C  s  t | j| jd\}}z_| j| j  d|  | jd|  | jd| d t|d}|  |j	}| jd| d| dt
  |j}|r\| jd	u rW|| 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 ...)name       Tz    - Extension successfully .z     z Validation failed: N)r    r   r   loginfo_toggle_pre_message
capitalizer   validater6   GREEN_OKr   _toggle_valuerA   rB   _toggle_post_message	ExceptionRED_X)r1   r<   r   r   Zextpkgr6   r.   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exitrX   )r1   argr   r   r   start  s
   

zToggleServerExtensionApp.startN)r<   r   r   r@   r   r@   )r"   r#   r$   r3   rI   _descdescriptionr4   r   rS   rO   rT   rX   r^   r   r   r   r   rE      s    
(c                   @  $   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]
    TZenablingr9   N	r"   r#   r$   r3   rI   ra   rS   rO   rT   r   r   r   r   rc   !      rc   c                   @  rb   )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]
    FZ	disablingr:   Nrd   r   r   r   r   rf   0  re   rf   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   r@   c                 C  s`  dddddddddf}|D ]}t di |}| jd|  d}t|gtj||d}| }| D ]n\}}| jd| d|rGt	nt
  z.| jd	| d
 t||d}	|	 sgd}
t|
|	j}| jd| d| dt  W q8 ty } z d}t| jtjkrd}| jjdt d| |d W Y d}~q8d}~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    rK   rG   rH   )rI   r9   zvalidation failedrJ   )exc_infoNrF   r   )r   rM   rN   r
   r   r   r   Zget_jpserver_extensionsitemsGREEN_ENABLEDRED_DISABLEDr   rQ   
ValueErrorr6   rR   rU   int	log_levelloggingDEBUGwarningrV   )r1   Zconfigurationsoptionr   r   r   Zjpserver_extensionsrI   r9   	extensionmsgr6   rW   rh   r   r   r   list_server_extensionsF  s@    "(z.ListServerExtensionsApp.list_server_extensionsc                 C  s   |    dS )rY   N)ru   r0   r   r   r   r^   m  s   zListServerExtensionsApp.startNr_   )
r"   r#   r$   r3   rI   r	   r6   ra   ru   r^   r   r   r   r   rg   ?  s    
'rg   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   ra   zEnable a server extensionzDisable a server extensionzList server extensions)rA   rB   listr%   subcommandsr   r@   c                   s,   t    dt| j}td|  dS )rY   z, z)Please supply at least one subcommand: %sN)superr^   r   sortedrx   r[   r\   )r1   Zsubcmds	__class__r   r   r^     s   
zServerExtensionApp.startr_   )r"   r#   r$   r3   rI   r	   r6   ra   __annotations__	_examplesZexamplesrc   rf   rg   rx   r^   __classcell__r   r   r{   r   rv   y  s   
 rv   __main__)FF)r   r   r   r   r   r   )r   FF)r   r   r   r   r   r   r   r   )NNFT)r<   r   r9   r=   r>   r?   r   r   r   r   r   r@   )5r3   
__future__r   ro   r   r[   typingtZjupyter_core.applicationr   Zjupyter_core.pathsr   r   r   Ztornado.logr   Z	traitletsr   Zjupyter_server._versionr	   Zjupyter_server.extension.configr
   Z jupyter_server.extension.managerr   r   r   r    rl   r!   r&   r}   updater4   popr-   r5   r(   rI   rj   rk   rR   rV   rD   r`   rE   rc   rf   rg   r~   rv   Zlaunch_instancemainr"   r   r   r   r   <module>   s    

%	

%<3

