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)	config
UPLOAD_DIR
upload_dirospathexistsmakedirssuper__init__)self	__class__ %/opt/crm/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)gcurrent_personanonymous_userdebugsplitvarsmodelsget)r   req_filename
model_name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$   flaskhelpers	send_file	safe_joinr   urllibparse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%   
error_codez/files/)urlu.   Сначала создайте CmfAttachment!i@B u   Файл больше, чем u_    МБ. Для загрузки, пожалуйста уменьшите размер файлаT)aborti 5wu3   На диске недостаточно места)r.   u/   Не удалось сохранить файлZno_saveNOK)resultZ
attach_url)requestformr   filesr-   r   r   r*   r+   quoter   CmfAttachment	ExceptionreadlenMAX_SIZE_MEGABYTEdelete	cmf_alertshutil
disk_usageZupload_filesavelogging	exceptionr2   value)r   r    r.   Z	load_file	file_pathr2   
attachmentZ
bytes_filetotalusedfreeer   r   r   post;   s6    
$zFileView.post)__name__
__module____qualname____url__r   r$   cmfviewsactionr   strrM   __classcell__r   r   r   r   r      s   
r   )
r*   pathlibr   rA   cmf.includer>   rR   rS   BaseViewr   r   r   r   r   <module>   s
   