
    Xh7                       d Z ddlmZ ddl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 ddlmZ ddlZdd	lmZmZmZ dd
lmZmZ ddlmZ ddlmZmZmZm Z m!Z!  ej                   ejD                  e#      d      Z$ddZ%ddZ&	 	 	 	 d	 	 	 	 	 	 	 	 	 ddZ'ddZ(	 d	 	 	 	 	 	 	 ddZ)dd dZ* G d de      Z+d!dZ,d"d#dZ-y)$zJupyterLab Server config    )annotationsN)iglob)chain)Logger)join)Any)SYSTEM_CONFIG_PATHjupyter_config_dirjupyter_path)ConfigManagerrecursive_update)url_path_join)Bool	HasTraitsListUnicodedefault	templatesc                |    d| v r| d   }|S d| v r*t        | d   t              r| d   j                  dd      }|S d}|S )z#Get the url from the extension datahomepage
repositoryurl )
isinstancedictget)datar   s     L/var/www/html/myenv/lib/python3.12/site-packages/jupyterlab_server/config.pyget_package_urlr      s_     T:
 J	 
	*T,-?"F< $$UB/ J J    c                   i }| D ]  }t        t        t        |dd            t        t        |ddd                  D ]e  }t        |d      5 }t	        j
                  |      }ddd       d   |vs7t        |d   |d	   |j                  d
d      t        |      |t        j                  |      d|j                  dt                     |j                  dt                     	      }d|v rAd|j                  di       v r-t        |j                  d      j                  d            |d<   t        j                  t        j                  |      d      }t        j                  |      r.t        |d      5 }t	        j
                  |      |d<   ddd       |||d   <   h  |S # 1 sw Y   IxY w# 1 sw Y   &xY w)z+Get the metadata about federated extensionsz[!@]*package.jsonz@**utf-8encodingNnameversiondescriptionr   Fdependencies
jupyterlab)	r'   r(   r)   r   ext_dirext_pathis_localr*   r+   r   r   )r   zinstall.jsoninstall)r   r   pjoinopenjsonloadr   r   r   ospdirnamer   exists)labextensions_pathfederated_extensionsr,   r-   fidpkgdatar   install_paths           r   get_federated_extensionsr<   (   s   % :%.9:%sN;<
 	:H h1 )S))C.)v&:: #I. 'M2 >'0# [[2"!(^TV!D&{{<@
  7*uLRT8U/U)-'++l2K2O2OPU2V)WD&"xxH(=~N::l+lW= 9*.))C.Y959$T&\27	::<  1) )*9 9s   F,;F9,F69Gc                <    t        ||      }|j                  d      S )a  Get the static page config for JupyterLab

    Parameters
    ----------
    logger: logger, optional
        An optional logging object
    level: string, optional ['all']
        The level at which to get config: can be 'all', 'user', 'sys_prefix', or 'system'
    page_config)_get_config_managerr   )app_settings_dirloggerlevelinclude_higher_levelscms        r   get_static_page_configrE   L   s      
U$9	:B66-  r    c                    t        | d      5 }| j                  d      rt        j                  |      cddd       S t	        j                  |      cddd       S # 1 sw Y   yxY w)zLoad either a json5 or a json config file.

    Parameters
    ----------
    path : str
        Path to the file to be loaded

    Returns
    -------
    Dict[Any, Any]
        Dictionary of json or json5 data
    r$   r%   z.json5N)r1   endswithjson5r3   r2   )pathr9   s     r   load_configrJ   _   sS     
dW	% =="::c?  yy~  s   &AAA%c                   i }d}|rt        |d      t        |d      g}|D ]k  }t        j                  |      st        j                  |      s/t	        |      }|dfD ]  }||v s||   D ci c]  }|d c}|<     t        ||        n t        |d      }	t        ||	       i }
g x}|d<   t        |       }|j                  |i        |j                         D ]  \  }}d	|d
   vr|r|j                  d|d          %|d
   d	   }|d   |d   d}d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   |j                  d      |d<   |j                  |       |d   }|d
   j                  |      s|d
   |   |
|d   <    |rt        j                  |      }t        |dd      }t        j                  |      rwt        |d      5 }t        j                   |      }ddd       d
   j                  di       }|j                         D ]$  \  }}||
v r|j                  |      s||   |
|<   & i }t#        |
      D ]*  }||   j                  |      du r|
