
    ^h;                        S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  S	S
KJrJrJr  Sr\R,                  S:X  a  SrOSrS rS rS r " S S\5      r " S S\5      rSrS\-  \4S\ \ 3\4/rg)zTornado handlers for nbconvert.    N)run_sync)ensure_async)	from_dict)web)app_log)
authorized   )FilesRedirectHandlerJupyterHandler
path_regex	nbconvertwin32z	%B %d, %Yz
%B %-d, %Yc           
          / n[         R                  " U 5       HE  u  p#nUR                  U Vs/ s H"  n[         R                  R	                  X%5      PM$     sn5        MG     U$ s  snf )z'Find the resource files in a directory.)oswalkextendpathjoin)output_files_dirfilesdirpath_	filenamesfs         [/home/james-whalen/.local/lib/python3.13/site-packages/jupyter_server/nbconvert/handlers.pyfind_resource_filesr      sS    E!#)9!:I	B	1bggll7.	BC ";L Cs   )A$
c                    UR                  SS5      nU(       d  g[        R                  R                  U5      S   S-   nU R	                  U5        U R                  SS5        U R                  SS	5        [        R                  " 5       n[        R                  " US
[        R                  S9n[        R                  R                  U5      S   US   -   nUR                  XR                  S5      5        UR                  5        H4  u  pUR                  [        R                  R                  U	5      U
5        M6     UR                  5         U R!                  UR#                  5       5        g)zZip up the output and resource files and respond with the zip file.

Returns True if it has served a zip file, False if there are no resource
files, in which case we serve the plain output file.
outputsNFr   z.zipContent-Typezapplication/zipCache-Control.no-store, no-cache, must-revalidate, max-age=0w)modecompressionoutput_extensionzutf-8T)getr   r   splitextset_attachment_header
set_headerioBytesIOzipfileZipFileZIP_DEFLATEDwritestrencodeitemsbasenameclosefinishgetvalue)handlernameoutput	resourcesoutput_fileszip_filenamebufferzipfoutput_filenamefilenamedatas              r   respond_ziprA   &   s    ==D1L 77##D)!,v5L!!,/~'89(XY ZZ\F??69M9MNDgg&&t,Q/)<N2OOOMM/==#9:&,,.bgg&&x0$7 /JJLNN6??$%    c                 p    SSK Jn   U" U 5      n U" S	0 UD6$ ! [         a   n[        R                  " SSU-  5      UeSnAff = f! [
         a   n[        R                  " SSU -  5      UeSnAff = f! [         a7  n[        R                  " SU5        [        R                  " SSU-  5      UeSnAff = f)
z+get an exporter, raising appropriate errorsr   )get_exporter  zCould not import nbconvert: %sNi  zNo exporter for format: %sz Could not construct Exporter: %s )	nbconvert.exporters.baserD   ImportErrorr   	HTTPErrorKeyError	Exceptionr   	exception)formatkwargsrD   eexporters        r   rD   rD   D   s    N9O'
P!&!!  NmmC!AA!EFAMN
  OmmC!=!FGQNO  P<hGmmC!Ca!GHaOPs@    A A4 
A?A
A1A,,A14
B5>2B00B5c                   N    \ rS rSrSr\rSr\R                  \
S 5       5       rSrg)NbconvertFileHandlerY   zAn nbconvert file handler.)GETc                 :  ^^^#    U R                  5         [        XR                  U R                  S9mUR	                  S5      n[        U R                  S5      (       a=  U R                  R                  U5      n[        R                  R                  U5      u  pEOSn[        U R                  R                  US95      I Sh  vN nUS   nUS   S:w  a  [        R                  " X5      $ US	   mU R                  S
US   5        US   R!                  ["        5      n[        R                  R%                  U5      S   n	XS.U R&                  R(                  S   S.mU(       a  UTS   S'    [+        UUU4S j5      I Sh  vN u  p[5        XX5      (       a  gU R7                  SS5      R9                  5       S:X  a9  [        R                  R%                  U5      S   US   -   nU R;                  U5        TR<                  (       a  U R                  SSTR<                  -  5        U R                  SS5        U R?                  U
5        g GN N! [,         a<  nU R                  R/                  SU5        [0        R2                  " SSU-  5      UeSnAff = f7f)z(Get a notebook file in a desired format.)configlog/_get_os_pathN)r   r7   typenotebookcontentzLast-Modifiedlast_modifiedr   )r7   modified_date
config_dirmetadatar_   ra   r   c                  $   > T R                  TTS9$ )Nr9   )from_notebook_node)rP   nbresource_dicts   r   <lambda>*NbconvertFileHandler.get.<locals>.<lambda>   s    33B-3PrB   znbconvert failed: %rrE   nbconvert failed: %sdownloadfalsetruer%   r   %s; charset=utf-8r    r!   ) check_xsrf_cookierD   rV   rW   striphasattrcontents_managerrY   r   r   splitr   r&   r
   redirect_to_filesr)   strftimedate_formatr'   applicationsettingsr   rK   rL   r   rI   rA   get_argumentlowerr(   output_mimetyper4   )selfrM   r   os_pathext_resources_dirr2   modelr7   mod_datenb_titler8   r9   rO   r?   rP   re   rf   s                 @@@r   r&   NbconvertFileHandler.get_   sU     	 {{Izz# 4((.99++88>G*,''--*@'x $"4#8#8#<#<$#<#GHHV}=J&'99$EE9)?@ )22;?77##D)!, "*E**33LA

 0AM*%f-	H&.P' !F t655 Z1779VCww''-a09=O3PPH&&x0 ##OON,?(BZBZ,Z[)YZFY I0!  	HHH5q9--%;a%?@aG	HsJ   B?JIB)J/I II 
