
    ^h5                       % S r SSKJr  SSKrSSKrSSKrSSKrSSKJ	r	  SSK
JrJrJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  S<S=S jjr S>       S?S jjr " S S\5      r0 rS\S'   \R?                  \	R@                  5        \RC                  SS5        \RC                  SS5        \R?                  SSS00S4SSSS.0S4SSS00S4SSS00S4S.5        \S   \S'   0 r"S\S '   \"R?                  \	RF                  5         " S! S\	5      r$\RJ                  S":w  a  S#OS$r&\RJ                  S":w  a  S%OS&r'\RJ                  S":w  a  S'OS(r(\RJ                  S":w  a  S)OS*r)    S@           SAS+ jjr*0 r \ R?                  \$R@                  5        \ RC                  SS5        \ RC                  SS5        \ R?                  S,SS00S-4S,SSS.0S.4S,SS00S/4S,SS00S4S.5        \ S   \ S'   S0r+ " S1 S,\$5      r, " S2 S3\,5      r- " S4 S5\,5      r. " S6 S7\$5      r/S8r0 " S9 S:\$5      r1\1Rd                  r3\4S;:X  a  \3" 5         gg)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                    U (       a	  U(       a  SnU (       a  [        5       nU$ U(       a  [        S   nU$ [        S   nU$ )a  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      b/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_server/extension/serverextension.py_get_config_dirr      sG     

#%
 M	 
 # M $A&M    c                |    [        XS9n[        U/[        R                  R	                  X05      S9n[        US9nX54$ )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!   -   sH      !dBJ+$j<N )% ((r   c                      \ rS rSrSrg)ArgumentConflictH    N)__name__