|   }|D ]  }d||<   	 , |}|j%                  |j                  |g              |||<   |j                         D ]/  \  }}t'        |t(              s|D cg c]
  }||   s	| c}||<   1 |S c c}w # 1 sw Y   xY wc c}w )z/Get the page config for the application handlerdisabledExtensionszpage_config.json5zpage_config.jsondeferredExtensionsTall)rA   rB   r8   _buildr+   z%s is not a valid extensionr'   r3   )r'   r3   	extensionmimeExtensionstyleentrypointsstaticr"   r$   r%   NextensionMetadata)r0   r4   r6   getsizerJ   r   rE   r<   
setdefaultitemswarningr   appendr5   r1   r2   r3   sortedupdater   r   )r7   r@   rA   r>   disabled_keyconfig_pathsrI   r   keystatic_page_configdisabled_by_extensions_all
extensionsfederated_exts_ext_dataextbuildrP   r'   app_dirpackage_data_filer9   app_dataall_ext_dataextdisabled_by_extensionsdisabled_listitemrollup_disabledvaluesubkeys                                 r   get_page_configrr   r   s   
 K'L "$78"$67
 ! 		Dzz$CKK$5"4((*>? ECd{:>s)$D3S$Y$DS	E !d3		 0vUK["45 "$799J34-.@AN <,%++- `88L11<hv>NOL)(3%f-x7GH	("%-k%:Ik"h&)1/)BIo&h!)'!2Ig#+<<#>	- )$ L!%%l3;CL;QR^;_&x'78-`4 ++./!'8^D::'('': *c99S>*#L1556I2NL!-!3!3!5 MX44<<-6>|6L.s3	M  12 0|$((.$6248! 	0D+/"4(	00 -O;??<<= /K "'') M
UeT"5:L6eFmLKM Y %E`* *4  Ms   .
KK$
K1K1$K.c                >    t        |      }|j                  d|        y)zWrite page config to diskr>   N)r?   set)r>   rB   rD   s      r   write_page_configru      s    	U	#BFF=+&r    c                      e Zd ZdZ edd      j                  d      Z edd      j                  d      Z edd      j                  d      Z ed	d
      j                  d      Z	 edd      j                  d      Z
 e e       d      j                  d      Z e e       d      j                  d      Z edd      j                  d      Z edd      j                  d      Z edd      j                  d      Z ed      j                  d      Z edd      j                  d      Z edd      j                  d      Z ed      j                  d      Z edd      j                  d      Z ed      j                  d      Z ed      j                  d      Z ed      Z edd      j                  d      Z ed      j                  d      Z ed      j                  d      Z edd      j                  d      Z edd      j                  d      Z edd      j                  d      Z e d       d7d!       Z! e d"      d7d#       Z" e d$      d8d%       Z# e d&      d7d'       Z$ e d(      d7d)       Z% e d*      d7d+       Z& e d,      d7d-       Z' e d.      d7d/       Z( e d0      d7d1       Z) e d2      d7d3       Z* e d4      d7d5       Z+y6)9	LabConfigz)The lab application configuration object.r   zThe name of the application.)helpT)configzThe version of the application.z!The namespace of the application.z/labz!The url path for the application.z#The application settings directory.z7Extra paths to look for federated JupyterLab extensionszAThe standard paths to look in for federated JupyterLab extensionsz$The application templates directory.z[The optional location of local static files. If given, a static file handler will be added.z+The url for federated JupyterLab extensionsz%The url path of the settings handler.z5The optional location of the user settings directory.zhThe optional location of the settings schemas directory. If given, a handler will be added for settings.z#The url path of the workspaces API.zjThe optional location of the saved workspaces directory. If given, a handler will be added for workspaces.zThe listings url.zThe theme url.zThe third-party licenses url.z\The optional location of the themes directory. If given, a handler will be added for themes.z)The url path of the translations handler.z!The url path of the tree handler.zOWhether to cache files on the server. This should be `True` except in dev mode.z7Whether a notebook should start a kernel automatically.FzOWhether getting a relative (False) or absolute (True) path when copying a path.template_dirc                    t         S )N)DEFAULT_TEMPLATE_PATHselfs    r   _default_template_dirzLabConfig._default_template_dir=  s    $$r    labextensions_urlc                .    t        | j                  d      S )Nzextensions/ujoinapp_urlr}   s    r   _default_labextensions_urlz$LabConfig._default_labextensions_urlA      T\\=11r    r7   c                    t        d      S )Nlabextensions)r   r}   s    r   _default_labextensions_pathz%LabConfig._default_labextensions_pathE  s    O,,r    workspaces_urlc                .    t        | j                  d      S )Nworkspaces/r   r}   s    r   _default_workspaces_urlz!LabConfig._default_workspaces_urlI  r   r    workspaces_api_urlc                0    t        | j                  dd      S )Napir   r   r}   s    r   _default_workspaces_api_urlz%LabConfig._default_workspaces_api_urlM  s    T\\5-88r    settings_urlc                0    t        | j                  dd      S )Nr   z	settings/r   r}   s    r   _default_settings_urlzLabConfig._default_settings_urlQ      T\\5+66r    listings_urlc                0    t        | j                  dd      S )Nr   z	listings/r   r}   s    r   _default_listings_urlzLabConfig._default_listings_urlU  r   r    
