Ë
    :vžj·;  ã                   óœ  — d 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mZ dd
lmZmZmZ ddlmZmZ dZdedeeef   dee   fd„Zd%d„Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de«      Z" G d„ de«      Z# G d„ de«      Z$dZ%dez  e!fd e› d!e%› �e"fd"ez  e$fd#ez  e fd$e#fgZ&y# e$ r	 ddlm	Z Y Œ°w xY w)&z‘Tornado handlers for the contents web service.

Preliminary documentation at https://github.com/ipython/ipython/wiki/IPEP-27%3A-Contents-Service
é    N)Ú
HTTPStatus)ÚAny)Újson_default)Údate_default)Úensure_async)Úweb)Úallow_unauthenticatedÚ
authorized)Ú
APIHandlerÚJupyterHandlerÚ
path_regex)Ú
url_escapeÚurl_path_joinÚcontentsÚexpect_definedÚmodelÚkeysc                 óæ   — | r1|D �cg c]
  }||   �Œ	|‘Œ }}|rt        j                  dd|› �«      ‚y|D �ci c]  }||   €Œ	|||   “Œ }}|rt        j                  dd|› �«      ‚yc c}w c c}w )zO
    Validate that the keys are defined (i.e. not None) or not (i.e. None)
    Néô  zKeys unexpectedly None: zKeys unexpectedly not None: )r   Ú	HTTPError)r   r   r   ÚkeyÚerrorss        úz/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyter_server/services/contents/handlers.pyÚ_validate_keysr      s¢   € ñ
 Ù!%Ó<¡˜#¨¨s©Ñ);’# ˆÐ<ÙÜ—-‘-ØØ*¨6¨(Ð3óð ð ñ .2ÓL©T c°U¸3±ZÑ5K�#�u˜S‘z‘/¨TˆÐLÙÜ—-‘-ØØ.¨v¨hÐ7óð ð ùò =ùò Ms   ‡
A)’A)¸
A.ÁA.c                 óê   — h d£}|r|j                  ddg«       |t        | j                  «       «      z
  }|rt        j                  dd|› �«      ‚ddg}t        || |«       |rt        || ddg«       yy)	zþ
    Validate a model returned by a ContentsManager method.

    If expect_content is True, then we expect non-null entries for 'content'
    and 'format'.

    If expect_hash is True, then we expect non-null entries for 'hash' and 'hash_algorithm'.
    >	   ÚnameÚpathÚtypeÚformatÚcontentÚcreatedÚmimetypeÚwritableÚlast_modifiedÚhashÚhash_algorithmr   zMissing Model Keys: r    r   N)ÚupdateÚsetr   r   r   r   )r   Úexpect_contentÚexpect_hashÚrequired_keysÚmissingÚcontent_keyss         r   Úvalidate_modelr.   0   sŠ   € ò
€Mñ Ø×Ñ˜fÐ&6Ð7Ô8Øœc %§*¡*£,Ó/Ñ/€GÙÜ�m‰mØØ" 7 )Ð,ó
ð 	
ð
 ˜xÐ(€LÜ�> 5¨,Ô7ÙÜ�{ E¨FÐ4DÐ+EÕFð ó    c                   ó   — e Zd ZdZeZy)ÚContentsAPIHandlerzA contents API handler.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚAUTH_RESOURCEÚauth_resource© r/   r   r1   r1   S   s
   „ Ù!à!�Mr/   r1   c                   ó0  — e Zd ZdZd„ Zdd„Zd„ Zej                  e	dd„«       «       Z
ej                  e	dd„«       «       Zdd„Zd	„ Zdd
„Zd„ Zej                  e	dd„«       «       Zej                  e	dd„«       «       Zej                  e	dd„«       «       Zy)ÚContentsHandlerzA contents handler.c                 óD   — t        | j                  ddt        |«      «      S )z«Return the full URL location of a file.

        Parameters
        ----------
        path : unicode
            The API path of the file, such as "foo/bar.txt".
        Úapir   )r   Úbase_urlr   ©Úselfr   s     r   Úlocation_urlzContentsHandler.location_url\   s   € ô ˜TŸ]™]¨E°:¼zÈ$Ó?OÓPÐPr/   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-Modifiedr$   zContent-Typezapplication/json©ÚdefaultN)r@   Ú
