U
    Vc                     @   s@   d dl Z d dlmZ d dlZd dlT dZG dd dejjZ	dS )    N)Path)*i,  c                       sT   e Zd ZdZdd fddZdd Zejjdd	 Z	ejje
d
ddZ  ZS )FileViewz/<path:req_filename>N)returnc                    s0   t j| _tj| js"t| j t   d S )N)	ZconfigZ
UPLOAD_DIR
upload_dirospathexistsmakedirssuper__init__)self	__class__ ./modules/files/views/index.pyr      s    zFileView.__init__c                 C   sZ   t jrt jt jkrdS t d|  |dd }|dd }tt| j|d}dS )u?   
        Проверяем доступ к файлу
        TuA   Попытка анонимного доступа к файлу /      )id)gZcurrent_personZanonymous_userdebugsplitvarsmodelsget)r   req_filenameZ
model_nameZobj_idobjr   r   r   _check_access   s    zFileView._check_accessc                 C   s:   |  |r*tjtj| jtj|S t	ddiS dS )u{   
        Возвращаем уже сохраненный файл
        :param req_filename:
        :return:
        erroru   Нет доступаN)
r   ZflaskZhelpersZ	send_fileZ	safe_joinr   urllibparseZunquotejsonify)r   r   r   r   r   r   /   s    
 zFileView.get)r   c              
   C   sF  t jdd}|dk}t jd}|s4tdddS t| j| }tj	d| }t
jj|d	}|sntd
| }t|td kr|  tdt ddd t| j\}}	}
|
t| dk r|  tddd z|j||d |  W n@ tk
r2 } z t| tddd W Y S d}~X Y nX td|jjdS )u   
        Сохраняем файл в объекте

        :param req_filename: Путь к сохраняемому файлу

        :return: Ответ клиенту
        :rtype: Response
        	overwriteFtruefileu   Не передан файлZno_data)r   Z
error_codez/files/)urlu.   Сначала создайте CmfAttachment!i@B u   Файл больше, чем u_    МБ. Для загрузки, пожалуйста уменьшите размер файлаT)aborti 5wu3   На диске недостаточно места)r#   u/   Не удалось сохранить файлZno_saveNZOK)resultZ
attach_url)ZrequestZformr   filesr"   r   r   r    r!   Zquoter   ZCmfAttachment	ExceptionreadlenMAX_SIZE_MEGABYTEdeleteZ	cmf_alertshutil
disk_usageZupload_fileZsaveZloggingZ	exceptionr&   value)r   r   r#   Z	load_fileZ	file_pathr&   Z
attachmentZ
bytes_filetotalusedfreeer   r   r   post;   s6    
$zFileView.post)__name__
__module____qualname__Z__url__r   r   cmfviewsactionr   strr6   __classcell__r   r   r   r   r      s   
r   )
r    pathlibr   r/   Zcmf.includer-   r:   r;   ZBaseViewr   r   r   r   r   <module>   s
   