
     )Meg4                       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*m+Z+ e	rddl,m-Z- dZ. ej/        d          Z0d'dZ1 G d deee          Z2 G d de2          Z3d(d$Z4d)d&Z5d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)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     :lib/python3.11/site-packages/jupyterlab_server/handlers.pyis_urlr(   6   sK    
#FM6=1222   uus   ), 
::c                  z    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_rootr3   full_static_urlpreferred_pathr9   rW   name	full_namefull_urlr]   r?   s                    r'   r   zLabHandler.get_page_configE   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/r1   z/tree/doczsingle-documentrk   zmultiple-documentrm   treePathz
index.html)rc   )rG   r   render_templatewrite)r_   rk   rm   rn   	tree_pathrc   tpls          r'   rF   zLabHandler.get   s     "+!2II	8I8I.Z\8]8]	,BBDLL2,F,F	**,, 5=="3K"5K#,K "+J ""<["II

3    r   r+   )NNN)rk   rl   rm   rl   rn   rl   r   ro   )
__name__
__module____qualname____doc__r   r   r   authenticatedremoveslashrF    rx   r'   r*   r*   B   s{        %%Y[[P P P [Pd 	_X\    _   rx   r*   c                  D     e Zd ZdZ e            d fd            Z xZS )NotFoundHandlerzA handler for page not found.r   r+   c                f    t                                                      }| j        j        |d<   |S )zGet the page config.notFoundUrl)superr   requestrL   )r_   rc   	__class__s     r'   r   zNotFoundHandler.get_page_config   s/     gg--//%)\%6M"rx   ry   )rz   r{   r|   r}   r   r   __classcell__)r   s   @r'   r   r      sS        ''Y[[     [    rx   r   handlers	list[Any]extension_appr   ro   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|j        |j        |j        |d	}t%          |j        d
          }	|                     |	t2          |f           t%          |j        d          }
|                     |
t2          |f           |j        rdt%          |j        d
          }|                     |t6          |f           t%          |j        d          }|                     |t6          |f           |j        rzdt;          |j                  i}t%          |j        d
          }|                     |t>          |f           t%          |j        d          }|                     |t>          |f           |j         !                    di           !                    di           }|!                    dd          }|!                    dd          }|r/|r-tE          j#        d           ddl$}|%                    d           |!                    dd          tL          _'        |!                    di           tL          _(        t%          |j)                  }t%          |d          }|r,tU          |+                    d                    tL          _,        |r,tU          |+                    d                    tL          _-        t]          d           t_          tL          j,                  dk    st_          tL          j-                  dk    rVddl0m1} tL          j'        dz  }|2                    d |d          tL          _3        tL          j3        4                                 |                     |tL          i f           |j5        r>|j6        }t%          |d          }|                     |tn          ||j5        ||df           |j8        rD|j8        }t%          |d          }|                     |tr          dtu          |          if           t%          |j        d           }|                     |tv          f           dS )!z,Add the appropriate handlers to the web app._dirr2   r<   Nr1   z(.*))rL   no_cache_paths)rC   schemas_dirrb   r]   ?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.r   listings_refresh_secondsi  listings_request_options,)ioloopi  c                      t          d           S N)r   r   rx   r'   <lambda>zadd_handlers.<locals>.<lambda>0  s    N4(( rx   g?)callback_timejitter)
themes_urlrL   r]   r   )parentz.*)<r   class_trait_namesrZ   r@   setattrrG   rH   rI   r(   
startswithMASTER_URL_PATTERNformatapp_urlappendr*   cache_filesr\   r]   r[   labextensions_urlr   r   rC   user_settings_dirsettings_urlr   translations_api_urlr   workspaces_dirr   workspaces_api_urlr   rD   rF   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   rh   valueurl_patternr   r]   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_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	
     \ - >(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7rx   basec                    d                     d |                                 D                       }|d                                         |dd         z   S )zLConvert a string to camelCase.
    https://stackoverflow.com/a/20744956
    r1   c              3  B   K   | ]}|                                 |V  d S r   )isalpha).0xs     r'   	<genexpr>z_camelCase.<locals>.<genexpr>Z  s/      <<1		<Q<<<<<<rx   r   r   N)jointitlelower)r   outputs     r'   rY   rY   V  sM     WW<<

<<<<<F!9??vabbz))rx   )r   r   r   r    )r   r   r   r   r   ro   )r   r   r   r   )6r}   
__future__r   rH   rS   r   	functoolsr   typingr   r   urllib.parser   jupyter_server.base.handlersr   r	    jupyter_server.extension.handlerr
   r   jupyter_server.utilsr   r[   r   r   r   r`   r   r   r   licenses_handlerr   r   listings_handlerr   r   settings_handlerr   themes_handlerr   translations_handlerr   workspaces_handlerr   r   ra   r   r   TemplateDEFAULT_TEMPLATEr(   r*   r   r   rY   r   rx   r'   <module>r      s[       # " " " " " 				         % % % % % % % % ! ! ! ! ! ! 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   X8 X8 X8 X8v* * * * * *rx   