CJI 
J7JJJrF   N)__name__
__module____qualname____firstlineno____doc__AUTH_RESOURCEauth_resourceSUPPORTED_METHODSr   authenticatedr   r&   __static_attributes__rF   rB   r   rR   rR   Y   s0    $!M :  :rB   rR   c                   N    \ rS rSrSrSr\r\R                  \
S 5       5       rSrg)NbconvertPostHandler   zAn nbconvert post handler.)POSTc                   ^ ^^^#    [        UT R                  S9mT R                  5       nUc   eUR                  SS5      m[	        US   5      m [        UUUU 4S j5      I Sh  vN u  p4[        T TX45      (       a  gTR                  (       a  T R                  S	S
TR                  -  5        T R                  U5        g N[! [         a   n[        R                  " SSU-  5      UeSnAff = f7f)z,Convert a notebook file to a desired format.)rV   Nr7   znotebook.ipynbr\   c            	         > T R                  TSTS TR                  S5       0TR                  R                  S   S.S9$ )Nr7   .r_   r`   rc   )rd   rfindrv   rw   )rP   r7   nbnoder{   s   r   rg   +NbconvertPostHandler.post.<locals>.<lambda>   sI    33%+T2CDJJsO-D$E&*&6&6&?&?&M 4 rB   rE   ri   r   rm   )rD   rV   get_json_bodyr&   r   r   rK   r   rI   rA   rz   r)   r4   )	r{   rM   r~   r8   r9   rO   rP   r7   r   s	   `     @@@r   postNbconvertPostHandler.post   s       t{{;""$   yy!125+,	H&.' !F tT655 ##OON,?(BZBZ,Z[F'!  	H--%;a%?@aG	Hs=   A
C1C &C'C -AC1C 
C.C))C..C1rF   N)r   r   r   r   r   r   r   r   r   r   r   r   r   rF   rB   r   r   r      s0    $!!M  rB   r   z(?P<format>\w+)z/nbconvert/%sz/nbconvert/)r   r*   r   sysr,   anyio.to_threadr   jupyter_core.utilsr   nbformatr   tornador   tornado.logr   jupyter_server.auth.decoratorr   base.handlersr
   r   r   r   platformru   r   rA   rD   rR   r   _format_regexdefault_handlersrF   rB   r   <module>r      s    % 
 	 
  $ +    4 L L <<7KK<P*B> BJ%> %X # %';<M?:,/1EF rB   