o
    ^i5                     @  s*  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
 ddlmZ ddlm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 ddlmZmZmZ ddlm 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+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ee4j56 Z7e8ej9e:e;e:df f e;ej9e8e:ej<f e1f e:f f Z=ee Z>e3Z?G dd deeeZ@G dd de@ZAG dd de@ZBG dd de@ZCG d d! d!e@ZDG d"d# d#e@ZEG d$d% d%e@ZFe8eZGG d&d' d'e)e ZHeHjI ZJZKeLd(kreJ  dS dS ))zJupyter notebook application.    )annotationsN)Path)ensure_async)base_aliases)jupyter_config_dir)JupyterHandler)ExtensionHandlerJinjaMixinExtensionHandlerMixin)flags)
url_escapeurl_is_absolute)url_path_join)get_app_dirget_user_settings_dirget_workspaces_dir)LabServerApp)	LabConfigget_page_configrecursive_update)
_camelCaseis_url)NotebookConfigShimMixin)web)BoolUnicodedefault)Config   )__version__.c                   @  s(   e Zd ZdZed
ddZdddZd	S )NotebookBaseHandlerzThe base notebook API handler.returnt.Anyc                 C  s   | j ddS )N
custom_cssT)settingsgetself r'   G/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/notebook/app.pyr"   5      zNotebookBaseHandler.custom_cssdict[str, t.Any]c              	   C  s  t  }| j}| jdd}| jdi }i |t| j| jdd| jd t| jd| jt| jd|j	d}| jd	d
}|
tjd}tjt| }z| jj|krcdtj| jj| |d< nd|d< W n tyu   d|d< Y nw | jdd}| jdd}t|s|| jst| j|}|d| |d| |dt  | D ]}	t||	|t|	< q| D ] }	|	dsqtd|	 }
t||	}t|st||}|||
< q|j|j }t|t || j!d | jdd}|r|| |}|S )zGet the page config.base_url/page_config_dataterminals_availableFtokenstatic)
appVersionbaseUrlterminalsAvailabler/   fullStaticUrlfrontendUrlexposeAppInBrowserserver_root_dir preferredPathmathjax_configzTeX-AMS_HTML-full,Safemathjax_urlz?https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.jsmathjaxConfigfullMathjaxUrljupyterConfigDir_urlfull_)loggerpage_config_hookN)"r   extensionappr#   r$   
setdefaultversionr+   ujoinnameexpose_app_in_browserreplaceosseppathnormpathr   
expanduser	serverapppreferred_dirrelpath	Exceptionr   
startswithr   trait_namesgetattrr   endswithr   extra_labextensions_pathlabextensions_pathr   r   log)r&   configappr+   r-   page_configserver_rootr:   r;   rG   	full_namefull_urlrX   rB   r'   r'   r(   r   9   sx   




	
z#NotebookBaseHandler.get_page_configNr    r!   )r    r*   )__name__
__module____qualname____doc__propertyr"   r   r'   r'   r'   r(   r   2   s
    r   c                   @  "   e Zd ZdZejd
dddZd	S )TreeHandlerzA tree page handler.r8   rL   strr    Nonec                   s
  | d}| j}t|j|dI dH r@t||I dH r,|js,| jd t	d| 
 }||d< | jd|d}| |S t||I dH rt|j|d	d
I dH }|d dkrft| jdt|}n	t| jdt|}| jd| jj| | | dS t	d)z
        Display appropriate page for given path.

        - A directory listing is shown if path is a directory
        - Redirected to notebook page if path is a notebook
        - Render the raw file if path is any other file
        r,   rL   Nz1Refusing to serve hidden directory, via 404 Errori  treePathz	tree.htmlr\   F)contenttypenotebook	notebooksfileszRedirecting %s to %s)stripcontents_managerr   