set_headerÚfinishÚjsonÚdumpsr   )r?   r   Úlocations      r   Ú_finish_modelzContentsHandler._finish_modelf   s`   € áØ×(Ñ(¨¨v©Ó7ˆHØ�O‰O˜J¨Ô1Ø�‰˜¨¨Ñ)?Ô@Ø�‰˜Ð(:Ô;Ø�‰”D—J‘J˜u¬lÔ;Õ<r/   c              ƒ   ó„   K  — | j                  |«       | j                  |«       | j                  «       ƒ d{  –—†  y7 Œ­w)z@Finish a JSON request with an error code and descriptive messageN)Ú
set_statusÚwriterF   )r?   ÚcodeÚmessages      r   Ú_finish_errorzContentsHandler._finish_erroro   s-   è ø€ à�‰˜ÔØ�
‰
�7ÔØ�k‰k‹m×Òús   ‚6A ¸>¹A c           	   ƒ   óv  K  — |xs d}| j                   }| j                  dd¬«      }|dvrd}| 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                  dd¬«      }|dvrt        j                  d	d|›d�«      ‚t	        |«      }|j
                  sOt        |j                  |«      «      ƒ d{  –—† r-| j                  t        j                  d|›d�«      ƒ d{  –—†  y	 |}		 t        | j                   j                  |||||¬«      «      ƒ d{  –—† }
t        |
||	¬«       | j                  |
d¬«       y7 Œˆ7 Œ^7 Œ*# t        $ r6 d}	t        | j                   j                  ||||¬«      «      ƒ d{  –—†7  }
Y Œfw xY w# t        j                  $ rP}|j                  t        j                  k(  r-| j                  t        j                  d|›d�«      ƒ d{  –—†7   ‚ d}~ww xY w­w)z©Return a model for a file or directory.

        A directory model contains a list of models (without content)
        of the files and directories it contains.
        Ú r   NrC   >   NÚfileÚnotebookÚ	directoryrS   r   >   NÚtextÚbase64é�  zFormat %r is invalidr    Ú1>   Ú0rY   zContent %r is invalidr%   rZ   zHash argument z# is invalid. It must be '0' or '1'.zfile or directory z does not exist)r   r   r   r    Úrequire_hashF)r   r   r   r    )r)   r*   )rI   )Úcontents_managerÚget_query_argumentr   r   ÚintÚallow_hiddenr   Ú	is_hiddenrP   r   Ú	NOT_FOUNDÚgetÚ	TypeErrorr.   rJ   Ústatus_code)r?   r   Úcmr   r   Úcontent_strr    Úhash_strr[   r*   r   Úexcs               r   rb   zContentsHandler.getu   sp  è ø€ ð Šz�rˆØ×"Ñ"ˆà×&Ñ& v°tÐ&Ó<ˆØÐ>Ñ>àˆDà×(Ñ(¨¸4Ð(Ó@ˆØÐ1Ñ1Ü—-‘- Ð%;¸fÑ%DÓEÐEØ×-Ñ-¨iÀÐ-ÓEˆØ˜jÑ(Ü—-‘- Ð%<¸{Ñ%JÓKÐKÜ�kÒ' RÓ(ˆà×*Ñ*¨6¸3Ð*Ó?ˆØ˜:Ñ%Ü—-‘-Ø�~ h \Ð1TÐUóð ô ˜8“}ˆà�Š¬°b·l±lÀ4Ó6HÓ)I×#IÐ#IØ×$Ñ$Ü×$Ñ$Ð(:¸4¸(À/Ð&Ró÷ ð ð ð 	Ø&ˆKðÜ*Ø×)Ñ)×-Ñ-Ø!Ø!Ø%Ø 'Ø%1ð .ó ó÷ �ô* ˜5°ÀkÕRØ×Ñ˜u¨uÐÕ5ð? $Jøðøðùô ò ð $�Ü*Ø×)Ñ)×-Ñ-Ø!Ø!Ø%Ø 'ð	 .ó ó÷ ð ’ð	ûô �}‰}ò 	à�‰¤*×"6Ñ"6Ò6Ø×(Ñ(Ü×(Ñ(Ð,>¸t¸hÀoÐ*Vó÷ ñ ð ûð	üs—   ‚D H9ÄFÄ+H9Ä.FÄ/H9Ä5G Ä8,F Å$FÅ%F Å)!G Æ
H9ÆH9ÆF Æ6GÇG
ÇGÇG ÇGÇG ÇH6Ç&AH1È*H-È+H1È1H6È6H9c              ƒ   óö  K  — | j                   }| j                  «       }|€t        j                  dd«      ‚|j	                  d«      }|ri|j
                  s]t        |j                  |«      «      ƒ d{  –—† s"t        |j                  |«      «      ƒ d{  –—† rt        j                  dd|›�«      ‚t        |j                  ||«      «      ƒ d{  –—† }t        |«       | j                  |«       y7 Œ7 Œ_7 Œ%­w)z?PATCH renames a file or directory without re-uploading content.NrX   zJSON body missingr   z Cannot rename file or directory )r\   Úget_json_bodyr   r   rb   r_   r   r`   r'   r.   rJ   )r?   r   re   r   Úold_paths        r   ÚpatchzContentsHandler.patch¼   sÖ   è ø€ ð ×"Ñ"ˆØ×"Ñ"Ó$ˆØˆ=Ü—-‘- Ð%8Ó9Ð9à—9‘9˜VÓ$ˆáØ—O’Oä" 2§<¡<°Ó#5Ó6×6Ð6ÄÈRÏ\É\ÐZbÓMcÓ@d×:dÐ:dô —-‘- Ð'GÈÀxÐ%PÓQÐQä" 2§9¡9¨U°DÓ#9Ó:×:ˆÜ�uÔØ×Ñ˜5Õ!ð 7øÐ:døð
 ;ús6   ‚A1C9Á3C3Á4!C9ÂC5Â;C9ÃC7Ã"C9Ã5C9Ã7C9Nc              ƒ   ó  K  — | j                   j                  d||xs d«       t        | j                  j	                  ||«      «      ƒ d{  –—† }| j                  d«       t        |«       | j                  |«       y7 Œ2­w)z6Copy a file, optionally specifying a target directory.zCopying %r to %rrR   NéÉ   )ÚlogÚinfor   r\   ÚcopyrL   r.   rJ   )r?   Ú	copy_fromÚcopy_tor   s       r   Ú_copyzContentsHandler._copyÓ   sm   è ø€ à�‰�‰ØØØŠM�rô	
