o
    ¹i„2  ã                   @   s~  d 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 d<dd„Zd=dd„ZG dd„ deƒ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< i Ze ej¡ G d d„ deƒZej d!kr¤d"nd#Z!ej d!kr­d$nd%Z"ej d!kr¶d&nd'Z#ej d!kr¿d(nd)Z$	d>d*d+„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< d0Z&G d1d,„ d,eƒZ'G d2d3„ d3e'ƒZ(G d4d5„ d5e'ƒZ)G d6d7„ d7eƒZ*d8Z+G d9d:„ d:eƒZ,e,j-Z.e/d;kr=e.ƒ  dS dS )?z#Utilities for installing extensionsé    N)Ú
JupyterApp)ÚENV_CONFIG_PATHÚSYSTEM_CONFIG_PATHÚjupyter_config_dir)ÚLogFormatter)ÚBool)Ú__version__)ÚExtensionConfigManager)ÚExtensionManagerÚExtensionPackageFc                 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   )ÚuserÚ
sys_prefixÚextdir© r   úc/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_server/extension/serverextension.pyÚ_get_config_dir   s   üÿr   újupyter_server_config.dc                 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
   )Ú	write_dirr   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   B   s    r   Úyzgenerate-configÚBaseExtensionAppr   Tz+Apply the operation only for the given userr   zApply the operation system-wider   zTUse sys.prefix as the prefix for installing extensions (for environments, packaging)ÚpythonúInstall from a Python package)r   Úsystemz
sys-prefixÚpyr(   c                   @   s^   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	„ Ze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&   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   r+   r   r   r   r   …   s   zBaseExtensionApp.config_dirN)r    r!   r"   Ú__doc__r   Ú_log_formatter_clsÚ_base_flagsÚflagsÚ_base_aliasesÚaliasesr   Úversionr   r   r   r%   r-   Úpropertyr   r   r   r   r   r$   u   s    Úntz[32menabled[0mÚenabledz[31mdisabled[0mÚdisabledz[32mOK[0mÚokz[31m X[0mz Xc                 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)Úimport_namer7   Úparentr   r   r   Úmanagerr   r   r   Útoggle_server_extension_python–   s   þr?   Ú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„ Zdd„ ZdS )	r@   z.A base class for enabling/disabling extensionsz'jupyter server extension enable/disableÚ 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}| jd	u rU| |¡ 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   Úvalidater4   ÚGREEN_OKr   Ú_toggle_valuer:   r;   Ú_toggle_post_messageÚ	ExceptionÚRED_X)r,   r<   r   r   Úextpkgr4   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ÚexitrT   )r,   Úargr   r   r   Ústart  s
   

ÿzToggleServerExtensionApp.startN)r    r!   r"   r.   rD   Ú_descÚdescriptionr1   r   rN   rJ   rO   rT   rZ   r   r   r   r   r@   Û   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]
    TÚenablingr7   N©	r    r!   r"   r.   rD   r\   rN   rJ   rO   r   r   r   r   r^     ó    r^   c                   @   r]   )Ú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Ú	disablingr8   Nr`   r   r   r   r   rb   %  ra   rb   c                   @   s,   e Zd ZdZdZeZdZdd„ Z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 systemc                 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rŽd}| jjdt› d|› |d W Y d}~q8d}~ww | j d¡ qdS )z”List all enabled and disabled server extensions, by config path

        Enabled extensions are validated, potentially generating warnings.
        TFr   zConfig dir: r   r   z    rF   rB   rC   )rD   r7   zvalidation failedrE   )Úexc_infoNrA   r   )r   rH   rI   r	   r   r   r   Úget_jpserver_extensionsÚitemsÚGREEN_ENABLEDÚRED_DISABLEDr   rL   Ú
ValueErrorr4   rM   rP   ÚintÚ	log_levelÚloggingÚDEBUGÚwarningrQ   )r,   ÚconfigurationsÚoptionr   r   r   Újpserver_extensionsrD   r7   Ú	extensionÚmsgr4   rS   re   r   r   r   Úlist_server_extensions;  s@   ýþ "(€üæz.ListServerExtensionsApp.list_server_extensionsc                 C   s   |   ¡  dS )rU   N)ru   r+   r   r   r   rZ   b  s   zListServerExtensionsApp.startN)
r    r!   r"   r.   rD   r   r4   r\   ru   rZ   r   r   r   r   rd   4  s    'rd   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                       sZ   e Zd ZU dZdZeZdZee	d< e
ZedfedfedfdœZee	d	< ‡ fd
d„Z‡  ZS )ÚServerExtensionAppzRoot level server extension appzjupyter server extensionz#Work with Jupyter server extensionsr\   zEnable a server extensionzDisable a server extensionzList server extensions)r:   r;   ÚlistÚsubcommandsc                    s,   t ƒ  ¡  d t| jƒ¡}t d| ¡ dS )rU   z, z)Please supply at least one subcommand: %sN)ÚsuperrZ   r   Úsortedrx   rW   rX   )r,   Úsubcmds©Ú	__class__r   r   rZ   |  s   
zServerExtensionApp.start)r    r!   r"   r.   rD   r   r4   r\   ÚstrÚ__annotations__Ú	_examplesÚexamplesr^   rb   rd   rx   ÚdictrZ   Ú__classcell__r   r   r|   r   rv   n  s   
 ýrv   Ú__main__)FF)r   FF)NNFT)0r.   rm   r   rW   Ú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   rj   r   r0   Úupdater1   Úpopr2   r3   r$   rD   rh   ri   rM   rQ   r?   r[   r@   r^   rb   rd   r€   rv   Úlaunch_instanceÚmainr    r   r   r   r   Ú<module>   sÈ    

ÿÿú
þÿùÿÿú
ÿÿúæÿ%
ÿÿÿú
þÿùÿÿú
ÿÿúæÿ%;3

ÿ