dir_exists	is_hiddenallow_hiddenrY   infor   	HTTPErrorr   render_templatewritefile_existsr$   rF   r+   r   debugrequestrL   redirect)r&   rL   cmr\   tplmodelurlr'   r'   r(   r$      s(   
	



zTreeHandler.getNr8   )rL   rh   r    ri   ra   rb   rc   rd   r   authenticatedr$   r'   r'   r'   r(   rg          rg   c                   @  "   e Zd ZdZejd	d
ddZdS )ConsoleHandlerzA console page handler.NrL   
str | Noner    r!   c                 C     | j d|  d}| |S )zGet the console page.zconsoles.htmlrl   ry   r   rz   r&   rL   r   r'   r'   r(   r$         
zConsoleHandler.getNrL   r   r    r!   r   r'   r'   r'   r(   r      r   r   c                   @  r   )TerminalHandlerzA terminal page handler.NrL   r   r    r!   c                 C  r   )zGet the terminal page.zterminals.htmlrl   r   r   r'   r'   r(   r$      r   zTerminalHandler.getr   r   r   r'   r'   r'   r(   r      r   r   c                   @  r   )FileHandlerzA file page handler.NrL   r   r    r!   c                 C  r   )zGet the file page.z	edit.htmlrl   r   r   r'   r'   r(   r$      r   zFileHandler.getr   r   r   r'   r'   r'   r(   r      r   r   c                   @  rf   )NotebookHandlerzA notebook page handler.r8   rL   rh   r    r!   c                   sx   | d}| j}t|j|dI dH r.t| jdt|}| jd| j	j
| | | dS | jd|  d}| |S )z4Get the notebook page. Redirect if it's a directory.r,   rj   Ntreez.Redirecting %s to %s since path is a directoryznotebooks.htmlrl   )rr   rs   r   rt   rF   r+   r   rY   r|   r}   rL   r~   ry   r   rz   )r&   rL   r   r   r   r'   r'   r(   r$      s   


zNotebookHandler.getNr   )rL   rh   r    r!   r   r'   r'   r'   r(   r      r   r   c                   @  s    e Zd ZdZejdddZdS )CustomCssHandlerzA custom CSS handler.r    r!   c                 C  s   |  dd |  }|d  d}t| s.td|d }|dur.| d }| d	}t| }| |	 W  d   S 1 sFw   Y  dS )
zGet the custom css file.zContent-Typeztext/cssr>   /custom/custom.cssz^(.*?)static	staticDirNr   zcustom/custom.css)

set_headerr   r   is_filerematchgroupsopenrz   read)r&   r\   custom_css_filestatic_path_root
custom_dircss_fr'   r'   r(   r$      s   
$zCustomCssHandler.getNr`   r   r'   r'   r'   r(   r      s    r   c                      s`  e Zd ZU dZdZdZdZeZeeddZ	dZ
edd	d
dZdZd	ZeZi Zded< edd	ddZed	d	ddZeZded< d dd	iidfed< d dd	iidfed< edd>ddZedd>dd Zed!d>d"d#Zed$d>d%d&Zed'd>d(d)Zed*d>d+d,Zed-d>d.d/Zd? fd1d2Zd@d5d6Zd? fd7d8ZdAdB fd<d=Z   Z!S )CJupyterNotebookAppz"The notebook server extension app.ro   zJupyter NotebookzMJupyter Notebook - A web-based notebook environment for interactive computingzThe version of the application.)helpr,   z/treeTz'The default URL to redirect to from `/`)rZ   r   r*   subcommandsFzJWhether to expose the global app instance to browser via window.jupyterappzeWhether custom CSS is loaded on the page.
        Defaults to True and custom CSS is loaded.
        Flagsr
   rH   z@Expose the global app instance to browser via window.jupyterapp.zexpose-app-in-browserr"   z7Load custom CSS in template html files. Default is Truez
