
    oi1                         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 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 d
dlmZmZmZ  G d de      Z G d de      Zy)    N)Path)Dict)JupyterHandler)url_path_join)ensure_async)split_host_and_port)Bool)ExecutionRequestHandler   )VoilaConfiguration)__version__)NotebookRenderer)RequestInfoSocketHandler)ENV_VARIABLEcreate_include_assets_functionsget_page_configc                       e Zd Zd Zd Zd Zy)BaseVoilaHandlerc                     |d   | _         y )Nvoila_configuration)r   )selfkwargss     U/home/ubuntu/docker-apps/notebooks/venv/lib/python3.12/site-packages/voila/handler.py
initializezBaseVoilaHandler.initialize!   s    #)*?#@     c                    | j                   j                  dk(  r&| j                  d| j                   j                        n| j                   j                  }i || j                  t        || j                        }d|vrZ| j                   j                  dk(  r&| j                  d| j                   j                        n| j                   j                  }||d<   | j                  |      } |j                  di |S )zLRender the Voila HTML template, respecting the theme and nbconvert template.YEStemplatetheme )r   allow_template_overrideget_argumentr   template_namespacer   base_urlallow_theme_overrider   get_templaterender)r   namenstemplate_arg	theme_argr   s         r   render_templatez BaseVoilaHandler.render_template$   s     ''??5H j$*B*B*K*KL))22 	

%%
 .lDMMJ

 " ++@@EI !!'4+C+C+I+IJ--33 
 $BwK$$T*x$$$r   c                     | j                   d   }|j                  |      }||S | j                   d   j                  |      S )z1Return the jinja template object for a given namevoila_jinja2_env
jinja2_env)settingsr&   )r   r(   	voila_envr   s       r   r&   zBaseVoilaHandler.get_template<   sF    MM"45	))$/O}}\*77==r   N)__name__
__module____qualname__r   r,   r&   r    r   r   r   r       s    A%0>r   r   c                   L     e Zd Z fdZddZd Zdededededed	e	fd
Z
 xZS )VoilaHandlerc                 <   t        |   di | |j                  dg       | _        |j                  dg       | _        |j                  dd       | _        |d   | _        | j                  j                  | _        | j                  j                  | _        d| _	        y )Nnotebook_pathtemplate_pathsconfigr   Fr    )
superr   popr8   r9   traitlet_configr   prelaunch_hookpage_config_hookkernel_started)r   r   	__class__s     r   r   zVoilaHandler.initializeG   s    $V$#ZZ<$jj)92>%zz(D97=>S7T "66EE $ 8 8 I I $r   c                   !"K   | j                   xs |}| j                   r|r| j                  |       y t        j                  j	                  |      }i }| j
                  j                  |t        j                  <   d|t        j                  <   t        | j
                  j                        |t        j                  <   dt         |t        j                  <   t        | j
                  j                        |t        j                  <   t!        | j
                  j"                  j%                               \  }}|rt        |      nd|t        j&                  <   ||t        j(                  <   t+        | j,                  j.                        dkD  r| j
                  j0                  D ]  }| j,                  j.                  D cg c]  }|j%                          }	}|j%                         |	v sGd|j3                         j5                  dd       }
| j
                  j0                  j7                  |      ||
<    | j9                  dd       }| j9                  dd       }| j;                  d	d
       | j;                  dd       | j;                  dd       | j;                  dd       	 | j<                  j>                  j7                  |i       }| j<                  jA                  |      }| jE                  ||||| j
                  jF                        r| j<                  jI                  |t        jJ                  | j
                  jM                         i       d {   \  }}!tO        jP                  !|d       t+        |      dkD  rdjS                  |       | d {   \  }}t+        |      t+        |      kD  r"djS                  |t+        |      d        }| |2 3 d {   \  }}| dg}|jU                  | j,                  jV                  D cg c]  }|j%                          c}       tY        |      jZ                  j%                         }||vr| j                  |       y | j\                  j7                  d      }| j\                  j7                  d      }| j^                  | j\                  | j`                  | j,                  d}tc        d!i |}| jd                  r | jd                  |fi |d|i}tg        | | j,                  | jh                  || jj                  | jl                  | jn                  | j^                  | jp                  | jr                  |||      ju                  ||       d {    d }i t        jv                  |}d|t        jx                  <   | j^                  |t        jz                  <   | j\                  j7                  dd      |t        j|                  <   | j
                  jM                         |t        jJ                  <   |t        j&                     |t        j~                  <   t        | j<                  j                  j                  j                  j                  j                  ||             d {   !| j<                  j                  !       t        j                         "| j,                  j                  r?j                  | jh                  | j,                  j                  dt        j                  !<    !"fd }t        j                   |              	 	 t        j                  "j7                         | j,                  j                         d {   }|y | Jc c}w # tB        $ r i }d}Y w xY w7 T7 7 6 y c c}w 7 97 "7 <# t        j                  $ r  |        Y Qw xY ww)"N zvoila/r   HTTP_-_r   r   zContent-Typez	text/htmlzCache-Controlz#no-cache, no-store, must-revalidatePragmazno-cacheExpires0)notebook_nameextra_kernel_env_variables)	kernel_idpayloadz.ipynbmathjax_configmathjax_url)r$   r0   logr   r8   )request_handlerr   r=   r8   r9   config_managercontents_managerr$   kernel_spec_managerr>   page_configrN   rO   )r   r   c                       y)zIf not done within the timeout, we send a heartbeat
                this is fundamentally to avoid browser/proxy read-timeouts, but
                can be used in a template to give feedback to a user
                z*<script>window.voila_heartbeat()</script>