ô
 # 4×#8Ñ#8×#=Ñ#=¸iÈÓ#QÓR×RˆØ�‰˜ÔÜ�uÔØ×Ñ˜5Õ!ð Sús   ‚A
BÁA?Á3Bc              ƒ   óü   K  — | j                   j                  d|«       t        | j                  j	                  ||«      «      ƒ d{  –—† }| j                  d«       t        |«       | j                  |«       y7 Œ2­w)z#Handle upload of a new file to pathzUploading file to %sNrn   )ro   rp   r   r\   ÚnewrL   r.   rJ   )r?   r   r   s      r   Ú_uploadzContentsHandler._uploadß   sa   è ø€ à�‰�‰Ð,¨dÔ3Ü" 4×#8Ñ#8×#<Ñ#<¸UÀDÓ#IÓJ×JˆØ�‰˜ÔÜ�uÔØ×Ñ˜5Õ!ð Kús   ‚AA<ÁA:Á3A<c              ƒ   ó
  K  — | j                   j                  d|xs d|«       t        | j                  j	                  |||¬«      «      ƒ d{  –—† }| j                  d«       t        |«       | j                  |«       y7 Œ2­w)z#Create a new, empty untitled entityzCreating new %s in %srS   )r   r   ÚextNrn   )ro   rp   r   r\   Únew_untitledrL   r.   rJ   )r?   r   r   ry   r   s        r   Ú_new_untitledzContentsHandler._new_untitledç   sr   è ø€ à�‰�‰Ð-¨tª~°v¸tÔDÜ"Ø×!Ñ!×.Ñ.°D¸tÈÐ.ÓMó
