
    Ke4                       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 dGdHdZ	 dIdJdZ G 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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d0Z)	 	 	 	 dKdLd6Z*i Z e                     e$j                    e !                    dd           e !                    dd           e                     d7ddiid8fd7dddid9fd7ddiid:fd7d"diid#fd$           e d%         e d"<   d;Z+ G d< d7e$          Z, G d= d>e,          Z- G d? d@e,          Z. G dA dBe$          Z/dCZ0 G dD dEe$          Z1e1j2        Z3e4dFk    r e3             dS dS )Mz#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                n    | r|rd}| rt                      }n|rt          d         }n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      Hlib/python3.11/site-packages/jupyter_server/extension/serverextension.py_get_config_dirr      sP      
 
 '#%%	 ' ##A&M    jupyter_server_config.d	write_dirtuple[str, ExtensionManager]c                    t          ||          }t          |gt          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   )r   r   r   
config_dirr    extension_managers         r   _get_extmanager_for_contextr&   ,   sj      !dzBBBJ+$j)<<  N )%   (((r   c                      e Zd ZdS )ArgumentConflictN)__name__
__module____qualname__ r   r   r(   r(   G   s        Dr   r(   z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pyr3   _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dS )r/   zBase extension installer appFTzWhether to do a user install)confighelpz Use the sys.prefix as the prefixr1   r   r   c                    dS )zA default format for messagesz%(message)sr,   selfs    r   _log_format_defaultz$BaseExtensionApp._log_format_default   s    }r   c                8    t          | j        | j                  S )Nr   )r   r   r   r9   s    r   r$   zBaseExtensionApp.config_dir   s    DI$/JJJJr   N)r   r   )r)   r*   r+   __doc__r   _log_formatter_clsr-   flagsr4   aliasesr
   versionr	   r   r   r0   r;   propertyr$   r,   r   r   r/   r/   z   s        &&%EGG4d)GHHHDd4.PQQQJT%+JKKKF    K K K XK K Kr   ntz[32menabled[0menabledz[31mdisabled[0mdisabledz[32mOK[0mokz[31m X[0mz Ximport_namebool | Noneparentt.AnyNonec                    |rdn|}t          ||          }t          |gt          j                            |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)rG   rD   rI   r   r   r$   managers          r   toggle_server_extension_pythonrP      s     .JJ dzBBBJ$$j2KL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                  J    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 )rQ   z.A base class for enabling/disabling extensionsz'jupyter server extension enable/disable rG   r   r   rK   c                   t          | j        | j                  \  }}	 | j                            | j                                         d|            | j                            d|            | j                            d| d           t          |          }|                                 |j	        }| j                            d| d| dt                      |j        }|r4| j        d	u r|                    |           n|                    |           | j                            d
| j         d           dS # t           $ r0}| j                            dt"           d|            Y d}~dS 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 ...)name       Tz    - Extension successfully .z     z Validation failed: N)r&   r   r   loginfo_toggle_pre_message
capitalizer   validaterA   GREEN_OKr    _toggle_valuerM   rN   _toggle_post_message	ExceptionRED_X)r:   rG   r$   r%   extpkgrA   r6   errs           r   toggle_server_extensionz0ToggleServerExtensionApp.toggle_server_extension   s    )Dt)
 )
 )
%
%	DHMMT5@@BBSSkSSTTTHMM;z;;<<<HMM>k>>>???%;777FOOnGHMME;EEEE8EEFFF '5F 0%--MM+....NN;/// HMMV$:SVVVWWWWW 	D 	D 	DHMMB%BBSBBCCCCCCCCC	Ds   D$E 
F %E;;F c                z    | j         st          j        d           | j         D ]}|                     |           dS )'Perform the App's actions as configuredz>Please specify a server extension/package to enable or disableN)
extra_argssysexitrg   )r:   args     r   startzToggleServerExtensionApp.start  sP     	WHUVVV? 	. 	.C((----	. 	.r   N)rG   r   r   rK   r   rK   )r)   r*   r+   r=   rW   _descdescriptionr?   r	   ra   r]   rb   rg   rn   r,   r   r   rQ   rQ      sm        884DKEDFFM&D &D &D &DP. . . . . .r   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enablingrD   N	r)   r*   r+   r=   rW   rq   ra   r]   rb   r,   r   r   rs   rs      s5        ??,DK M$$r   rs   c                  &    e Zd ZdZdZdZdZdZdZdS )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	disablingrE   Nru   r,   r   r   rw   rw   /  s5        00-DK M%%r   rw   c                  .    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 systemr   rK   c           
        dddddddddf}|D ]}t          di |}| j                            d|            d}t          |gt          j                            ||                    }|                                }|                                D ]\  }}| j                            d| d|rt          nt                      	 | j                            d	| d
           t          ||          }	|	                                sd}
