
    bi5                    |   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 d<d=dZ	 d>	 	 	 	 	 	 	 d?dZ G d de      Zi Zded<   ej?                  e	j@                         ejC                  dd       ejC                  dd       ej?                  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"j?                  e	jF                          G d! de	      Z$ejJ                  d"k7  rd#nd$Z&ejJ                  d"k7  rd%nd&Z'ejJ                  d"k7  rd'nd(Z(ejJ                  d"k7  rd)nd*Z)	 	 	 	 d@	 	 	 	 	 	 	 	 	 	 	 dAd+Z*i Z e j?                  e$j@                         e jC                  dd       e jC                  dd       e j?                  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 d1 d,e$      Z, G d2 d3e,      Z- G d4 d5e,      Z. G d6 d7e$      Z/d8Z0 G d9 d:e$      Z1e1jd                  Z3e4d;k(  r e3        yy)Bz#Utilities for installing extensions    )annotationsN)
JupyterApp)ENV_CONFIG_PATHSYSTEM_CONFIG_PATHjupyter_config_dir)LogFormatter)Bool)__version__)ExtensionConfigManager)ExtensionManagerExtensionPackageFuser
sys_prefixc                Z    | 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   extdirs      c/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jupyter_server/extension/serverextension.py_get_config_dirr      sG     

#%
 M	 
 # M $A&M    c                    t        ||      }t        |gt        j                  j	                  ||             }t        |      }||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_managers         r   _get_extmanager_for_contextr!   -   sO      !dzBJ+$j)<N )% (((r   c                      e Zd Zy)ArgumentConflictN)__name__
__module____qualname__ r   r   r#   r#   H   s    r   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                  |    e Zd ZdZeZeZeZ	e
Z eddd      Z eddd      Z eddd      ZddZedd	       Zy
)r+   zBase extension installer appFTzWhether to do a user install)confighelpz Use the sys.prefix as the prefixr-   c                     y)zA default format for messagesz%(message)sr'   selfs    r   _log_format_defaultz$BaseExtensionApp._log_format_default   s    r   c                D    t        | j                  | j                        S )Nr   )r   r   r   r5   s    r   r   zBaseExtensionApp.config_dir   s    DII$//JJr   N)returnstr)r$   r%   r&   __doc__r   _log_formatter_clsr)   flagsr0   aliasesr
   versionr	   r   r   r,   r7   propertyr   r'   r   r   r+   r+   {   sb    &%EGGd)GHDd4.PQJ%+JKF K Kr   ntz[32menabled[0menabledz[31mdisabled[0mdisabledz[32mOK[0mokz[31m X[0mz Xc                    |rdn|}t        ||      }t        |gt        j                  j	                  |d            }|r|j                  |        y|j                  |        y)zZToggle the boolean setting for a given server extension
    in a Jupyter config file.
    Fr   jupyter_server_config.dr   N)r   r   r   r   r   enabledisable)import_namerB   parentr   r   r   managers          r   toggle_server_extension_pythonrL      sX     JJ dzBJ$$j2KLG {#$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                  B    e Zd ZdZdZeZeZ e       Z	dZ
dZddZddZy)	rM   z.A base class for enabling/disabling extensionsz'jupyter server extension enable/disable c                   t        | j                  | j                        \  }}	 | j                  j	                  | j
                  j                          d|        | j                  j	                  d|        | j                  j	                  d| d       |j                  }d}|r*|j                         }||vrd| d}t        |      ||   }t        ||	      }|j                         sd
}t        |      |j                  }	| j                  j	                  d| d|	 dt                |j                  }|r1| j                  du r|j                  |       n|j!                  |       | j                  j	                  d| j"                   d       y# t$        $ r/}
| j                  j'                  dt(         d|
        Y d}
