o
    im                     @   s   d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZ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 Zdd Zdd ZG dd deZG dd deZdZde efde e efgZdS )zTornado handlers for nbconvert.    N)genwebescape)app_log   )IPythonHandlerFilesRedirectHandler
path_regex)maybe_future)	from_dict)
cast_bytes)textc                    s6   g }t | D ]\ }}| fdd|D  q|S )Nc                    s   g | ]	}t j |qS  )ospathjoin).0fdirpathr   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/notebook/nbconvert/handlers.py
<listcomp>   s    z'find_resource_files.<locals>.<listcomp>)r   walkextend)output_files_dirfilesdirnames	filenamesr   r   r   find_resource_files   s   r   c                 C   s   | dd}|s
dS tj|d d }| | | dd | dd	 t }tj	|d
tj
d}tj|d |d  }||t|d | D ]\}	}
|tj|	|
 qK|  | |  dS )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writestrr   itemsbasenameclosefinishgetvalue)handlernameoutput	resourcesoutput_fileszip_filenamebufferzipfoutput_filenamefilenamedatar   r   r   respond_zip   s    
rA   c              
   K   s   zddl m} W n ty } z
tdd| |d}~ww z|| }W n ty; } z
tdd|  |d}~ww z|d
i |W S  ty` } ztd| tdd	| |d}~ww )z+get an exporter, raising appropriate errorsr   )get_exporter  zCould not import nbconvert: Ni  zNo exporter for format: z Could not construct Exporter: %szCould not construct Exporter: r   )	nbconvert.exporters.baserB   ImportErrorr   	HTTPErrorKeyError	Exceptionr   	exception)formatkwargsrB   eExporterr   r   r   rB   :   s&   rB   c                       s8   e Zd ZdZe fddZejej	dd Z
  ZS )NbconvertFileHandler)GETc                       t  jd S Nz; sandbox allow-scriptssupercontent_security_policyself	__class__r   r   rT   R      z,NbconvertFileHandler.content_security_policyc              
   c   s   t || j| jd}|d}t| jdr$| j|}tj	|\}}nd }t
| jj|dV }|d }|d dkr@t| |S |d }	| d	|d
  |d
 tj}
tj|d }||
d| jjd d}|rp||d d< z|j|	|d\}}W n ty } z| jd| tdd| |d }~ww t| |||rd S | dd dkrtj|d |d  }| | |jr| d|j d | dd | | d S )N)configlog/_get_os_path)r   r7   typenotebookcontentzLast-Modifiedlast_modifiedr   )r7   modified_date
config_dirmetadatarc   re   r   r9   znbconvert failed: %srC   nbconvert failed: downloadfalsetruer&   r    ; charset=utf-8r!   r"   ) rB   rZ   r[   striphasattrcontents_managerr]   r   r   splitr
   r'   r   redirect_to_filesr*   strftimer   date_formatr(   applicationsettingsfrom_notebook_noderH   rI   r   rF   rA   get_argumentlowerr)   output_mimetyper4   )rV   rJ   r   exporteros_pathext_resources_dirr2   modelr7   nbmod_datenb_titleresource_dictr8   r9   rL   r?   r   r   r   r'   X   sV   



zNbconvertFileHandler.get)__name__
__module____qualname__SUPPORTED_METHODSpropertyrT   r   authenticatedr   	coroutiner'   __classcell__r   r   rW   r   rN   N   s    rN   c                       s2   e Zd ZdZe fddZejdd Z  Z	S )NbconvertPostHandler)POSTc                    rP   rQ   rR   rU   rW   r   r   rT      rY   z,NbconvertPostHandler.content_security_policyc           	   
   C   s   t || jd}|  }|dd}t|d }z|j|d|d |d i| jjd dd\}}W n t	yH } z
t
d	d
| |d }~ww t| |||rRd S |jr_| d|j d | | d S )N)rZ   r7   znotebook.ipynbr`   .rc   rd   rf   rC   rg   r    rk   )rB   rZ   get_json_bodyr'   r   ru   rfindrs   rt   rH   r   rF   rA   rx   r*   r4   )	rV   rJ   ry   r|   r7   nbnoder8   r9   rL   r   r   r   post   s(   

zNbconvertPostHandler.post)
r   r   r   r   r   rT   r   r   r   r   r   r   rW   r   r      s    r   z(?P<format>\w+)z/nbconvert/)__doc__r+   r   r-   tornador   r   r   tornado.logr   base.handlersr   r   r	   utilsr
   nbformatr   ipython_genutils.py3compatr   ipython_genutilsr   r   rA   rB   rN   r   _format_regexdefault_handlersr   r   r   r   <module>   s(    K(