__module____qualname____firstlineno____static_attributes__r%   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pyr2   _base_aliasesc                  v    \ rS rSrSr\r\r\	r
\r\" SSSS9r\" SSSS9r\" SSSS9rSS	 jr\SS
 j5       rSrg)r.   {   zBase extension installer appFTzWhether to do a user install)confighelpz Use the sys.prefix as the prefixr0   c                    g)zA default format for messagesz%(message)sr%   selfs    r   _log_format_default$BaseExtensionApp._log_format_default   s    r   c                >    [        U R                  U R                  S9$ )Nr   )r   r   r   r9   s    r   r   BaseExtensionApp.config_dir   s    DII$//JJr   r%   N)returnstr)r&   r'   r(   r)   __doc__r   _log_formatter_clsr,   flagsr3   aliasesr
   versionr	   r   r   r/   r;   propertyr   r*   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                    U(       a  SOUn[        X4S9n[        U/[        R                  R	                  US5      S9nU(       a  UR                  U 5        gUR                  U 5        g)zRToggle 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_namerH   parentr   r   r   managers          r   toggle_server_extension_pythonrR      sV     JJ d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                  N    \ rS rSrSrSr\r\r\	" 5       r
SrSrS	S jrS
S jrSrg)rS      z.A base class for enabling/disabling extensionsz'jupyter server extension enable/disable c                   [        U R                  U R                  S9u  p# U R                  R	                  U R
                  R                  5        SU 35        U R                  R	                  SU 35        U R                  R	                  SU S35        UR                  nSnU(       a*  UR                  5       nX;  a  SU S3n[        U5      eXa   n[        XS	9nUR                  5       (       d  S
n[        U5      eUR                  n	U R                  R	                  SU SU	 S[         35        UR                  nU(       a2  U R                  SL a  UR                  U5        OUR!                  U5        U R                  R	                  SU R"                   S35        g! [$         a/  n
U R                  R'                  S[(         SU
 35         Sn
A
gSn
A
ff = f)zChange 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?namerH   validation failed       Tz    - Extension successfully .z     z Validation failed: N)r!   r   r   loginfo_toggle_pre_message
capitalizer   get_jpserver_extensions
ValueErrorr   validaterE   GREEN_OK_toggle_valuerM   rN   _toggle_post_message	ExceptionerrorRED_X)r:   rO   r   r    r6   rH   jpserver_extensionsmsgextpkgrE   errs              r   toggle_server_extension0ToggleServerExtensionApp.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&{m 4; ;  %S/)-: &;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   FF$ $
G.%GGc                    U R                   (       d  [        R                  " S5        U R                    H  nU R                  U5        M     g)'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitrq   )r:   args     r   startToggleServerExtensionApp.start'  s2    HHUV??C((- #r   r%   N)rO   r@   r?   Noner?   r{   )r&   r'   r(   r)   rA   r[   _descdescriptionrC   r	   rh   rb   ri   rq   ry   r*   r%   r   r   rS   rS      s3    84DKEFM4El.r   c                  ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
EnableServerExtensionAppi/  z5An 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enablingrH   r%   Nr&   r'   r(   r)   rA   r[   r~   rh   rb   ri   r*   r%   r   r   r   r   /  s$    ?,DK M$$r   r   c                  ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
DisableServerExtensionAppi>  z&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	disablingrI   r%   Nr   r%   r   r   r   r   >  s$    0-DK M%%r   r   c                  8    \ rS rSrSrSr\rSrS	S jr	S	S jr
Srg)
ListServerExtensionsAppiM  z3An App that lists (and validates) Server Extensionszjupyter server extension listz<List all server extensions known by the configuration systemc           
        SSS.SSS.SSS.4nU GH  n[        S0 UD6n[        SU 35        Sn[        U/[        R                  R                  X45      S9nUR                  5       nUR                  5        H  u  px[        SU SU(       a  [        O[         35         [        S	U S
35        [        XxS9n	U	R                  5       (       d  Sn
[        U
5      eU	R                  n[        SU SU S[         35        M     U R                   R'                  S5        GM     g! [         a:  nU R                   R#                  SSS9  [        S[$         SU 35         SnAM  SnAff = f)zList all enabled and disabled server extensions, by config path

Enabled extensions are validated, potentially generating warnings.
TFr   zConfig dir: rL   r   z    r^   rX   rY   rZ   r\   r]   rV   )exc_infoNr%   )r   printr   r   r   r   rd   itemsGREEN_ENABLEDRED_DISABLEDr   rf   re   rE   rg   rj   r`   debugrl   ra   )r:   configurationsoptionr   r   r   rm   r[   rH   	extensionrn   rE   rp   s                r   list_server_extensions.ListServerExtensionsApp.list_server_extensionsT  sd    /$/%0
 %F(262JL-.1I3",!#j!DN #1"H"H"J!4!:!:!<TF!WM,#OPQ
2-dV378 0d LI$--//1(o-'//GF4&'!H:>? "= HHMM"1 %( ! 2HHNN2N5F5'3%0112s    AD##
E'-/E""E'c                $    U R                  5         g)rt   N)r   r9   s    r   ry   ListServerExtensionsApp.starty  s    ##%r   r%   Nr|   )r&   r'   r(   r)   rA   r[   r
   rE   r~   r   ry   r*   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                  n   ^  \ rS rSr% SrSr\rSrS\	S'   \
r\S4\S4\S	4S
.rS\	S'   SU 4S jjrSrU =r$ )ServerExtensionAppi  zRoot level server extension appzjupyter server extensionz#Work with Jupyter server extensionsr@   r~   zEnable a server extensionzDisable a server extensionzList server extensions)rM   rN   listr+   subcommandsc                   > [         TU ]  5         SR                  [        U R                  5      5      n[
        R                  " SU-  5        g)rt   z, z)Please supply at least one subcommand: %sN)superry   r   sortedr   rv   rw   )r:   subcmds	__class__s     r   ry   ServerExtensionApp.start  s9     ))F4#3#345<wFGr   r%   r|   )r&   r'   r(   r)   rA   r[   r
   rE   r~   __annotations__	_examplesexamplesr   r   r   r   ry   r*   __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   r?   r@   )rL   FF)r   r@   r   r   r   r   r?   ztuple[str, ExtensionManager])NNFT)rO   r@   rH   zbool | NonerP   zt.Anyr   r   r   r   r?   r{   )5rA   
__future__r   loggingr   rv   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!   re   r#   r,   r   updaterC   popr3   rD   r.   r[   r   r   rg   rl   rR   r}   rS   r   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   