
    oi?                         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  G d d	e	      Zy# e$ r	 d dlmZ Y 1w xY w)
    N)json_default)date_default)web)
APIHandler)validate_model)ensure_asyncc                   P     e Zd ZdZ fdZej                  dd       ZddZ xZ	S )VoilaContentsHandlerz+Handle content requests from the tree page.c                     t         |           |d   }g t        |j                  j	                               d| _        y )Nvoila_configurationz.ipynb)super
initializelistextension_language_mappingkeysallowed_extensions)selfkwargsr   	__class__s      e/home/ubuntu/docker-apps/notebooks/venv/lib/python3.12/site-packages/voila/tornado/contentshandler.pyr   zVoilaContentsHandler.initialize   sI    $%:;#
%@@EEGH#
#
    c                 :   K   |xs d} j                   } j                  dd      }|dvrt        j                  dd|z         j                  dd	      }|d
vrt        j                  dd|z        t	        |xs d      }|j
                  s<t        |j                  |             d{   rt        j                  dd|d      t         j                   j                  |d||             d{   }t        ||        fd} ||      st        j                  dd|d      |d   dk(  r1	 t        |d   d       |d<   t        t        ||d               |d<   nd|d<    j                  |d       y7 7 # t        $ r d|d<   Y (w xY ww)zReturn a model for a file or directory.

        A directory model contains a list of models (without content)
        of the files and directories it contains.
         formatNdefault>   Ntextbase64i  zFormat %r is invalidcontent1>   0r    zContent %r is invalidi  zfile or directory z does not exist)pathtyper   r   )expect_contentc                     | d   dv ryt         j                  j                  | j                  d            \  }}|j                  v S )Nr#   )	directorynotebookTr"   )osr"   splitextgetr   )r   __extr   s      r   allowed_contentz1VoilaContentsHandler.get.<locals>.allowed_content9   sE    v";;gg&&w{{6':;GB$1111r   r#   r&   c                     | d   S )Nname )is    r   <lambda>z*VoilaContentsHandler.get.<locals>.<lambda>D   s
    !F) r   )keyF)location)contents_managerget_query_argumentr   	HTTPErrorintallow_hiddenr   	is_hiddenr*   r   sortedr   filter	Exception_finish_model)r   r"   cmr   content_strr   modelr-   s   `       r   r*   zVoilaContentsHandler.get   s     zr""((4(@11--%;f%DEE--i-Ej(--%<{%JKKk'R(bll46H)I#I#I--'9$%QRR"!!%%	 & 
 
 	uW5	2 u%--'9$%QRR=K'(#)%	*:@S#Ti #'i@P(Q#Ri 
  $E)551C $J
0  (#'i (sJ   B+F.F/A	F8F9A F:/F )FFFFFFc                     |r&| j                  |d         }| j                  d|       | j                  d|d          | j                  dd       | j                  t        j                  |t
                     y)	zBFinish a JSON request with a model, setting relevant headers, etc.r"   LocationzLast-Modifiedlast_modifiedzContent-Typezapplication/jsonr   N)location_url
set_headerfinishjsondumpsr   )r   rA   r4   s      r   r>   z"VoilaContentsHandler._finish_modelN   s`    ((v7HOOJ1)?@(:;DJJul;<r   )r   )T)
__name__
__module____qualname____doc__r   r   authenticatedr*   r>   __classcell__)r   s   @r   r
   r
      s+    5
 	22 22h=r   r
   )rH   r(   jupyter_client.jsonutilr   ImportErrorr   tornador   jupyter_server.base.handlersr   )jupyter_server.services.contents.handlersr   jupyter_core.utilsr   r
   r0   r   r   <module>rV      sF     	E4  3 D +G=: G=  EDEs   4 AA