o
    iu2                     @   s&  d Z ddlZddlZddlZddl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%m&Z& dZ'e(dZ)dd Z*G dd deee
Z+G dd de+Z,dd Z-dd Z.dS )zJupyterLab Server handlers    N)	lru_cache)urlparse)FileFindHandlerJupyterHandler)ExtensionHandlerJinjaMixinExtensionHandlerMixin)url_path_join)templateweb   )	LabConfigget_page_configrecursive_update)LicensesHandlerLicensesManager)ListingsHandlerfetch_listings)SettingsHandler)ThemesHandler)TranslationsHandler)WorkspacesHandlerWorkspacesManagerzP/(?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>
c                 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)urlresult r   U/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyterlab_server/handlers.pyis_url1   s   r    c                   @   s4   e Zd ZdZe dd ZejejdddZ	dS )
LabHandlerzRender the JupyterLab View.c                 C   s,  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 ||}t|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_)loggerpage_config_hookN)$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_rootr(   full_static_urlpreferred_pathr.   rL   name	full_namefull_urlrR   r4   r   r   r   r   @   st   




zLabHandler.get_page_configNc                 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-documentmodezmultiple-document	workspacetreePathz
index.html)rX   )r<   r   render_templatewrite)rT   rb   rc   tree	tree_pathrX   tplr   r   r   r;      s   
zLabHandler.get)NNN)
__name__
__module____qualname____doc__r   r   r
   authenticatedremoveslashr;   r   r   r   r   r!   =   s    
Pr!   c                       s&   e Zd ZdZe  fddZ  ZS )NotFoundHandlerzA handler for page not found.c                    s   t   }| jj|d< |S )zGet the page config.notFoundUrl)superr   requestrA   )rT   rX   	__class__r   r   r      s   
zNotFoundHandler.get_page_config)rj   rk   rl   rm   r   r   __classcell__r   r   rt   r   rp      s    rp   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r|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"#d ddl$}|%d |!ddt&_'|!di t&_(t|j)}t|d}|r:t*|+dt&_,|rEt*|+dt&_-t.d t/t&j,dksYt/t&j-dkrtddl0m1} t&j'd }|j2dd |ddt&_3t&j34  | |t&i f |j5r|j6}t|d}| |t7||j5||df |j8r|j8}t|d}| |t9dt:|d if t|jd!}| |t;f dS )"z,Add the appropriate handlers to the web app._dirr'   r1   Nr&   z(.*))rA   no_cache_paths)r8   schemas_dirrW   rR   ?z(?P<schema_name>.+)z(?P<locale>.*)managerz(?P<space_name>.+)rU   LabServerAppblocked_extensions_urisallowed_extensions_uriszsSimultaneous blocked_extensions_uris and allowed_extensions_uris is not supported. Please define only one of those.r   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_urlrA   rR   ry   )parentz.*)<r   class_trait_namesrO   r5   setattrr<   r=   r>   r    
startswithMASTER_URL_PATTERNformatapp_urlappendr!   cache_filesrQ   rR   rP   labextensions_urlr   rz   r8   user_settings_dirsettings_urlr   translations_api_urlr   workspaces_dirr   workspaces_api_urlr   r9   r;   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   rp   )handlersextension_appr]   valueurl_patternry   rR   r   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   c                 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>Q  s    z_camelCase.<locals>.<genexpr>r   r   N)jointitlelower)baseoutputr   r   r   rN   M  s   rN   )/rm   r=   rH   r   	functoolsr   urllib.parser   jupyter_server.base.handlersr   r    jupyter_server.extension.handlerr   r   jupyter_server.utilsr   rP   r   r	   r
   rU   r   r   r   licenses_handlerr   r   listings_handlerr   r   settings_handlerr   themes_handlerr   translations_handlerr   workspaces_handlerr   r   r   TemplateDEFAULT_TEMPLATEr    r!   rp   r   rN   r   r   r   r   <module>   s8    j 