
    }tf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 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      r/var/www/html/software/conda/envs/higlass/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       t        |      }|j                          |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 ...)name       Tz    - Extension successfully .z     z Validation failed: N)r!   r   r   loginfo_toggle_pre_message
capitalizer   validater?   GREEN_OKr   _toggle_valuerG   rH   _toggle_post_message	ExceptionRED_X)r6   rI   r   r    extpkgr?   r2   errs           r   toggle_server_extensionz0ToggleServerExtensionApp.toggle_server_extension   sR    )Dt)
%
%	DHHMMT55@@BC2k]STHHMM.zl;<HHMM-k]#>?%;7FOOnnGHHMMF;-q	8*EF '55F%%-MM+.NN;/ HHMM9$:S:S9TTUVW 	DHHMME%(<SEBCC	Ds   D-E 	F%FF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exitrc   )r6   args     r   startzToggleServerExtensionApp.start  s7    HHUV?? 	.C((-	.r   N)rI   r:   r9   Noner9   rk   )r$   r%   r&   r;   rS   _descdescriptionr=   r	   r]   rY   r^   rc   rj   r'   r   r   rM   rM      s3    84DKEFM&DP.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;   rS   rn   r]   rY   r^   r'   r   r   rp   rp   !  s$    ?,DK M$$r   rp   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   Nrr   r'   r   r   rt   rt   0  s$    0-DK M%%r   rt   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 ]H  }t        di |}| j                  j                  d|        d}t        |gt        j
                  j                  ||            }|j                         }|j                         D ]  \  }}| j                  j                  d| d|rt        nt                	 | j                  j                  d	| d
       t        ||      }	|	j                         sd}
t        |
      |	j                  }| j                  j                  d| d| dt                 | j                  j                  d       K y# t         $ r\}d}t#        | j$                        t&        j(                  k  rd}| j                  j+                  dt,         d| |       Y d}~2d}~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    rU   rQ   rR   )rS   rB   zvalidation failedrT   )exc_infoNrO   r'   )r   rW   rX   r   r   r   r   get_jpserver_extensionsitemsGREEN_ENABLEDRED_DISABLEDr   r[   
ValueErrorr?   r\   r_   int	log_levelloggingDEBUGwarningr`   )r6   configurationsoptionr   r   r   jpserver_extensionsrS   rB   	extensionmsgr?   rb   ry   s                 r   list_server_extensionsz.ListServerExtensionsApp.list_server_extensionsF  s    /$/%0
 % 	F(262JHHMML561I3",!#j)!DN #1"H"H"J!4!:!:!< PgTF!WM,+WXYPHHMM$5dV3"?@ 0dG LI$--/1(o-'//GHHMMF4&'!H:"FGP" HHMM"5	( ! P$H4>>*gmm;#'HH$$veWAcU%;h$OO	Ps    A=E	G'AF>>Gc                $    | j                          y)re   N)r   r5   s    r   rj   zListServerExtensionsApp.startm  s    ##%r   Nrl   )
r$   r%   r&   r;   rS   r
   r?   rn   r   rj   r'   r   r   rw   rw   ?  s    =*DGPK%N&r   rw   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:   rn   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)re   z, z)Please supply at least one subcommand: %sN)superrj   r   sortedr   rg   rh   )r6   subcmds	__class__s     r   rj   zServerExtensionApp.start  s9     ))F4#3#345<wFGr   rl   )r$   r%   r&   r;   rS   r
   r?   rn   __annotations__	_examplesexamplesrp   rt   rw   r   rj   __classcell__)r   s   @r   r   r   y  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   rk   )5r;   
__future__r   r   r   rg   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+   rS   r|   r}   r\   r`   rL   rm   rM   rp   rt   rw   r   r   launch_instancemainr$   r'   r   r   <module>r      sT   ) #  	 
  / 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9./ 9.x%7 %& 8 &0&. 0&f	H) H0 )) zF r   