
    XhI6                       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jb                  d      Z2ddZ3 G d deee      Z4 G d de4      Z5ddZ6d dZ7y)!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>
c                z    	 t        |       }t        |j                  |j                  g      S # t        $ r Y y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)urlresults     N/var/www/html/myenv/lib/python3.12/site-packages/jupyterlab_server/handlers.pyis_urlr&   7   s:    
#FMM6==122 s   +. 	::c                  x    e Zd ZdZedd       Zej                  ej                  	 d	 	 	 	 	 	 	 dd              Z	y)
LabHandlerzRender the JupyterLab View.c                b   t        | j                  dd      | j                  _        t               }| j                  }|j
                  }| j                  j                  di       }| j                  j                  dd      }| j                  j                  dd      }|j                  t        j                  d      }| j                  j                  d	      }| j                  j                  d      }|j                  d
|       |j                  d|       |j                  dg        |j                  d|       | j                  j                  |d<   t        j                  j                  t        j                  j!                  |            }d}		 | j"                  j$                  j&                  }	|	xs d|d<   | j                  xj                  dz  c_        | j                  j                  dd      }
| j2                  }|sd}|j                  d|
       |j                  d|       |j5                         D ]  }t        ||      |t7        |      <    |j5                         D ]L  }|j9                  d      st7        d|z         }t        ||      }|t;        |      st=        ||      }|||<   N |j>                  |j@                  z   }tC        |tE        ||| jF                               | j                  j                  dd      }|r	 || |      }|S # t(        $ r 	 | j"                  j&                  r_| j"                  j&                  |k7  rFt+        j,                  | j"                  j&                        j/                  |      j1                         }	n# t(        $ r Y nw xY wY w xY w)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_rootr0   full_static_urlpreferred_pathr6   rT   name	full_namefull_urlrZ   r<   s                    r%   r   zLabHandler.get_page_configF   sI    %,j!%
