U
    Rd                     @   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	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 f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   [А-Яа-я]       .      -   )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   sD   | j   | j sd S tjtj| j  }tj|s@t	| |S N)
r&   loadospathjoinconfig
UPLOAD_DIRget_files_direxistsmakedirs)r   
upload_dirr    r    r!   r6   #   s    

zCmfAttachment.upload_dirc                 C   s4   t jjj }|| j}|jr*|j| _nd| _d S )Nr   )	modelsCmfRFiledpdata_driverget_rd	get_rfile
_file_namer4   st_sizer   rdiskrfiler    r    r!   _calc_st_size,   s
    
zCmfAttachment._calc_st_sizec                    s&   |    |   |   t j||S r,   )r"   	_calc_urlrB   r'   saver   argskwargsr*   r    r!   rD   4   s    zCmfAttachment.savec                 C   s   |    | j S r,   )r6   r   r)   r    r    r!   	file_path:   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quoter=   r$   r%   )r   rI   rF   rG   r    r    r!   rC   ?   s
    zCmfAttachment._calc_url)returnc                 C   s   t ttj| j S )u<    Полный фактический путь к файлу )strr   r1   r2   r=   r)   r    r    r!   full_path_fileF   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parentsrO   N)	r7   r8   r9   r:   r;   r<   r=   Zcreatewrite)r   rR   rP   rQ   rF   rG   r@   rA   r    r    r!   upload_fileK   s    zCmfAttachment.upload_filec                 C   s    t jjj }|| j}|jS r,   )r7   r8   r9   r:   r;   r<   r=   r4   r?   r    r    r!   r   R   s    zCmfAttachment.file_existsc                 C   s>   | j j}| j  | jr0tj| j | j j}tjd|S )uT    Имя файла вложения в зависимости от родителя /)r   r   r&   r-   r.   r/   r0   r3   )r   	file_namer    r    r!   r=   X   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)prefixrZ   )Zload_fieldsr[   r   
startswithcmfutilget_obj_by_idgZcurrent_userr\   check_project_role_accessr&   ZCmfPermissionErrorr=   r<   Zmove_to_trashcoder'   delete)r   rZ   rF   rG   projectrA   r*   r    r!   rg   b   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'   restorer7   r8   Zrestore_from_trashrf   r   r   r=   )r   rG   resr*   r    r!   rj   u   s    $zCmfAttachment.restorec                 K   s   t jj| j|dS )N)idrI   )r7   r8   getr=   )r   rI   _kwargsr    r    r!   r<   z   s    zCmfAttachment.get_rfilec                 C   s8   | j r4| j jdr4t| j  }r4|jd| jd d S )Nr]   zPPP-ATT-CREATEr^   )r[   r   ra   rb   rc   re   r&   )r   rh   r    r    r!   _check_project_perm}   s    z!CmfAttachment._check_project_permc                    s*   |    |   |   t j|| d S r,   )r"   rC   rB   r'   _save_importrE   r*   r    r!   rp      s    zCmfAttachment._save_import)N)__name__
__module____qualname__Zcmfr7   Z	CmfEntityZui_meta_skipr"   r(   r6   rB   rD   propertyrH   rC   rM   rN   bytesrW   boolr   r=   rg   rj   r<   ro   rp   __classcell__r    r    r*   r!   r
      s*   	
	
r
   )r   rJ   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   