o
    ^i)6                     @  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&   U/home/ubuntu/hpml_nyu/venv/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   page_config_dataterminals_availableFserver_root_dir /base_urlfullStaticUrlterminalsAvailableignorePlugins
serverRootpreferredPathr   mathjax_configzTeX-AMS_HTML-full,Safez?https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.jsmathjaxConfigfullMathjaxUrl_urlfull_N)loggerpage_config_hook)$getattrapplicationr+   r   extensionappapp_settings_dirsettings
setdefaultgetreplaceossepstatic_url_prefixrstrippathnormpath
expanduser	serverappcontents_managerpreferred_dir	ExceptionpathlibPathrelative_toas_posixmathjax_urltrait_names
_camelCaseendswithr(   ujoinextra_labextensions_pathlabextensions_pathr   r   log)selfconfigappsettings_dirpage_config	terminalsserver_rootr1   full_static_urlpreferred_pathr7   rU   name	full_namefull_urlr[   r=   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-documentri   zmultiple-documentrk   treePathz
index.html)ra   )rE   r   render_templatewrite)r]   ri   rk   rl   	tree_pathra   tplr&   r&   r'   rD      s   
zLabHandler.getr   r*   )NNN)ri   rj   rk   rj   rl   rj   r   rm   )
__name__
__module____qualname____doc__r   r   r   authenticatedremoveslashrD   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.notFoundUrl)superr   copyrequestrJ   )r]   ra   	__class__r&   r'   r      s   zNotFoundHandler.get_page_configru   )rv   rw   rx   ry   r   r   __classcell__r&   r&   r   r'   r|      s    r|   handlers	list[Any]extension_appr   rm   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._dirr0   r:   Nr/   z(.*))rJ   no_cache_pathszFailed loading overrides: %s)rA   schemas_dirr`   r[   	overrides?z(?P<schema_name>.+)z(?P<locale>.*)managerz(?P<space_name>.+)r^   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  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_urlrJ   r[   r   )parentz.*)?r   class_trait_namesrX   r>   setattrrE   rF   rG   r(   
startswithMASTER_URL_PATTERNformatapp_urlappendr)   cache_filesrZ   r[   rY   labextensions_urlr   r   r   rA   r\   warninguser_settings_dirsettings_urlr   translations_api_urlr   workspaces_dirr   workspaces_api_urlr   rB   rD   warningswarnsysexitr   r   listings_request_optslistings_urlsetsplitr   r   r   lentornador   PeriodicCallbackpcstart
themes_dirr   r   licenses_urlr   r   r|   )r   r   rf   valueurl_patternr   r[   r   r   erroroverrides_warningsettings_configsettings_pathsetting_pathtranslations_pathtranslations_lang_pathworkspaces_configworkspaces_api_pathworkspace_api_pathr   r   r   r   listings_pathr   r   r   themes_pathr   licenses_path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 r   )isalpha).0xr&   r&   r'   	<genexpr>e  s    z_camelCase.<locals>.<genexpr>r   r   N)jointitlelower)r   outputr&   r&   r'   rW   a  s   rW   )r   r   r   r    )r   r   r   r   r   rm   )r   r   r   r   )8ry   
__future__r   rF   rQ   r   	functoolsr   typingr   r   urllib.parser   jupyter_server.base.handlersr   r    jupyter_server.extension.handlerr	   r
   jupyter_server.utilsr   rY   r   r   r   r^   r   r   r   licenses_handlerr   r   listings_handlerr   r   settings_handlerr   settings_utilsr   themes_handlerr   translations_handlerr   workspaces_handlerr   r   r_   r   r   TemplateDEFAULT_TEMPLATEr(   r)   r|   r   rW   r&   r&   r&   r'   <module>   sB    
n
 %