U
    c                     @   s   d dl Z d dlZd dlmZmZ d dlZd dlmZ d dlT d dlm	Z	 d dl
mZ d dlmZ d dlmZ G d	d
 d
ejeZdS )    N)datetimetimezone)Path)*)CmfModel)cmf_hashlib)CmfPluginConvertMixin)cmf_attachmentc                       s   e Zd Zejjjd Zdd Z fddZdd Z	 fdd	Z
ed
d ZddddZeedddZdddedddZeedddZeedddZdd fdd
Z fd d!Zd&d"d#Zd$d% Z  ZS )'CmfAttachment)file_existsc                 C   s   | j jsd S td| j j}d}t| j jt| t|d  }d}t| j ddkrh| j dd }||krt|d }| j jd |dt|   	  d	t
| j jd
 | _ |r| j  d| | _ d S )Nu   [А-Яа-я]       .r      -   )name
is_changedrefindallvaluelensplitmathZfloorstripr   Zshort_str_enc)selfZ
rus_simbolZos_max_lengthZfile_name_lengthextZslice_length r   (./modules/files/models/cmf_attachment.py
_calc_name   s     8zCmfAttachment._calc_namec                    s   t   ddddg S )Nurlurl_previewurl_preview_imgparent)supersave_preload_fieldsr   	__class__r   r    r'       s    z!CmfAttachment.save_preload_fieldsc                 C   sB   | j   | j sd S tj | j   }tj|s>t| |S N)	r%   loadconfig
UPLOAD_DIRget_files_dirospathexistsmakedirs)r   
upload_dirr   r   r    r4   #   s    

zCmfAttachment.upload_dirc                    s   |    |   t j||S r+   )	_calc_urlr!   r&   save)r   argskwargsr)   r   r    r6   ,   s    zCmfAttachment.savec                 C   s   |    | j S r+   )r4   r   r(   r   r   r    	file_path1   s    zCmfAttachment.file_pathN)fieldsc                O   sH   | j js| jjsd S dtj| j | _| j d| _| j d| _	d S )Nz/filesz.meta/preview.pdfz.meta/preview_img.png)
r   r   r"   Zis_nullurllibparseZquote
_file_namer#   r$   )r   r:   r7   r8   r   r   r    r5   6   s
    zCmfAttachment._calc_url)returnc                 C   s   t ttj| j S )u<    Полный фактический путь к файлу )strr   r-   r.   r=   r(   r   r   r    full_path_file=   s    zCmfAttachment.full_path_fileTFbackupsmart_backup)contentc                O   s>   t jjj }|| j}|jdddd |j|||d dS )u    Загрузка файла FT)is_direxist_okparentsrA   N)	modelsCmfRFiledpdata_driverget_rd	get_rfiler=   Zcreatewrite)r   rD   rB   rC   r7   r8   rdiskrfiler   r   r    upload_fileB   s    zCmfAttachment.upload_filec                 C   s    t jjj }|| j}|jS r+   )rH   rI   rJ   rK   rL   rM   r=   r2   )r   rO   rP   r   r   r    r   I   s    zCmfAttachment.file_existsc                 C   s6   d| j j }| j  | jr2| j  | j  }|S )uT    Имя файла вложения в зависимости от родителя /)r   r   r%   r,   r/   )r   	file_namer   r   r    r=   O   s
    
zCmfAttachment._file_name)forcec                   s   |  dddg | jr| jjdrt| j }rtj| jkr|z|j	d| j
d W q tk
rx   |j	d| j
d Y qX n|j	d| j
d | jr|  }|r|j| jjd t j|d	|i|S )
Nroot_parent_idr%   	cmf_ownerCmfProject:zPPP-ATT-DELETE-ALLobjzPPP-ATT-DELETE-OWN)prefixrT   )Zload_fieldsrU   r   
startswithcmfutilget_obj_by_idgZcurrent_userrV   check_project_role_accessr%   ZCmfPermissionErrorr=   rM   Zmove_to_trashcoder&   delete)r   rT   r7   r8   projectrP   r)   r   r    ra   X   s    zCmfAttachment.deletec                    s6   t  jf |}tjj| jj d| jj | jd |S )N_)r   Z
target_dir)	r&   restorerH   rI   Zrestore_from_trashr`   r   r   r=   )r   r8   resr)   r   r    rd   k   s    $zCmfAttachment.restorec                 K   s   t jj| j|dS )N)idr:   )rH   rI   getr=   )r   r:   _kwargsr   r   r    rM   p   s    zCmfAttachment.get_rfilec                 C   s8   | j r4| j jdr4t| j  }r4|jd| jd d S )NrW   zPPP-ATT-CREATErX   )rU   r   r[   r\   r]   r_   r%   )r   rb   r   r   r    _check_project_perms   s    z!CmfAttachment._check_project_perm)N)__name__
__module____qualname__ZcmfrH   Z	CmfEntityZui_meta_skipr!   r'   r4   r6   propertyr9   r5   r?   r@   bytesrQ   boolr   r=   ra   rd   rM   ri   __classcell__r   r   r)   r    r
      s&   	

r
   )r   r;   r   r   shutilpathlibr   Zcmf.includeZ
cmf.modelsr   Zcmf.utilr   Z&common.models.cmf_plugin_convert_mixinr   Zmodules.files.fieldsr	   r
   r   r   r   r    <module>   s   