a
    Dg                     @   s   d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d d	lmZ d
d Zdd ZG dd deZdS )    N)BytesIO)settings)ValidationError)FileExtensionValidator)	FileField
ImageField)	FileInput)filesizeformat)gettext_lazyc                   C   s   t tdg dS )NZWAGTAILIMAGES_EXTENSIONS)ZavifZgifjpgjpegZpngZwebp)getattrr    r   r   T/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/images/fields.pyget_allowed_image_extensions   s
    r   c                 C   s   t t | S )N)r   r   )valuer   r   r   ImageFileExtensionValidator   s    r   c                       sN   e Zd ZegZ fddZdd Zdd Zdd Zd	d
 Z	 fddZ
  ZS )WagtailImageFieldc                    s   t  | _t j|i | ttdd| _ttdd| _t| j| _	d
| j | _| jd urxtd| j| j	d | _ntdd	| ji | _td
d	| ji | jd< td| jd< td| jd< td| jd< tdd| j	i | jd< d S )NZWAGTAILIMAGES_MAX_UPLOAD_SIZEi   ZWAGTAILIMAGES_MAX_IMAGE_PIXELSi  z, zPSupported formats: %(supported_formats)s. Maximum filesize: %(max_upload_size)s.)supported_formatsmax_upload_sizez)Supported formats: %(supported_formats)s.r   zGNot a supported image format. Supported formats: %(supported_formats)s.invalid_image_extensionzaNot a valid .%(extension)s image. The extension does not match the file format (%(image_format)s)invalid_image_known_formatzHThis file is too big (%(file_size)s). Maximum filesize %(max_filesize)s.file_too_largezTThis file has too many pixels (%(num_pixels)s). Maximum pixels %(max_pixels_count)s.file_too_many_pixelsz8This file is too big. Maximum filesize %(max_filesize)s.max_filesizeZfile_too_large_unknown_size)r   allowed_image_extensionssuper__init__r   r   r   max_image_pixelsr	   max_upload_size_textjoinupperZsupported_formats_text_	help_texterror_messages)selfargskwargs	__class__r   r   r   #   sP    




zWagtailImageField.__init__c                 C   sv   t j|jd  dd  }|| jvr:t| jd dd|dkrFd}||jj	krrt| jd ||jj	d ddd S )N   r   coder   r   r   )	extensionZimage_format)
ospathsplitextnamelowerr   r   r$   imageformat_name)r%   fr-   r   r   r   check_image_file_formatW   s    
z)WagtailImageField.check_image_file_formatc                 C   sB   | j d u rd S |j| j kr>t| jd t|j| jd ddd S )Nr   )	file_sizer   r+   )r   sizer   r$   r	   r   )r%   r5   r   r   r   check_image_file_sizem   s    
z'WagtailImageField.check_image_file_sizec                 C   s^   | j d u rd S |j \}}|j }|| | }|| j krZt| jd || j d ddd S )Nr   )
num_pixelsZmax_pixels_countr+   )r   r3   get_sizeZget_frame_countr   r$   )r%   r5   widthheightframesr:   r   r   r   check_image_pixel_size}   s    



z(WagtailImageField.check_image_pixel_sizec              
   C   s   t | |}|du rdS t|dr(|}n$t|dr@t| }nt|d }ztj||_|jj	|_
W n8 ty } z t| jd dd|W Y d}~n
d}~0 0 t|drt|jr|d |dur| | | | | | |S )	a  
        Check that the file-upload field data contains a valid image (GIF, JPG,
        PNG, etc. -- whatever Willow supports). Overridden from ImageField to use
        Willow instead of Pillow as the image library in order to enable SVG support.
        NZtemporary_file_pathreadcontentZinvalid_imager+   seekr   )r   	to_pythonhasattrr   r@   willowZImageopenr3   Z	mime_typecontent_type	Exceptionr   r$   callablerB   r9   r6   r?   )r%   datar5   fileexcr   r   r   rC      s2    





zWagtailImageField.to_pythonc                    sD   t  |}t|tr@d|jvr@|ddkr@d| jv r@d|d< |S )Nacceptzimage/*Zheiczimage/*, image/heic)r   widget_attrs
isinstancer   attrsgetr   )r%   ZwidgetrP   r(   r   r   rN      s    zWagtailImageField.widget_attrs)__name__
__module____qualname__r   Zdefault_validatorsr   r6   r9   r?   rC   rN   __classcell__r   r   r(   r   r       s   4,r   )r.   ior   rE   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.core.validatorsr   Zdjango.forms.fieldsr   r   Zdjango.forms.widgetsr   Zdjango.template.defaultfiltersr	   Zdjango.utils.translationr
   r"   r   r   r   r   r   r   r   <module>   s   
