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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d 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                 C   sB   | j   | j sd S tj | j   }tj|s>t| |S N)	parentloadconfig
UPLOAD_DIRget_files_dirospathexistsmakedirs)r   
upload_dirr   r   r    r,       s    

zCmfAttachment.upload_dirc                    s&   |  dddg |   t j||S )Nurlurl_previewurl_preview_img)Zload_fields	_calc_urlsupersave)r   argskwargs	__class__r   r    r2   )   s    zCmfAttachment.savec                 C   s   |    | j S r"   )r,   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quote
_file_namer.   r/   )r   r9   r3   r4   r   r   r    r0   3   s
    zCmfAttachment._calc_url)returnc                 C   s   t ttj| j S )u<    Полный фактический путь к файлу )strr   r%   r&   r<   r7   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parentsr@   N)	modelsCmfRFiledpdata_driverget_rd	get_rfiler<   Zcreatewrite)r   rC   rA   rB   r3   r4   rdiskrfiler   r   r    upload_file?   s    zCmfAttachment.upload_filec                 C   s    t jjj }|| j}|jS r"   )rG   rH   rI   rJ   rK   rL   r<   r*   )r   rN   rO   r   r   r    r   F   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<   L   s
    
zCmfAttachment._file_name)forcec                   sD   | j r.tjjj }|| j }|jr.|  t	 j|d|i|S )NrS   )
r<   rG   rH   rI   rJ   rK   rL   r*   deleter1   )r   rS   r3   r4   rN   rO   r5   r   r    rT   U   s    zCmfAttachment.deletec                 K   s   t jj| j|dS )N)idr9   )rG   rH   getr<   )r   r9   _kwargsr   r   r    rL   ]   s    zCmfAttachment.get_rfile)N)__name__
__module____qualname__ZcmfrG   Z	CmfEntityZui_meta_skipr!   r,   r2   propertyr8   r0   r>   r?   bytesrP   boolr   r<   rT   rL   __classcell__r   r   r5   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   