t          |
          |	j        }| j                            d| d| dt                      # t           $ rX}d}t#          | j                  t&          j        k    rd}| j                            dt,           d| |           Y d}~d}~ww xY w| j                            d           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    rY   rU   rV   )rW   rD   zvalidation failedrX   )exc_infoNrS   r,   )r   r[   r\   r   r!   r"   r#   get_jpserver_extensionsitemsGREEN_ENABLEDRED_DISABLEDr   r_   
ValueErrorrA   r`   rc   int	log_levelloggingDEBUGwarningrd   )r:   configurationsoptionr$   r   r    jpserver_extensionsrW   rD   	extensionmsgrA   rf   r|   s                 r   list_server_extensionsz.ListServerExtensionsApp.list_server_extensionsE  s8    //$//%00
 % 	 	F(22622JHMM5556661I3",!#j)!D!D  N #1"H"H"J"J!4!:!:!<!< P PgXTXXW,VMM,XXYYYPHMM"?d"?"?"?@@@ 0dG L L LI$--// .1(oo-'/GHMM"F4"F"F'"F"FH"F"FGGGG  P P P$H4>**gm;;#'H$$%;e%;%;c%;%;h$OOOOOOOO	P HMM"5	 	s   BE
F2AF--F2c                .    |                                   dS )ri   N)r   r9   s    r   rn   zListServerExtensionsApp.startl  s    ##%%%%%r   Nro   )
r)   r*   r+   r=   rW   r
   rA   rq   r   rn   r,   r   r   rz   rz   >  sR        ==*DGPK% % % %N& & & & & &r   rz   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   rq   zEnable a server extensionzDisable a server extensionzList server extensions)rM   rN   listdictsubcommandsr   rK   c                    t                                                       d                    t          | j                            }t          j        d|z             dS )ri   z, z)Please supply at least one subcommand: %sN)superrn   r#   sortedr   rk   rl   )r:   subcmds	__class__s     r   rn   zServerExtensionApp.start  sN     ))F4#34455<wFGGGGGr   ro   )r)   r*   r+   r=   rW   r
   rA   rq   __annotations__	_examplesexamplesrs   rw   rz   r   rn   __classcell__)r   s   @r   r   r   x  s         ))%DG<K<<<<H ,-HI-/KL(*BC K    H H H H H H H H H Hr   r   __main__)FF)r   r   r   r   r   r   )r   FF)r   r   r   r   r   r   r   r   )NNFT)rG   r   rD   rH   rI   rJ   r   r   r   r   r   rK   )5r=   
__future__r   r   r!   rk   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?   popr4   r@   r/   rW   r   r   r`   rd   rP   rp   rQ   rs   rw   rz   r   r   launch_instancemainr)   r,   r   r   <module>r      s,   ) ) ) # " " " " "  				 



     / / / / / / V V V V V V V V V V $ $ $ $ $ $       / / / / / / B B B B B B O O O O O O O O    0 X]) ) ) ) )6	 	 	 	 	z 	 	 	 !# " " " "   :# $ $ $ T    !4 ( ( (    #D%
 :
 #!"'% % .
 # $%
 c
 #d%
 ,
5" "$ $ $J $D)H "$ $ $ $ $   Z' ( ( (K K K K Kz K K K. -/GtOO((,.GtOO(("$'T//t!w$D  % % % % %4 	 # $ $ $ 		#t    		
T " " "  +D-
 9
 +!"'- - 0
 + $-
 L
 +d-
 ,
5" "$ $ $J +h 	P9. 9. 9. 9. 9./ 9. 9. 9.x% % % % %7 % % %& & & & & 8 & & &0& 0& 0& 0& 0&. 0& 0& 0&f	H H H H H) H H H0 ) zDFFFFF r   