r    r    r   r   time_outz,VoilaHandler.get_generator.<locals>.time_out   s     Er   False
server_url/)kernel_namepathenv)nbr:   show_tracebacksc                     K   j                        2 3 d {   \  } }j                  |        d {    &7 !7 6 j                  d        d {  7   y wN)generate_content_generatorput)html_snippetrF   genkernel_futurerL   queues     r   put_htmlz,VoilaHandler.get_generator.<locals>.put_html  sb     -0-K-K}. 2 2/,  ))L1112 2.
 iio%%s=   AA <A A>AA A AAAr    )Qr8   redirect_to_fileosr\   dirnamerequestr   SCRIPT_NAME	PATH_INFOstrqueryQUERY_STRINGr   SERVER_SOFTWAREversionSERVER_PROTOCOLr   hostlowerSERVER_PORTSERVER_NAMElenr   http_header_envsheadersupperreplacegetr"   
set_headerkernel_managernotebook_dataget_pool_sizeAttributeErrorshould_use_rendered_notebook	argumentsget_rendered_notebookVOILA_REQUEST_URLfull_urlr   send_updatesjoinextendextension_language_mappingr   suffixr0   r$   rP   r   r?   r   r=   r9   rR   rS   rT   r>   r   environVOILA_PREHEATVOILA_BASE_URLVOILA_SERVER_URLVOILA_APP_PORTr   start_kernelnotebookmetadata
kernelspecr(   
get_kernelasyncioQueueprogressive_renderingr_   r
   _execution_dataensure_futurewait_forhttp_keep_alive_timeoutTimeoutError)#r   r\   r8   cwdrequest_inforu   portheader_nameheaderconfig_headers_lowerenv_namer*   r+   current_notebook_data	pool_sizerender_taskrendered_cacherendered	renderingrd   rF   supported_file_extensionsxfile_extenstionrN   rO   page_config_kwargsrU   rW   
kernel_envrh   re   rf   rL   rg   s#                                  @@@@r   get_generatorzVoilaHandler.get_generatorS   s    **2d 4!!$'ggoom,151B1B\--. 	\++, 36dll6H6H2I\../7=k]5K\112589M9M5N\112():):)@)@)BC
d>BT\--.15\--. t''889A=#||33 S #'":":"K"K( LLN($ (
 $$&*>>!&{'8'8':'B'B3'L&MNH-1\\-A-A-E-Ek-RL*S ((T:%%gt4	 	4)NO*-	3'	*.*=*=*K*K*O*Or+! "00>>}MI ,,!LL""
 ))??+ 22DLL4I4I4K, @  	 %11'LA >"Q&ggn-- )4"3Hi8}s>22!wwxN0C0E'FG"" *3 # #olA""
 *2
%%,,$($<$<$W$WXqX #=188>>@O&??%%d+!]]../?@N--++M:K !MM MMxx'+'?'?	" *?,>?K$$3d33( #0 # $$($<$< $ 4 4+#22#22!%!6!6$($<$<#22'-'C  ..,i.HHHE 8BJJ7,7J5<J|1126:mmJ|2238<8I8Ic9J|445 :>9N9N9PJ|5566B((7J|223 +##00 # 5 5 @ @ E E" 1  I !//::9EMMMOE''==,,"22'+'?'?'O'OF'77	B& !!(*-
 	')0)9)9		T%=%=%U%U* $L $+&& I(.  	$&!I	*  #4# YR I(>$ ++ %"*$%s   F<_)^_).B9_)(A^ )A1_)^.A_)"^1#A_)%^7)^4*^7-0_)^94E_)^>D_)_ B+_);_ __ _)^+'_)*^++_)1_)4^77_)_)_ _&#_)%_&&_)c                 R    | j                  t        | j                  dd|             y )Nvoilafiles)redirectr   r$   )r   r\   s     r   ri   zVoilaHandler.redirect_to_file  s    mDMM7GTJKr   r   r   template_namer   request_argsreturnc                     |dk(  ryt        |      dk(  ry|j                  d      }|j                  d      }|||k7  ry|||k7  ryy)Nr   Fr   r   T)ry   r~   )r   r   r   r   r   r   rendered_templaterendered_themes           r   r   z)VoilaHandler.should_use_rendered_notebook"  sc     >}")--j9&**73$:K)K5!8r   ra   )r2   r3   r4   r   r   ri   r   intro   r	   r   __classcell__)rA   s   @r   r6   r6   F   sT    
$J'XL  	
   
r   r6   ) r   rj   pathlibr   typingr   jupyter_server.base.handlersr   jupyter_server.utilsr   nbclient.utilr   tornado.httputilr   traitlets.traitletsr	   'voila.tornado.execution_request_handlerr
   configurationr   _versionr   notebook_rendererr   request_info_handlerr   utilsr   r   r   r   r6   r    r   r   <module>r      sS     	   7 . & 0 $ K - ! / : Q Q#>~ #>Lp# pr   