o
    ^i7                     @  s<  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e"e#dZ$d4ddZ%d5ddZ&				d6d7d!d"Z'd8d%d&Z(	d9d:d'd(Z)d;d<d+d,Z*G d-d. d.eZ+d=d/d0Z,d>d?d2d3Z-dS )@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	templatesdatadict[str, Any]returnstrc                 C  sF   d| v r
| d }|S d| v rt | d tr| d dd}|S d}|S )z#Get the url from the extension datahomepage
repositoryurl )
isinstancedictget)r   r    r   S/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/jupyterlab_server/config.pyget_package_url   s   r!   labextensions_path	list[str]c                 C  sZ  i }| D ]}t tt|ddtt|dddD ]}t|dd}t|}W d   n1 s0w   Y  |d |vrt|d |d	 |d
dt||t	
|d|dt |dt d	}d|v rxd|di v rxt|ddd|d< t	t	
|d}t	|rt|dd}t||d< W d   n1 sw   Y  |||d < qq|S )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)r"   federated_extensionsr.   r/   fidpkgdatar   install_pathr   r   r    get_federated_extensions(   s@   

r=   allFapp_settings_dir
str | NoneloggerLogger | Nonelevelinclude_higher_levelsboolc                 C  s   t ||}|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   )r?   rA   rC   rD   cmr   r   r    get_static_page_configL   s   

rI   pathr   c                 C  s\   t | dd}| drt|W  d   S t|W  d   S 1 s'w   Y  dS )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)r3   endswithjson5r5   r4   )rJ   r:   r   r   r    load_config_   s   
$rM   c                   s  i }d}|r@t |dt |dg}|D ]-}t|r?t|r?t|}|dfD ]}||v r7dd || D ||< q&t||  nqt|dd}	t||	 i }
g  }|d	< t| }||i  |	 D ]c\}}d
|d vrv|ru|
d|d  qa|d d
 }|d |d d}d|v r|d |d< d|v r|d |d< d|v r|d |d< |d|d< || |d }|d |r|d | |
|d < qa|rt|}t |dd}t|rt|dd}t|}W d   n1 sw   Y  |d di }|	 D ]\}}||
v rq ||r|| |
|< q i }t|
D ]}|| |du r-q|
| }|D ]}d||< q3q|}|||g  |||< |	 D ]\} t tre fdd D ||< qP|S )z/Get the page config for the application handlerdisabledExtensionszpage_config.json5zpage_config.jsondeferredExtensionsc                 S  s   i | ]}|d qS )Tr   ).0keyr   r   r    
<dictcomp>   s    z#get_page_config.<locals>.<dictcomp>r>   )rA   rC   r9   _buildr-   z%s is not a valid extensionr)   r5   )r)   r5   	extensionmimeExtensionstyleentrypointsstaticr$   r&   r'   NextensionMetadataTc                   s   g | ]} | r|qS r   r   )rP   subkeyvaluer   r    
<listcomp>   s    z#get_page_config.<locals>.<listcomp>)r2   r6   r8   getsizerM   r   rI   r=   
setdefaultitemswarningr   appendr7   r3   r4   r5   sortedupdater   r   )r"   r?   rA   rF   disabled_keyconfig_pathsrJ   r   rQ   static_page_configdisabled_by_extensions_all
extensionsfederated_exts_ext_dataextbuildrT   r)   app_dirpackage_data_filer:   app_dataall_ext_dataextdisabled_by_extensionsdisabled_listitemrollup_disabledr   r[   r    get_page_configr   s   




rw   rF   Nonec                 C  s   t |}|d|  dS )zWrite page config to diskrF   N)rG   set)rF   rC   rH   r   r   r    write_page_config   s   rz   c                   @  s  e Zd ZdZedddjddZedddjddZedddjddZed	d
djddZ	edddjddZ
ee ddjddZee ddjddZedddjddZedddjddZedddjddZeddjddZedddjddZedddjddZeddjddZedddjddZeddjddZeddjddZeddZedddjddZeddjddZeddjddZedddjddZedddjddZedddjddZe d dEd#d$Z!e d%dEd&d'Z"e d(dFd*d+Z#e d,dEd-d.Z$e d/dEd0d1Z%e d2dEd3d4Z&e d5dEd6d7Z'e d8dEd9d:Z(e d;dEd<d=Z)e d>dEd?d@Z*e dAdEdBdCZ+dDS )G	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.templates_dirr   r   c                 C  s   t S )N)DEFAULT_TEMPLATE_PATHselfr   r   r    _default_templates_dir=  s   z LabConfig._default_templates_dirlabextensions_urlc                 C     t | jdS )Nzextensions/ujoinapp_urlr   r   r   r    _default_labextensions_urlA     z$LabConfig._default_labextensions_urlr"   r#   c                 C  s   t dS )Nlabextensions)r
   r   r   r   r    _default_labextensions_pathE  s   z%LabConfig._default_labextensions_pathworkspaces_urlc                 C  r   )Nworkspaces/r   r   r   r   r    _default_workspaces_urlI  r   z!LabConfig._default_workspaces_urlworkspaces_api_urlc                 C     t | jddS )Napir   r   r   r   r   r    _default_workspaces_api_urlM     z%LabConfig._default_workspaces_api_urlsettings_urlc                 C  r   )Nr   z	settings/r   r   r   r   r    _default_settings_urlQ  r   zLabConfig._default_settings_urllistings_urlc                 C  r   )Nr   z	listings/r   r   r   r   r    _default_listings_urlU  r   zLabConfig._default_listings_url
