o
    tfI6                     @  sd  d Z ddlm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
 ddlmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZ ddlmZmZ ddl 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- e	rddl.m/Z/ dZ0e1dZ2d+ddZ3G dd deeeZ4G dd  d e4Z5d,d&d'Z6d-d)d*Z7dS ).zJupyterLab Server handlers    )annotationsN)	lru_cache)TYPE_CHECKINGAny)urlparse)FileFindHandlerJupyterHandler)ExtensionHandlerJinjaMixinExtensionHandlerMixin)url_path_join)templateweb   )	LabConfigget_page_configrecursive_update)LicensesHandlerLicensesManager)ListingsHandlerfetch_listings)SettingsHandler)_get_overrides)ThemesHandler)TranslationsHandler)WorkspacesHandlerWorkspacesManager)LabServerAppzP/(?P<mode>{}|doc)(?P<workspace>/workspaces/[a-zA-Z0-9\-\_]+)?(?P<tree>/tree/.*)?z
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Error</title>
</head>
<body>
<h2>Cannot find template: "{{name}}"</h2>
<p>In "{{path}}"</p>
</body>
</html>
urlstrreturnboolc                 C  s0   zt | }t|j|jgW S  ty   Y dS w )zjTest whether a string is a full url (e.g. https://nasa.gov)

    https://stackoverflow.com/a/52455972
    F)r   allschemenetloc
ValueError)r   result r&   c/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/jupyterlab_server/handlers.pyis_url7   s   r(   c                   @  s8   e Zd ZdZedddZejej	ddddZ	dS )
LabHandlerzRender the JupyterLab View.r   dict[str, Any]c                 C  s4  t | jdd| j_t }| j}|j}| jdi }| jdd}| jdd}|	t
jd}| jd	}| jd}|d
| |d| |dg  |d| | jj|d< t
jt
j|}d}	z| jjj}	W n+ ty   z| jjr| jj|krt| jj| }	W n	 ty   Y nw Y nw |	pd|d< | j jd7  _| jdd}
| j}|sd}|d|
 |d| | D ]}t |||t|< q| D ]$}|dsqtd| }t ||}|durt|st||}|||< q|j|j  }t!|t"||| j#d | jdd}|r|| |}|S )z Construct the page config objectstore_idr   Zpage_config_dataZterminals_availableFZserver_root_dir /base_urlZfullStaticUrlZterminalsAvailableZignorePluginsZ
serverRootZpreferredPathr   mathjax_configzTeX-AMS_HTML-full,Safez?https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.jsZmathjaxConfigZfullMathjaxUrl_urlZfull_N)loggerpage_config_hook)$getattrZapplicationr+   r   Zextensionappapp_settings_dirsettings
setdefaultgetreplaceossepZstatic_url_prefixrstrippathnormpath
expanduserZ	serverappZcontents_managerZpreferred_dir	ExceptionpathlibPathrelative_toas_posixmathjax_urlZtrait_names
_camelCaseendswithr(   ujoinextra_labextensions_pathlabextensions_pathr   r   log)selfconfigappsettings_dirpage_configZ	terminalsZserver_rootr.   Zfull_static_urlZpreferred_pathr/   rD   nameZ	full_namefull_urlrI   r2   r&   r&   r'   r   F   sx   