themes_urlc                0    t        | j                  dd      S )Nr   zthemes/r   r}   s    r   _default_themes_urlzLabConfig._default_themes_urlY  s    T\\5)44r    licenses_urlc                0    t        | j                  dd      S )Nr   z	licenses/r   r}   s    r   _default_licenses_urlzLabConfig._default_licenses_url]  r   r    tree_urlc                .    t        | j                  d      S )Nztree/r   r}   s    r   _default_tree_urlzLabConfig._default_tree_urla  s    T\\7++r    translations_api_urlc                0    t        | j                  dd      S )Nr   ztranslations/r   r}   s    r   _default_translations_api_urlz'LabConfig._default_translations_api_urle  s    T\\5/::r    N)returnstrr   	list[str]),__name__
__module____qualname____doc__r   tagapp_nameapp_versionapp_namespacer   r@   r   extra_labextensions_pathr7   templates_dir
static_dirr   r   user_settings_dirschemas_dirr   workspaces_dirr   r   r   
themes_dirr   r   r   cache_filesnotebook_starts_kernelcopy_absolute_pathr   r   r   r   r   r   r   r   r   r   r   r    r    r   rw   rw      s   3r >?CC4CPH"#DEIIQUIVKB%HIMMUYMZMf#FGKKSWKXGr(MNRRZ^R_#	U 	cc  	[	cc  B%KLPPX\P]M
 
cc   )VW[[ \   GHLLTXLYL
I	cc  
% 
cc  !&KLPPX\P]
, 
cc   34888EL./3343@J ?@L
 
cc  #(STXX Y  ?@DDDDQH_ 
cc 
 "L	cc  ^ 
cc 
 ^% %  !2 "2 !"- #- 2 2 !"9 #9 ^7 7 ^7 7 \5 5 ^7 7 Z, , #$; %;r    rw   c                 
    g dS )z9
    Returns the levels where configs can be stored.
    )rN   user
sys_prefixsystemapprP   r   r   r    r   get_allowed_levelsr   j  s     GFr    c                   ddl m} t               }| |vrd| }t        |      d}| dk(  rt	        |      S g t
        |d   gt               gg d}|r||j                  |       d n| g}g d}	}|D ]V  }
||
   D ]'  }|j                  t        j                  ||             ) |	5||
   s;t        j                  ||
   d   |      }	X t	        ||		      S )
zgGet the location of config files for the current context
    Returns the string to the environment
    r   )ENV_CONFIG_PATHz"Page config level must be one of: 	labconfigrN   )config_dir_name)r   r   r   r   rP   N)read_config_pathwrite_config_dir)jupyter_core.pathsr   r   
ValueErrorr   r	   r
   indexrZ   r4   r   )rB   rC   r   allowedmsgconfig_namepathslevelsread_config_pathsr   _levelps               r   r?   r?   q  s   
 3 "GG27)<oK~[99 $&q)*#%&E 1FWW]]5)+,E7F*,d' Gv 	?A$$SXXa%=>	?#f"xxfa(8+F	G *;N^__r    )r   dict[str, Any]r   r   )r7   r   r   r   )NNrN   F)
r@   
str | NonerA   Logger | NonerB   r   rC   boolr   r   )rI   r   r   r   )NN)r7   r   r@   r   rA   r   r   r   )rN   )r>   r   rB   r   r   Noner   )F)rB   r   rC   r   r   r   ).r   
__future__r   r2   os.pathrI   r4   globr   	itertoolsr   loggingr   r   r0   typingr   rH   r   r	   r
   r   &jupyter_server.services.config.managerr   r   jupyter_server.utilsr   r   	traitletsr   r   r   r   r   r5   __file__r|   r   r<   rE   rJ   rr   ru   rw   r   r?   r   r    r   <module>r      s     #      !   S S R 7 = = !X!6D 	! J $( "'	! !! !  	!
 !&( aea!a5?aP]aaH'K;	 K;\G#`r    