÷ 
ˆð 	�‰˜ÔÜ�uÔØ×Ñ˜5Õ!ð
ús   ‚ABÁBÁ3Bc              ƒ   ó  K  — |j                  dd«      }|r|dk(  r| j                  j                  d|«       t        | j                  j                  ||«      «      ƒ d{  –—† }t        |«       | j                  |«       y7 Œ!­w)zSave an existing file.ÚchunkNéÿÿÿÿzSaving file at %s)rb   ro   rp   r   r\   Úsaver.   rJ   )r?   r   r   r}   s       r   Ú_savezContentsHandler._saveñ   sn   è ø€ à—	‘	˜' 4Ó(ˆÙ˜ šØ�H‰H�M‰MÐ-¨tÔ4Ü" 4×#8Ñ#8×#=Ñ#=¸eÀTÓ#JÓK×KˆÜ�uÔØ×Ñ˜5Õ!ð Lús   ‚ABÁ BÁ!"Bc              ƒ   óÄ  K  — | j                   }t        |j                  |«      «      ƒ d{  –—† }|rt        j                  dd«      ‚| j                  «       }|rÞ|j                  d«      }|r„|j                  s]t        |j                  |«      «      ƒ d{  –—† s"t        |j                  |«      «      ƒ d{  –—† rt        j                  dd|›�«      ‚| j                  ||«      ƒ d{  –—†  y|j                  dd«      }|j                  dd«      }|d	vrd
}| j                  |||¬«      ƒ d{  –—†  y| j                  |«      ƒ d{  –—†  y7 �Œ'7 Œ¾7 Œž7 Œm7 Œ(7 Œ­w)aZ  Create a new file in the specified path.

        POST creates new files. The server always decides on the name.

        POST /api/contents/path
          New untitled, empty file or directory.
        POST /api/contents/path
          with body {"copy_from" : "/path/to/OtherNotebook.ipynb"}
          New copy of OtherNotebook in path
        NrX   z&Cannot POST to files, use PUT instead.rr   zCannot copy file or directory ry   rR   r   >   NrR   rS   rT   rU   rS   )r   ry   )r\   r   Úfile_existsr   r   rj   rb   r_   r`   rt   r{   )r?   r   re   r‚   r   rr   ry   r   s           r   ÚpostzContentsHandler.postú   s?  è ø€ ð ×"Ñ"ˆä(¨¯©¸Ó)=Ó>×>ˆÙÜ—-‘- Ð%MÓNÐNà×"Ñ"Ó$ˆÙØŸ	™	 +Ó.ˆIÙØ—’Ü& r§|¡|°DÓ'9Ó:×:Ð:Ü)¨"¯,©,°yÓ*AÓB×BÐBäŸ-™-¨Ð/MÈdÈXÐ-VÓWÐWàŸ*™* Y°Ó5×5Ñ5à—i‘i  rÓ*�Ø—y‘y ¨Ó,�ØÐJÑJà!�DØ×(Ñ(¨°D¸cÐ(ÓB×BÑBà×$Ñ$ TÓ*×*Ñ*ð/ ?ùð ;øØBøð 6øð Cøà*úsk   ‚*E ¬E­A*E ÂEÂ!E Â9EÂ:2E Ã,EÃ-AE Ä3EÄ4E ÅEÅE ÅE ÅE ÅE ÅE ÅE c              ƒ   óî  K  — | j                  «       }| j                  }|�r-|j                  d«      rt        j                  dd«      ‚|j
                  s}|j                  d«      r1t        |j                  |j                  d«      «      «      ƒ d{  –—† s"t        |j                  |«      «      ƒ d{  –—† rt        j                  dd|›�«      ‚t        | j                  j                  |«      «      ƒ d{  –—† }|j                  dd«      d	vrd
|d<   |r| j                  ||«      ƒ d{  –—†  y| j                  ||«      ƒ d{  –—†  y| j                  |«      ƒ d{  –—†  y7 ŒÖ7 Œ¶7 Œs7 Œ@7 Œ'7 Œ­w)aµ  Saves the file in the location specified by name and path.

        PUT is very similar to POST, but the requester specifies the name,
        whereas with POST, the server picks the name.

        PUT /api/contents/path/Name.ipynb
          Save notebook at ``path/Name.ipynb``. Notebook structure is specified
          in `content` key of JSON request body. If content is not specified,
          create a new empty notebook.
        rr   rX   zCannot copy with PUT, only POSTr   Nz Cannot create file or directory r   rR   >   NrR   rS   rT   rU   rS   )rj   r\   rb   r   r   r_   r   r`   r‚   r€   rw   r{   )r?   r   r   re   Úexistss        r   ÚputzContentsHandler.put#  s>  è ø€ ð ×"Ñ"Ó$ˆØ×"Ñ"ˆâØ�y‰y˜Ô%Ü—m‘m CÐ)JÓKÐKØ—?’?Ø—‘˜6Ô"¬\¸"¿,¹,ÀuÇyÁyÐQWÓGXÓ:YÓ-Z×'ZÐ'ZÜ% b§l¡l°4Ó&8Ó9×9Ð9ä—m‘m CÐ+KÈDÈ8Ð)TÓUÐUä'¨×(=Ñ(=×(IÑ(IÈ$Ó(OÓP×PˆFØ�y‰y˜ Ó$Ð,WÑWà &��f‘ÙØ—j‘j ¨Ó-×-Ñ-à—l‘l 5¨$Ó/×/Ñ/à×$Ñ$ TÓ*×*Ñ*ð ([øØ9øð Qøð
 .øà/øà*úsm   ‚BE5ÂE)Â!E5Â4E+Â5AE5Ã9E-Ã:4E5Ä.E/Ä/E5Å	E1Å