zLabHandler.get_page_configNmode
str | None	workspacetreeNonec                 C  s~   |du rdn| dd}|du rdn| dd}|  }|dkr%d|d< nd	|d< ||d
< ||d< | jd|d}| | dS )zGet the JupyterLab html page.Ndefaultz/workspaces/r,   z/tree/doczsingle-documentrR   zmultiple-documentrT   ZtreePathz
index.html)rO   )r8   r   Zrender_templatewrite)rK   rR   rT   rU   Z	tree_pathrO   Ztplr&   r&   r'   r7      s   
zLabHandler.getr   r*   )NNN)rR   rS   rT   rS   rU   rS   r   rV   )
__name__
__module____qualname____doc__r   r   r   authenticatedZremoveslashr7   r&   r&   r&   r'   r)   C   s    Rr)   c                      s&   e Zd ZdZed fddZ  ZS )NotFoundHandlerzA handler for page not found.r   r*   c                   s   t    }| jj|d< |S )zGet the page config.ZnotFoundUrl)superr   copyrequestr<   )rK   rO   	__class__r&   r'   r      s   zNotFoundHandler.get_page_configrZ   )r[   r\   r]   r^   r   r   __classcell__r&   r&   rd   r'   r`      s    r`   handlers	list[Any]extension_appr   rV   c              	   C  s  t  D ]}|dsqt||}t|||tjd qt  D ],}|ds)q!t||}t|r3q!|	ds<d| }|drG|dd }t||| q!t
|jdd}| |tf |jrdg ndg}|j|j }t|jd}| |t||df |jrt|j\}}	|	rd	}
|j|
|	 |j|j|j||d
}t|jd}| |t|f t|jd}| |t|f |jrt|jd}| |t|f t|jd}| |t|f |jrdt |ji}t|j!d}| |t"|f t|j!d}| |t"|f |j#$di $di }|$dd}|$dd}|r,|r,t%j&ddd ddl'}|(d |$ddt)_*|$di t)_+t|j,}t|d}|rOt-|.dt)_/|rZt-|.dt)_0t1d t2t)j/dksnt2t)j0dkrddl3m4} t)j*d }|j5dd |d d!t)_6t)j67  | |t)i f |j8r|j9}t|d}| |t:||j8||d"f |j;r|j;}t|d}| |t<dt=|d#if t|jd$}| |t>f dS )%z,Add the appropriate handlers to the web app.Z_dirr-   r0   Nr,   z(.*))r<   no_cache_pathszFailed loading overrides: %s)r4   schemas_dirrN   rI   	overrides?z(?P<schema_name>.+)z(?P<locale>.*)managerz(?P<space_name>.+)rL   r   blocked_extensions_urisallowed_extensions_uriszsSimultaneous blocked_extensions_uris and allowed_extensions_uris is not supported. Please define only one of those.   )
stacklevelr   listings_refresh_secondsi  Zlistings_request_options,)ioloopi  c                   S  s   t d S N)r   r&   r&   r&   r'   <lambda>;  s    zadd_handlers.<locals>.<lambda>g?)callback_timejitter)
themes_urlr<   rI   rk   )parentz.*)?r   Zclass_trait_namesrF   r3   setattrr8   r9   r:   r(   
startswithMASTER_URL_PATTERNformatZapp_urlappendr)   Zcache_filesrH   rI   rG   labextensions_urlr   rl   r   r4   rJ   warningZuser_settings_dirZsettings_urlr   Ztranslations_api_urlr   Zworkspaces_dirr   Zworkspaces_api_urlr   r5   r7   warningswarnsysexitr   rt   Zlistings_request_optslistings_urlsetsplitrp   rq   r   lentornadorv   ZPeriodicCallbackZpcstartZ
themes_dirr{   r   licenses_urlr   r   r`   )rg   ri   rP   valueZurl_patternrk   rI   r   rm   errorZoverrides_warningZsettings_configZsettings_pathZsetting_pathZtranslations_pathZtranslations_lang_pathZworkspaces_configZworkspaces_api_pathZworkspace_api_pathrp   rq   r   r   Zlistings_pathrv   ry   r{   Zthemes_pathr   Zlicenses_pathZfallthrough_urlr&   r&   r'   add_handlers   s   





		






r   basec                 C  s0   d dd |  D }|d  |dd  S )zLConvert a string to camelCase.
    https://stackoverflow.com/a/20744956
    r,   c                 s  s    | ]	}|  r|V  qd S rw   )isalpha).0xr&   r&   r'   	<genexpr>e  s    z_camelCase.<locals>.<genexpr>r   r   N)jointitlelower)r   outputr&   r&   r'   rE   a  s   rE   )r   r   r   r    )rg   rh   ri   r   r   rV   )r   r   r   r   )8r^   
__future__r   r9   r@   r   	functoolsr   typingr   r   urllib.parser   Zjupyter_server.base.handlersr   r   Z jupyter_server.extension.handlerr	   r
   Zjupyter_server.utilsr   rG   r   r   r   rL   r   r   r   Zlicenses_handlerr   r   Zlistings_handlerr   r   Zsettings_handlerr   Zsettings_utilsr   Zthemes_handlerr   Ztranslations_handlerr   Zworkspaces_handlerr   r   rM   r   r   TemplateZDEFAULT_TEMPLATEr(   r)   r`   r   rE   r&   r&   r&   r'   <module>   sB    
n
 %