custom-css
static_dirr    rh   c                 C     t td S )Nr0   rh   HEREr%   r'   r'   r(   _default_static_dir     z&JupyterNotebookApp._default_static_dirtemplates_dirc                 C  r   )N	templatesr   r%   r'   r'   r(   _default_templates_dir!  r   z)JupyterNotebookApp._default_templates_dirapp_settings_dirc                 C  r   )Nr#   rh   app_dirr%   r'   r'   r(   _default_app_settings_dir%  r   z,JupyterNotebookApp._default_app_settings_dirschemas_dirc                 C  r   )Nschemasr   r%   r'   r'   r(   _default_schemas_dir)  r   z'JupyterNotebookApp._default_schemas_dir
themes_dirc                 C  r   )Nthemesr   r%   r'   r'   r(   _default_themes_dir-  r   z&JupyterNotebookApp._default_themes_diruser_settings_dirc                 C     t tt S r   )tcastrh   r   r%   r'   r'   r(   _default_user_settings_dir1  r)   z-JupyterNotebookApp._default_user_settings_dirworkspaces_dirc                 C  r   r   )r   r   rh   r   r%   r'   r'   r(   _default_workspaces_dir5  r)   z*JupyterNotebookApp._default_workspaces_dirri   c                   s$   t t|   | jjj| jd d S )N)r"   )superr   _prepare_templates
jinja2_envglobalsupdater"   r%   	__class__r'   r(   r   9  s   z%JupyterNotebookApp._prepare_templates	extensionboolc              
   C  sH   | j du rdS z| j jj| jdu }W |S  tttfy#   d}Y |S w )z%Check if server extension is enabled.NFT)rO   extension_manager
extensionsenabledAttributeErrorKeyError	TypeError)r&   r   extension_enabledr'   r'   r(   server_extension_is_enabled=  s   
z.JupyterNotebookApp.server_extension_is_enabledc                   s
  | j dusJ | j jjdi }| d}||d< d| j jv rN| j j}|d }||d< |d |d< |d	 |d
< t|d|d< t| j drJ| j j|d< d|d< | j	
dtf | j	
dtf | j	
dtf | j	
dtf | j	
dtf | j	
dtf t   dS )zInitialize handlers.Nr-   	nbclassicnbclassic_enabled
hub_prefix	hubPrefixhub_hosthubHostuserhubUserzuser-redirectshareUrlserver_namehubServerNamer8   r/   z	/tree(.*)z/notebooks(.*)z	/edit(.*)z/consoles/(.*)z/terminals/(.*)r   )rO   web_appr#   rD   r   tornado_settingsrF   hasattrr   handlersappendrg   r   r   r   r   r   r   initialize_handlers)r&   r\   r   r   r   r   r'   r(   r   I  s*   
z&JupyterNotebookApp.initialize_handlersNargvlist[str] | Nonec                   s   t    dS )zMSubclass because the ExtensionApp.initialize() method does not take argumentsN)r   
initialize)r&   r   r   r'   r(   r   i  r)   zJupyterNotebookApp.initialize)r    rh   )r    ri   )r   rh   r    r   r   )r   r   r    ri   )"ra   rb   rc   rd   rG   app_namedescriptionrE   r   app_versionextension_urldefault_urlfile_url_prefixload_other_extensionsr   r   __annotations__r   rH   r"   r
   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r'   r'   r   r(   r      s`   
 


 r   __main__)Mrd   
__future__r   rJ   r   typingr   pathlibr   jupyter_client.utilsr   jupyter_core.applicationr   jupyter_core.pathsr   jupyter_server.base.handlersr    jupyter_server.extension.handlerr   r	   jupyter_server.serverappr
   jupyter_server.utilsr   r   r   rF   jupyterlab.commandsr   r   r   jupyterlab_serverr   jupyterlab_server.configr   r   r   jupyterlab_server.handlersr   r   notebook_shim.shimr   tornador   	traitletsr   r   r   traitlets.config.loaderr   _versionr   __file__parentresolver   dictUnionrh   tupleAnyr   r   rE   r   rg   r   r   r   r   r   aliasesr   launch_instancemainlaunch_new_instancera   r'   r'   r'   r(   <module>   sP    :
S(



y