!  --++mm../A2FMM%%&;UC	mm''(92>!))"&&#6==$$Z0 0077<@3Y?3|[9"&"2"2";";Jgg&&rww'9'9+'FG	!^^<<JJN (6'<O$!!Q&!**+;=UV&&[K?/= &&( 	?D,3C,>K
4()	? &&( 	.D==("7T>2IsD)H#F8,< 84%-K	"	. !99C<R<RR);\RVRZRZ[	

  ==,,-?F*4=Ki  		>>//DNN4P4PT_4_T^^%A%AB$[1! #
  	s7    L 	N.%A5NN.	N'$N.&N''N.-N.Nc                    |dn|j                  dd      }|dn|j                  dd      }| j                         }|dk(  rd|d<   nd	|d<   ||d
<   ||d<   | j                  d|      }| j                  |       y)zGet the JupyterLab html page.Ndefaultz/workspaces/r.   z/tree/doczsingle-documentmodezmultiple-document	workspacetreePathz
index.html)r`   )rD   r   render_templatewrite)r\   rk   rl   tree	tree_pathr`   tpls          r%   rC   zLabHandler.get   s     "+!2I	8I8I.Z\8]	,BDLL2,F	**, 5="3K"5K#,K "+J ""<["I

3    returnzdict[str, Any])NNN)rk   
str | Nonerl   rv   rp   rv   ru   None)
__name__
__module____qualname____doc__r   r   r   authenticatedremoveslashrC    rs   r%   r(   r(   C   sc    %P Pd 	__X\2<KU	  rs   r(   c                  .     e Zd ZdZed fd       Z xZS )NotFoundHandlerzA handler for page not found.c                r    t         |          j                         }| j                  j                  |d<   |S )zGet the page config.notFoundUrl)superr   copyrequestrI   )r\   r`   	__class__s     r%   r   zNotFoundHandler.get_page_config   s5     g-/446%)\\%6%6M"rs   rt   )rx   ry   rz   r{   r   r   __classcell__)r   s   @r%   r   r      s    ' rs   r   c           	        t        j                         D ]K  }|j                  d      st        ||      }t	        |||j                  t        j                  d             M t        j                         D ]e  }|j                  d      st        ||      }t        |      r-|j                  d      sd|z   }|j                  d      r|dd }t	        |||       g t        j                  |j                  j                  dd            }| j                  |t        f       |j                  rg ndg}|j                   |j"                  z   }t%        |j&                  d      }| j                  |t(        ||df       |j*                  r"t-        |j.                        \  }}	|	rd	}
|j0                  j3                  |
|	       |j.                  |j*                  |j4                  ||d
}t%        |j6                  d      }| j                  |t8        |f       t%        |j6                  d      }| j                  |t8        |f       |j:                  r\t%        |j:                  d      }| j                  |t<        |f       t%        |j:                  d      }| j                  |t<        |f       |j>                  rsdtA        |j>                        i}t%        |jB                  d      }| j                  |tD        |f       t%        |jB                  d      }| j                  |tD        |f       |jF                  jI                  di       jI                  di       }|jI                  dd      }|jI                  dd      }|r.|r,tK        jL                  dd       ddl'}|jQ                  d       |jI                  dd      tR        _*        |jI                  di       tR        _+        t%        |jX                        }t%        |d      }|r#t[        |j]                  d            tR        _/        |r#t[        |j]                  d            tR        _0        tc        d       te        tR        j^                        dkD  ste        tR        j`                        dkD  rUddl3m4} tR        jT                  dz  }|jk                  d |d       tR        _6        tR        jl                  jo                          | j                  |tR        i f       |jp                  r?|jr                  }t%        |d      }| j                  |tt        ||jp                  ||d!f       |jv                  r<|jv                  }t%        |d      }| j                  |tx        dt{        |"      if       t%        |j                  d#      }| j                  |t|        f       y)$z,Add the appropriate handlers to the web app._dirr/   r9   Nr.   z(.*))rI   no_cache_pathszFailed loading overrides: %s)r@   schemas_dirr_   rZ   	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                     t        d       S N)r   r~   rs   r%   <lambda>zadd_handlers.<locals>.<lambda>;  s    N4( rs   g?)callback_timejitter)
themes_urlrI   rZ   r   )parentz.*)?r   class_trait_namesrW   r=   setattrrD   rE   rF   r&   
startswithMASTER_URL_PATTERNformatapp_urlappendr(   cache_filesrY   rZ   rX   labextensions_urlr   r   r   r@   r[   warninguser_settings_dirsettings_urlr   translations_api_urlr   workspaces_dirr   workspaces_api_urlr   rA   rC   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   )handlersextension_appre   valueurl_patternr   rZ   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}}V$t,tU]]2663%?@	A ++- 
,}}V$t,%=$%KE>>##2JEtU+
, %++M,A,A,I,I#r,RSKOO[*-. )44R3%N '??-BbBbbm==vFOO'>J	
   )-*H*HI	5 >%%&7? !. > >(44);;"4"+
 m88#>IJ ]779NOHI -- !&m&H&H# NOO.0C_UV &+=+M+MO_%`"OO35H/Z[ ##&(9-:V:V(WX $M$D$DcJ,.?ARST #=#C#CEYZ+->@QRS $,,002>BB>SUVO#2#6#67PRT#U#2#6#67PRT#U&= B	
 	/>/B/B"G0O, -<,?,?@Z\^,_O)334L,/M256M6S6STW6X2Y/256M6S6STW6X2Y/4 	O334q8667!;"'@@4G#44(' 5 

 	  "OO]OR89 "--
J/",)44*<&4			
 !!$11lF3OiP]9^-_`	

 M1159OOO_o67rs   c                    dj                  d | j                         D              }|d   j                         |dd z   S )zLConvert a string to camelCase.
    https://stackoverflow.com/a/20744956
    r.   c              3  B   K   | ]  }|j                         s|  y wr   )isalpha).0xs     r%   	<genexpr>z_camelCase.<locals>.<genexpr>e  s     <1		Q<s   r   r   N)jointitlelower)baseoutputs     r%   rV   rV   a  s:     WW<

<<F!9??vabz))rs   )r#   strru   bool)r   z	list[Any]r   r   ru   rw   )r   r   ru   r   )8r{   
__future__r   rE   rP   r   	functoolsr   typingr   r   urllib.parser   jupyter_server.base.handlersr   r	    jupyter_server.extension.handlerr
   r   jupyter_server.utilsr   rX   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   rV   r~   rs   r%   <module>r      s      # 	    % ! H ^ 7 ! @ @ > = - * ) 5 D! X  %8$$ "	k+-BN k\	j 	a8H*rs   