themes_urlc                 C  r   )Nr   zthemes/r   r   r   r   r    _default_themes_urlY  r   zLabConfig._default_themes_urllicenses_urlc                 C  r   )Nr   z	licenses/r   r   r   r   r    _default_licenses_url]  r   zLabConfig._default_licenses_urltree_urlc                 C  r   )Nztree/r   r   r   r   r    _default_tree_urla  r   zLabConfig._default_tree_urltranslations_api_urlc                 C  r   )Nr   ztranslations/r   r   r   r   r    _default_translations_api_urle  r   z'LabConfig._default_translations_api_urlN)r   r   r   r#   ),__name__
__module____qualname____doc__r   tagapp_nameapp_versionapp_namespacer   r?   r   extra_labextensions_pathr"   r~   
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   r   r    r{      s    			

	r{   c                   C  s   g dS )z9
    Returns the levels where configs can be stored.
    )r>   user
sys_prefixsystemapprT   r   r   r   r   r    get_allowed_levelsj  s   r   r   c                 C  s   ddl m} t }| |vrd| }t|d}| dkr!t|dS g t|d gt gg d}|r9||| d n| g}g d}}	|D ]$}
||
 D ]}|t	
|| qI|	du rg||
 rgt	
||
 d |}	qCt||	d	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: 	labconfigr>   )config_dir_name)r   r   r   r   rT   N)read_config_pathwrite_config_dir)jupyter_core.pathsr   r   
ValueErrorr   r   r	   indexrb   r6   r   )rC   rD   r   allowedmsgconfig_namepathslevelsread_config_pathsr   _levelpr   r   r    rG   q  s.   


rG   )r   r   r   r   )r"   r#   r   r   )NNr>   F)
r?   r@   rA   rB   rC   r   rD   rE   r   r   )rJ   r   r   r   )NN)r"   r#   r?   r@   rA   rB   r   r   )r>   )rF   r   rC   r   r   rx   r   )F)rC   r   rD   rE   r   r   ).r   
__future__r   r4   os.pathrJ   r6   globr   	itertoolsr   loggingr   r   r2   typingr   rL   r   r   r	   r
   &jupyter_server.services.config.managerr   r   jupyter_server.utilsr   r   	traitletsr   r   r   r   r   r7   __file__r   r!   r=   rI   rM   rw   rz   r{   r   rG   r   r   r   r    <module>   s<    

%
d 