E5Å#E3Å$E5Å+E5Å-E5Å/E5Å1E5Å3E5c              ƒ   óx  K  — | j                   }|j                  s;t        |j                  |«      «      ƒ d{  –—† rt	        j
                  dd|›�«      ‚| j                  j                  d|«       t        |j                  |«      «      ƒ d{  –—†  | j                  d«       | j                  «        y7 Œ}7 Œ(­w)zdelete a file in the given pathNrX   z Cannot delete file or directory z	delete %séÌ   )r\   r_   r   r`   r   r   ro   ÚwarningÚdeleterL   rF   ©r?   r   re   s      r   rŠ   zContentsHandler.deleteG  s”   è ø€ ð ×"Ñ"ˆà�Š¬°b·l±lÀ4Ó6HÓ)I×#IÐ#IÜ—-‘- Ð'GÈÀxÐ%PÓQÐQà�‰×Ñ˜ dÔ+Ü˜2Ÿ9™9 T›?Ó+×+Ð+Ø�‰˜ÔØ�‰�ð $Jøð 	,ús"   ‚6B:¸B6¹AB:ÂB8Â'B:Â8B:)T©rR   )N)rR   rR   )r2   r3   r4   r5   r@   rJ   rP   r   Úauthenticatedr
   rb   rl   rt   rw   r{   r€   rƒ   r†   rŠ   r8   r/   r   r:   r:   Y   sØ   „ ÙòQó=òð 	×ÑØòCó ó ðCðJ 	×ÑØò"ó ó ð"ó*
"ò"ó"ò"ð 	×ÑØò%+ó ó ð%+ðN 	×ÑØò +ó ó ð +ðD 	×ÑØò
ó ó ñ
r/   r:   c                   óp   — e Zd ZdZej
                  edd„«       «       Zej
                  edd„«       «       Zy)ÚCheckpointsHandlerzA checkpoints API handler.c              ƒ   óÄ   K  — | j                   }t        |j                  |«      «      ƒ d{  –—† }t        j                  |t
        ¬«      }| j                  |«       y7 Œ1­w)z get lists checkpoints for a fileNrC   )r\   r   Úlist_checkpointsrG   rH   r   rF   )r?   r   re   ÚcheckpointsÚdatas        r   rb   zCheckpointsHandler.getY  sM   è ø€ ð ×"Ñ"ˆÜ(¨×)<Ñ)<¸TÓ)BÓC×CˆÜ�z‰z˜+¬|Ô<ˆØ�‰�DÕð Dús   ‚*A ¬A­2A c           
   ƒ   óf  K  — | j                   }t        |j                  |«      «      ƒ d{  –—† }t        j                  |t
        ¬«      }t        | j                  dt        |«      dt        |d   «      «      }| j                  d|«       | j                  d«       | j                  |«       y7 Œ‚­w)zpost creates a new checkpointNrC   úapi/contentsr’   ÚidrB   rn   )r\   r   Úcreate_checkpointrG   rH   r   r   r=   r   rE   rL   rF   )r?   r   re   Ú
checkpointr“   rI   s         r   rƒ   zCheckpointsHandler.postb  s•   è ø€ ð ×"Ñ"ˆÜ'¨×(<Ñ(<¸TÓ(BÓC×Cˆ
Ü�z‰z˜*¬lÔ;ˆÜ Ø�M‰MØÜ�tÓØÜ�z $Ñ'Ó(ó
ˆð 	�‰˜
 HÔ-Ø�‰˜ÔØ�‰�DÕð Dús   ‚*B1¬B/­BB1NrŒ   )	r2   r3   r4   r5   r   r�   r
   rb   rƒ   r8   r/   r   r�   r�   V  sG   „ Ù$à×ÑØòó ó ðð 	×ÑØòó ó ñr/   r�   c                   ól   — e Zd ZdZej
                  ed„ «       «       Zej
                  ed„ «       «       Zy)ÚModifyCheckpointsHandlerz#A checkpoints modification handler.c              ƒ   ó°   K  — | j                   }t        |j                  ||«      «      ƒ d{  –—†  | j                  d«       | j	                  «        y7 Œ&­w)z&post restores a file from a checkpointNrˆ   )r\   r   Úrestore_checkpointrL   rF   ©r?   r   Úcheckpoint_idre   s       r   rƒ   zModifyCheckpointsHandler.postx  sI   è ø€ ð ×"Ñ"ˆÜ˜2×0Ñ0°ÀÓEÓF×FÐFØ�‰˜ÔØ�‰�ð 	Gúó   ‚+A­A®'Ac              ƒ   ó°   K  — | j                   }t        |j                  ||«      «      ƒ d{  –—†  | j                  d«       | j	                  «        y7 Œ&­w)z+delete clears a checkpoint for a given fileNrˆ   )r\   r   Údelete_checkpointrL   rF   r�   s       r   rŠ   zModifyCheckpointsHandler.delete�  sI   è ø€ ð ×"Ñ"ˆÜ˜2×/Ñ/°¸tÓDÓE×EÐEØ�‰˜ÔØ�‰�ð 	FúrŸ   N)	r2   r3   r4   r5   r   r�   r
   rƒ   rŠ   r8   r/   r   rš   rš   u  sG   „ Ù-à×ÑØñó ó ðð 	×ÑØñó ó ñr/   rš   c                   ó4   — e Zd ZdZdZed„ «       ZexZxZxZ	Z
y)ÚNotebooksRedirectHandlerz(Redirect /api/notebooks to /api/contents)ÚGETÚPUTÚPATCHÚPOSTÚDELETEc           	      ó˜   — | j                   j                  d«       | j                  t        | j                  dt        |«      «      «       y)zHandle a notebooks redirect.z//api/notebooks is deprecated, use /api/contentsr•   N)ro   r‰   Úredirectr   r=   r   r>   s     r   rb   zNotebooksRedirectHandler.get–  s5   € ð 	�‰×ÑÐJÔKØ�‰”m D§M¡M°>Ä:ÈdÓCSÓTÕUr/   N)r2   r3   r4   r5   ÚSUPPORTED_METHODSr	   rb   r†   rl   rƒ   rŠ   r8   r/   r   r£   r£   ‹  s9   „ Ù2ðÐð ñVó ðVð
 #&Ð%€CÐ%ˆ%Ð%�$™r/   r£   c                   óN   — e Zd ZdZej
                   ee¬«      dd„«       «       Zy)ÚTrustNotebooksHandlerz"Handles trust/signing of notebooks)Úresourcec              ƒ   ó®   K  — | j                   }t        |j                  |«      «      ƒ d{  –—†  | j                  d«       | j	                  «        y7 Œ&­w)zTrust a notebook by path.Nrn   )r\   r   Útrust_notebookrL   rF   r‹   s      r   rƒ   zTrustNotebooksHandler.post¢  sF   è ø€ ð ×"Ñ"ˆÜ˜2×,Ñ,¨TÓ2Ó3×3Ð3Ø�‰˜ÔØ�‰�ð 	4ús   ‚*A¬A­'ANrŒ   )	r2   r3   r4   r5   r   r�   r
   r6   rƒ   r8   r/   r   r­   r­   Ÿ  s*   „ Ù,à×ÑÙ˜Ô'òó (ó ñr/   r­   z(?P<checkpoint_id>[\w-]+)z/api/contents%s/checkpointsz/api/contentsz/checkpoints/z/api/contents%s/trustz/api/contents%sz/api/notebooks/?(.*))FF)'r5   rG   Úhttpr   Útypingr   Újupyter_client.jsonutilr   ÚImportErrorr   Újupyter_core.utilsr   Útornador   Újupyter_server.auth.decoratorr	   r
   Újupyter_server.base.handlersr   r   r   Újupyter_server.utilsr   r   r6   ÚboolÚdictÚstrÚlistr   r.   r1   r:   r�   rš   r£   r­   Ú_checkpoint_id_regexÚdefault_handlersr8   r/   r   Ú<module>rÀ      s)  ðñó Ý Ý ðEÝ4õ ,Ý ç Kß OÑ Oß :à€ð 4ð °°S¸#°X±ð ÀdÈ3Áió ó* GôF"˜ô "ôzÐ(ô zôzÐ+ô ô>Ð1ô ô,&˜~ô &ô(
˜Nô 
ð$ 4Ð ð $ jÑ0Ð2DÐEà˜˜ MÐ2FÐ1GÐHØ ðð  
Ñ*Ð,AÐBØ˜*Ñ$ oÐ6ØÐ6Ð7ð	Ñ øðM ò EßDðEús   ”B= Â=CÃ
C