U
    Įwh                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_attachmentc                       s   e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
edd fdd
Zedd fdd
ZeddddZ  ZS )CmfAttachmentc                 K   s   | d}| d}|r|s dS tjj}tjj}tjjdd|gdddggdd	}|d
r||r|||kr|t	d| ddd n*|dr|r||krt	d| ddd dS )u}  Если установлен лимит на количество вложений, то мы подсчитываем их общее количество,
        и если оно превышает этот предел, то выводим алерт
        Исключаем изображения, которые добавляются copy-paste (self.embedded == True)nameparentN=embeddedz!=TF)filterZinclude_deletedCmfTaskuQ   Превышено количество добавляемых вложений (u_   ) в задачу.
                        Обратитесь к администраторуabortCmfDocumentuc   ) в документ.
                        Обратитесь к администратору)
getgglobal_settingstask_attachment_max_countdocument_attachment_max_countmodelsr   count
startswith	cmf_alert)clskwargsr   r   r   r   Z	att_count r   &./modules/api/models/cmf_attachment.pycheck_count_attachments   s6    



z%CmfAttachment.check_count_attachmentsc                 K   s   | d}tjjr|sdS tjjj}ddd |D }|ddd}dd	 |D }d
|krxtdd| dd |d
d 	 }||krdS td| dd| dd dS )u_   Проверяем расширение у добавляемого файла-вложенияr   N c                 s   s"   | ]}|  s|d kr|V  qdS ));,N)isalnum).0charr   r   r   	<genexpr>-   s       z5CmfAttachment.check_file_extension.<locals>.<genexpr>r   r   c                 S   s   g | ]}|   qS r   )striplower)r    xr   r   r   
<listcomp>0   s     z6CmfAttachment.check_file_extension.<locals>.<listcomp>.u   Ошибка: выбранный Вами файл не содержит расширения. Пожалуйста, загрузите файл с одним из следующих форматов: Tr   uu   Ошибка: выбранный Вами файл имеет неподдерживаемое расширение: ul   . Пожалуйста, загрузите файл с одним из следующих форматов: )
r   r   r   Zallowed_attachment_extensionsvaluejoinreplacesplitr   r$   )r   r   r   Zallowed_extensions_strZcleaned_extensions_strZraw_extensionsZallowed_file_extensions	extensionr   r   r   check_file_extension&   s    

z"CmfAttachment.check_file_extensionc                 K   s   | d}| d}|s$tddd |s,dS d}|drDtjj}n|drVtjj}|s^dS t|d	 d
}|r||jkrtd| ddd dS )uJ   Проверка ограничения вложения по объёмуsizer   u   Не удалось проверить допустимый размер файла, так как соответствующий параметр не был переданTr   Nr
   r   i@B    uE   Превышен допустимый размер вложения (u<    Мб). Обратитесь к администратору)	r   r   r   r   r   Ztask_attachment_max_sizeZdocument_attachment_max_sizeroundr)   )r   r   Zsize_current_attachmentr   Zattachment_max_sizer   r   r   check_size_attachment8   s     




z#CmfAttachment.check_size_attachmentc                 O   sf   | ddstjjddr.| j||}|d S | jf | | jf | | jf | | j||}|d S )Nr   F)Zraise_errorid)r   r   ZCmfAccessListZcheck_admin_modecreater.   r   r2   r   argsr   resr   r   r   
api_createS   s    zCmfAttachment.api_createc                 O   s   | j ||}|d S )Nr3   )updater5   r   r   r   
api_update`   s    zCmfAttachment.api_updatec                 O   s&   | j | dd}|j||}|d S )Nr	   )r	   r3   )r   delete)r   r6   r   objr7   r   r   r   
api_deletee   s    zCmfAttachment.api_deletec                 O   sN   | j ||}|j  z|j  W n  tk
rD   tddd Y nX |d S )Nu   Нет доступа!Tr   r3   )r4   r   loadZ_acl_check_writeCmfPermissionErrorr   r5   r   r   r   public_createk   s    
zCmfAttachment.public_createN)fieldsc                   sl   |sg }d|kr| d t j|d|i|}|r:|js>d S z|j  W n tk
rb   Y d S X | S Nr   rA   )appendsuperr   r   _acl_check_readr?   Zget_versions)r   rA   r6   r   Zatt	__class__r   r   public_get_versionsw   s    

z!CmfAttachment.public_get_versionsc                   sh   |sg }d|kr| d t j|d|i|}|r:|js>d S z|j  W n tk
rb   Y d S X |S rB   )rC   rD   r   r   rE   r?   )r   rA   r6   r   r7   rF   r   r   
public_get   s    

zCmfAttachment.public_getc                O   s^   t  tjj|d dgd}|s$g }z|j  W n tk
rH   Y d S X |jf d|i|S )Nr   r   )r3   rA   rA   )ZCmfDeprecatedErrorr   r   r   r   rE   r?   Z	get_rfile)r   rA   r6   r   Z
attachmentr   r   r   public_get_rfile   s    zCmfAttachment.public_get_rfile)__name__
__module____qualname__classmethodr   r.   r2   r8   r:   r=   r@   rH   rI   rJ   __classcell__r   r   rF   r   r      s(   






r   N)Zcmf.includeZmodules.files.modelsr   r   r   r   r   r   <module>   s   