~
yd}
~
ww xY 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?namerB   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_valuerG   rH   _toggle_post_message	ExceptionerrorRED_X)r6   rI   r   r    r2   rB   jpserver_extensionsmsgextpkgr?   errs              r   toggle_server_extensionz0ToggleServerExtensionApp.toggle_server_extension   s    )Dt)
%
%$	EHHMMT55@@BC2k]STHHMM.zl;<HHMM-k]#>?&55FG&,&D&D&F#&99&{m 4; ;  %S/)-k: &;HF??$) o%nnGHHMMF;-q	8*EF '55F%%-MM+.NN;/ HHMM9$:S:S9TTUVW 	EHHNNU5')=cUCDD	Es   E5F 	G%%GGc                    | j                   st        j                  d       | j                   D ]  }| j                  |        y)'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitrj   )r6   args     r   startzToggleServerExtensionApp.start'  s7    HHUV?? 	.C((-	.r   N)rI   r:   r9   Noner9   rr   )r$   r%   r&   r;   rT   _descdescriptionr=   r	   ra   r[   rb   rj   rq   r'   r   r   rM   rM      s3    84DKEFM4El.r   c                  $    e Zd ZdZdZdZdZdZdZy)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enablingrB   N	r$   r%   r&   r;   rT   ru   ra   r[   rb   r'   r   r   rw   rw   /  s$    ?,DK M$$r   rw   c                  $    e Zd ZdZdZdZdZdZdZy)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	disablingrC   Nry   r'   r   r   r{   r{   >  s$    0-DK M%%r   r{   c                  ,    e Zd ZdZdZeZdZddZddZ	y)ListServerExtensionsAppz3An App that lists (and validates) Server Extensionszjupyter server extension listz<List all server extensions known by the configuration systemc           
        dddddddddf}|D ]  }t        di |}t        d|        d}t        |gt        j                  j                  ||            }|j                         }|j                         D ]  \  }}t        d| d|rt        nt                	 t        d	| d
       t        ||      }	|	j                         sd}
t        |
      |	j                  }t        d| d| dt                 | j                   j'                  d        y# t        $ r<}| j                   j#                  dd       t        dt$         d|        Y d}~d}~ww xY w)zList all enabled and disabled server extensions, by config path

        Enabled extensions are validated, potentially generating warnings.
        TFr   zConfig dir: rF   r   z    rW   rQ   rR   rS   rU   rV   rO   )exc_infoNr'   )r   printr   r   r   r   r]   itemsGREEN_ENABLEDRED_DISABLEDr   r_   r^   r?   r`   rc   rY   debugre   rZ   )r6   configurationsoptionr   r   r   rf   rT   rB   	extensionrg   r?   ri   s                r   list_server_extensionsz.ListServerExtensionsApp.list_server_extensionsT  sq    /$/%0
 % 	F(262JL-.1I3",!#j)!DN #1"H"H"J!4!:!:!< 2gTF!WM,#OPQ
2-dV378 0dG LI$--/1(o-'//GF4&'!H:>?2 HHMM"1	( ! 2HHNN2N5F5'3%0112s    AD	E#'2EE#c                $    | j                          y)rl   N)r   r5   s    r   rq   zListServerExtensionsApp.starty  s    ##%r   Nrs   )
r$   r%   r&   r;   rT   r
   r?   ru   r   rq   r'   r   r   r~   r~   M  s    =*DGPK#J&r   r~   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                  b     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Z xZS )ServerExtensionAppzRoot level server extension appzjupyter server extensionz#Work with Jupyter server extensionsr:   ru   zEnable a server extensionzDisable a server extensionzList server extensions)rG   rH   listr(   subcommandsc                    t         |           dj                  t        | j                              }t        j                  d|z         y)rl   z, z)Please supply at least one subcommand: %sN)superrq   r   sortedr   rn   ro   )r6   subcmds	__class__s     r   rq   zServerExtensionApp.start  s9     ))F4#3#345<wFGr   rs   )r$   r%   r&   r;   rT   r
   r?   ru   __annotations__	_examplesexamplesrw   r{   r~   r   rq   __classcell__)r   s   @r   r   r     sW    )%DG<K<H ,-HI-/KL(*BC%K! H Hr   r   __main__)FF)r   boolr   r   r9   r:   )rF   FF)r   r:   r   r   r   r   r9   ztuple[str, ExtensionManager])NNFT)rI   r:   rB   zbool | NonerJ   zt.Anyr   r   r   r   r9   rr   )5r;   
__future__r   loggingr   rn   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!   r^   r#   r)   r   updater=   popr0   r>   r+   rT   r   r   r`   re   rL   rt   rM   rw   r{   r~   r   r   launch_instancemainr$   r'   r   r   <module>r      sV   ) #  	 
  / V V $  / B O0 X]))6:)PT)!)6	z 	 !# "   :## $ T  !4 (    #D%
 :
 #!"'% .
 # $%
 c
 #d%
 ,
5"$J $D)H "$ $   Z'' (Kz K. -/GGtO(,.GGtO("$''T/t!ww$D  %%% % 	%
 % 
%4 	 ## $ 		#t  		
T "  +D-
 9
 +!"'- 0
 + $-
 L
 +d-
 ,
5"$J +h 	PG./ G.T%7 %& 8 &.&. .&b	H) H0 )) zF r   