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e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      -   )nameZ
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t j| j | _t j||S )Nz/files)urllibparseZquote
_file_nameurlsupersave)r   argskwargs	__class__r   r   r1   )   s    zCmfAttachment.savec                 C   s   |    | j S r!   )r+   r   r   r   r   r   	file_path.   s    zCmfAttachment.file_pathN)fields)returnc             
   O   st  |sdddg}|  | tjjj }|| j}t|j	}|j	d }t|j
ddd | j}|d }	|d }
z|jd	kr| |j	|
 n|jd
kr| j|j	|
d nd|d|j  }t|j	| t|d*}| }| ||	|j | |	|
 W 5 Q R X | j d}|| _| j d| _|   | W S  tk
rn } z$td|j	 d|  |  W Y S d }~X Y nX d S )Nr/   url_previewurl_preview_imgz.metaT)parentsexist_okz/preview.pdfz/preview_img.png)z.pngz.jpgz.bmpz.gifz.tiffz.tifz.jpegz.pdf)Zpath_pdfZpath_imgz/previewrbz.meta/preview.pdfz.meta/preview_img.pngu,   Не удалось создать preview: z, )Zload_fieldsmodelsCmfRFiledpdata_driverget_rd	get_rfiler.   r   abspathmkdirr/   suffixZsave_imgZ
pdf_to_imgshutilcopyopenreadZ
obj_to_pdfr:   r;   r1   	ExceptionZloggingZ	exception)r   r8   r2   r3   rdiskrfileZfile_obj	meta_pathZurl_preview_urlZurl_preview_pathr;   r7   Zfile_previewcontenter   r   r   make_preview3   s<    





zCmfAttachment.make_previewc                 C   s   t ttj| j S )u<    Полный фактический путь к файлу )strr   r$   r%   r.   r6   r   r   r   full_path_fileT   s    zCmfAttachment.full_path_fileTFbackupsmart_backup)rP   c                O   s>   t jjj }|| j}|jdddd |j|||d dS )u    Загрузка файла FT)is_dirr=   r<   rU   N)	r?   r@   rA   rB   rC   rD   r.   Zcreatewrite)r   rP   rV   rW   r2   r3   rM   rN   r   r   r   upload_fileY   s    zCmfAttachment.upload_filec                 C   s    t jjj }|| j}|jS r!   )r?   r@   rA   rB   rC   rD   r.   r)   )r   rM   rN   r   r   r   r   `   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.   f   s
    
zCmfAttachment._file_name)forcec                   sD   | j r.tjjj }|| j }|jr.|  t	 j|d|i|S )Nr]   )
r.   r?   r@   rA   rB   rC   rD   r)   deleter0   )r   r]   r2   r3   rM   rN   r4   r   r   r^   o   s    zCmfAttachment.deletec                 K   s   t jj| j|dS )N)idr8   )r?   r@   getr.   )r   r8   _kwargsr   r   r   rD   w   s    zCmfAttachment.get_rfile)N)__name__
__module____qualname__Zcmfr?   Z	CmfEntityZui_meta_skipr    r+   r1   propertyr7   r   rR   rS   rT   bytesrZ   boolr   r.   r^   rD   __classcell__r   r   r4   r   r
      s    	
!r
   )r   r,   r   r   rH   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   