B
    3\
                 @   sX   d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dl	Z	G dd deZ
dS )    )FileContentsManager)contextmanager)webNc                   s*   e Zd ZdZd fdd	Zdd Z  ZS )LargeFileManagerzHandle large file upload. c          
      s  | dd}|dk	rn|d}d|kr4tdd|d dkrVtdd|d d	|krv|d d
krvtdd| |}y`|dkr| jd| | j||d t	t
| ||d	 | d n| ||d	 | d W nb tjk
r    Y nL tk
rB } z,| jjd||dd tdd||f W dd}~X Y nX | j |dd}|dkrj| j||d |S t	t
| ||S dS )z9Save the file model and return the model with no content.chunkN/typei  zNo file type providedfilez7File type "{}" is not supported for large file transfercontentZ	directoryzNo file content provided   z	Saving %s)modelpathformatzError while saving file: %s %sT)exc_infoi  z)Unexpected error while saving file: %s %sF)r   )r   os_path)getstripr   	HTTPErrorr   Z_get_os_pathlogdebugZrun_pre_save_hooksuperr   Z
_save_file_save_large_file	ExceptionerrorZrun_post_save_hooksave)selfr   r   r   r   e)	__class__ Jlib/python3.7/site-packages/notebook/services/contents/largefilemanager.pyr      s4    


 &
zLargeFileManager.savec          
   C   s   |dkrt ddy,|dkr*|d}n|d}t|}W n6 tk
rv } zt dd||f W dd}~X Y nX | |P tj	|rtj
tj|t|}t|d	}|| W dQ R X W dQ R X dS )
zSave content of a generic file.>   textbase64i  z:Must specify format of file contents as 'text' or 'base64'r"   utf8asciizEncoding error saving %s: %sNZab)r   r   encoder#   Z	b64decoder   Zperm_to_403osr   islinkjoindirnamereadlinkioopenwrite)r   r   r   r   ZbcontentZ	b64_bytesr   fr    r    r!   r   0   s"    
"z!LargeFileManager._save_large_file)r   )__name__
__module____qualname____doc__r   r   __classcell__r    r    )r   r!   r      s   %r   )Z&notebook.services.contents.filemanagerr   
contextlibr   Ztornador   Znbformatr#   r'   r,   r   r    r    r    r!   <module>   s   