
    MhI6                       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	rddl.m/Z/ dZ0 ej1        d          Z2d(dZ3 G d deee          Z4 G d de4          Z5d)d%Z6d*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                z    	 t          |           }t          |j        |j        g          S # t          $ r Y dS w xY 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   results     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyterlab_server/handlers.pyis_urlr)   7   sK    
#FM6=1222   uus   ), 
::c                  j    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.r    dict[str, Any]c                (   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}		 | j        j        j        }	n# t(          $ rt 	 | j        j        rS| j        j        |k    rCt+          j        | j        j                                      |                                          }	n# t(          $ r Y nw xY wY nw xY w|	pd|d<   | j        xj        dz  c_        | j                            dd          }
| j        }|sd}|                    d|
           |                    d|           |                                D ]"}t          ||          |t7          |          <   #|                                D ]`}|                    d          st7          d|z             }t          ||          }|t;          |          st=          ||          }|||<   a|j        |j         z   }tC          |tE          ||| j#                             | 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_rootr4   full_static_urlpreferred_pathr:   rX   name	full_namefull_urlr^   r@   s                    r(   r   zLabHandler.get_page_configF   s    %,j!%
 %
!  -+m../A2FFM%%&;UCC	m''(92>>!))"&#66=$$Z00 077<<@@@3Y???333|[999"&"2";Jg&&rw'9'9+'F'FGG	!^<JNN 	 	 		>/ DN4PT_4_4_T^%ABB$[11! #
    	 (6'<O$!!Q&!!**+;=UVV& 	\[K???/=== &&(( 	? 	?D,3C,>,>K
4(()) &&(( 	. 	.D==(( "7T>22IsD))H#F8,<,<# 844%-K	"" !9C<RR);\RVRZ[[[	
 	
 	

  =,,-?FF 	>**4==Ks7   F 
H%AHH
HHHHHNmode
str | None	workspacetreeNonec                $   |dn|                     dd          }|dn|                     dd          }|                                 }|dk    rd|d<   nd	|d<   ||d
<   ||d<   |                     d|          }|                     |           dS )zGet the JupyterLab html page.Ndefaultz/workspaces/r2   z/tree/doczsingle-documentrl   zmultiple-documentrn   treePathz
index.html)rd   )rH   r   render_templatewrite)r`   rl   rn   ro   	tree_pathrd   tpls          r(   rG   zLabHandler.get   s     "+!2II	8I8I.Z\8]8]	,BBDLL2,F,F	**,, 5=="3K"5K#,K "+J ""<["II

3    r    r,   )NNN)rl   rm   rn   rm   ro   rm   r    rp   )
__name__
__module____qualname____doc__r   r   r   authenticatedremoveslashrG    ry   r(   r+   r+   C   su        %%P P P YPd 	_X\    _   ry   r+   c                  4     e Zd ZdZed fd            Z xZS )NotFoundHandlerzA handler for page not found.r    r,   c                    t                                                                                      }| j        j        |d<   |S )zGet the page config.notFoundUrl)superr   copyrequestrM   )r`   rd   	__class__s     r(   r   zNotFoundHandler.get_page_config   s;     gg--//4466%)\%6M"ry   rz   )r{   r|   r}   r~   r   r   __classcell__)r   s   @r(   r   r      sM        ''     Y    ry   r   handlers	list[Any]extension_appr   rp   c           	     &   t          j                    D ]W}|                    d          st          ||          }t	          |||                    t          j        d                     Xt          j                    D ]}|                    d          st          ||          }t          |          r8|	                    d          sd|z   }|                    d          r
|dd         }t	          |||           t                              |j                            dd                    }|                     |t          f           |j        rg ndg}|j        |j        z   }t%          |j        d          }|                     |t(          ||df           |j        rt-          |j                  \  }}	|	rd	}
|j                            |
|	           |j        |j        |j        ||d
}t%          |j        d          }|                     |t8          |f           t%          |j        d          }|                     |t8          |f           |j        rdt%          |j        d          }|                     |t<          |f           t%          |j        d          }|                     |t<          |f           |j        rzdtA          |j                  i}t%          |j!        d          }|                     |tD          |f           t%          |j!        d          }|                     |tD          |f           |j#        $                    di           $                    di           }|$                    dd          }|$                    dd          }|r1|r/tK          j&        dd           ddl'}|(                    d           |$                    dd          tR          _*        |$                    di           tR          _+        t%          |j,                  }t%          |d          }|r,t[          |.                    d                    tR          _/        |r,t[          |.                    d                    tR          _0        tc          d           te          tR          j/                  dk    ste          tR          j0                  dk    rVddl3m4} tR          j*        dz  }|5                    d |d           tR          _6        tR          j6        7                                 |                     |tR          i f           |j8        r>|j9        }t%          |d          }|                     |tt          ||j8        ||d!f           |j;        rD|j;        }t%          |d          }|                     |tx          dt{          |"          if           t%          |j        d#          }|                     |t|          f           dS )$z,Add the appropriate handlers to the web app._dirr3   r=   Nr2   z(.*))rM   no_cache_pathszFailed loading overrides: %s)rD   schemas_dirrc   r^   	overrides?z(?P<schema_name>.+)z(?P<locale>.*)managerz(?P<space_name>.+)ra   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                      t          d           S N)r   r   ry   r(   <lambda>zadd_handlers.<locals>.<lambda>;  s    N4(( ry   g?)callback_timejitter)
themes_urlrM   r^   r   )parentz.*)?r   class_trait_namesr[   rA   setattrrH   rI   rJ   r)   
startswithMASTER_URL_PATTERNformatapp_urlappendr+   cache_filesr]   r^   r\   labextensions_urlr   r   r   rD   r_   warninguser_settings_dirsettings_urlr   translations_api_urlr   workspaces_dirr   workspaces_api_urlr   rE   rG   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   ri   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_urls                                  r(   add_handlersr      s`    +-- A A}}V$$ 	t,,tU]]263%?%?@@@@ +-- 
, 
,}}V$$ 	t,,%== 	$$ 	 %KE>># 	#2#JEtU++++$++M,A,I,I#r,R,RSSKOO[*-... )4?RR3%N '?-Bbbm=vFFOO'>JJ	
     "\)-*HII	5 	@ >%%&7??? !. >(4);"4"+
 +
 m8#>>IJJJ ]79NOOHIII - 	\ !&m&H# N NOO.0C_UVVV &+=+MO_%`%`"OO35H/Z[[[ # 	T&(9-:V(W(WX $M$DcJJ,.?ARSTTT #=#CEYZZ+->@QRSSS $,002>>BB>SUVVO#2#6#67PRT#U#U#2#6#67PRT#U#U &=  B	
 	
 	
 	
 	


/>/B/B"G0 0O, -<,?,?@Z\^,_,_O)344L,//M Z256M6S6STW6X6X2Y2Y/ Z256M6S6STW6X6X2Y2Y/4 	O344q88677!;;""""""'@4G#44((' 5 
 

 	  """OO]OR8999  
"-
J//",)4*<&4	 		
 	
 	
 ! 
$1lF33OiP]9^9^9^-_`	
 	
 	

 M1599OOO_o677777ry   basec                    d                     d |                                 D                       }|d                                         |dd         z   S )zLConvert a string to camelCase.
    https://stackoverflow.com/a/20744956
    r2   c              3  B   K   | ]}|                                 |V  d S r   )isalpha).0xs     r(   	<genexpr>z_camelCase.<locals>.<genexpr>e  s/      <<1		<Q<<<<<<ry   r   r   N)jointitlelower)r   outputs     r(   rZ   rZ   a  sM     WW<<

<<<<<F!9??vabbz))ry   )r   r   r    r!   )r   r   r   r   r    rp   )r   r   r    r   )8r~   
__future__r   rI   rT   r   	functoolsr   typingr   r   urllib.parser   jupyter_server.base.handlersr   r	    jupyter_server.extension.handlerr
   r   jupyter_server.utilsr   r\   r   r   r   ra   r   r   r   licenses_handlerr   r   listings_handlerr   r   settings_handlerr   settings_utilsr   themes_handlerr   translations_handlerr   workspaces_handlerr   r   rb   r   r   TemplateDEFAULT_TEMPLATEr)   r+   r   r   rZ   r   ry   r(   <module>r      sm       # " " " " " 				         % % % % % % % % ! ! ! ! ! ! H H H H H H H H ^ ^ ^ ^ ^ ^ ^ ^ 7 7 7 7 7 7 ! ! ! ! ! ! ! ! @ @ @ @ @ @ @ @ @ @ > > > > > > > > = = = = = = = = - - - - - - * * * * * * ) ) ) ) ) ) 5 5 5 5 5 5 D D D D D D D D "!!!!!! X  %8$  "	 	 	 	k k k k k+-BN k k k\	 	 	 	 	j 	 	 	a8 a8 a8 a8H* * * * * *ry   