U
    {hI                     @   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
 Zdd ZG dd deZdd ZdS )    N)BytesIO)settings)ValidationError)FileExtensionValidator)	FileField
ImageField)filesizeformat)gettext_lazyc                	   C   s   t tdddddddgS )NZWAGTAILIMAGES_EXTENSIONSavifgifjpgjpegpngwebp)getattrr    r   r   ]/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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                       sB   e Zd ZegZ fddZdd Zdd Zdd Zd	d
 Z	  Z
S )WagtailImageFieldc                    s   t  j|| ttdd| _ttdd| _t| j| _t | _	d
| j	 | _| jd k	rtt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)super__init__r   r   r   max_image_pixelsr   max_upload_size_textr   allowed_image_extensionsjoinupperZsupported_formats_text_	help_texterror_messages)selfargskwargs	__class__r   r   r   "   sZ        
 



zWagtailImageField.__init__c                 C   sv   t j|jd  dd  }|| jk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(   fr0   r   r   r   check_image_file_formatV   s    
z)WagtailImageField.check_image_file_formatc                 C   sB   | j d k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(   r8   r   r   r   check_image_file_sizel   s    
z'WagtailImageField.check_image_file_sizec                 C   s^   | j d krd S |j \}}|j }|| | }|| j krZt| jd || j d ddd S )Nr   )
num_pixelsZmax_pixels_countr.   )r    r6   get_sizeZget_frame_countr   r'   )r(   r8   widthheightframesr=   r   r   r   check_image_pixel_size|   s    



z(WagtailImageField.check_image_pixel_sizec              
   C   s   t | |}|dkrdS t|dr(|}n$t|dr@t| }nt|d }z tj||_t	|jj
|_W n6 tk
r } zt| jd dd|W 5 d}~X Y nX t|drt|jr|d |dk	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   rC   willowZImageopenr6   !image_format_name_to_content_typer7   content_type	Exceptionr   r'   callablerE   r<   r9   rB   )r(   datar8   fileexcr   r   r   rF      s2    





zWagtailImageField.to_python)__name__
__module____qualname__r   Zdefault_validatorsr   r9   r<   rB   rF   __classcell__r   r   r+   r   r      s   4r   c                 C   sx   | dkrdS | dkrdS | dkr$dS | dkr0dS | d	kr<d
S | dkrHdS | dkrTdS | dkr`dS | dkrldS t ddS )z
    Convert a Willow image format name to a content type.
    TODO: Replace once https://github.com/wagtail/Willow/pull/102 and
          a new Willow release is out
    svgzimage/svg+xmlr   z
image/jpegr   z	image/pngr   z	image/gifZbmpz	image/bmpZtiffz
image/tiffr   z
image/webpr
   z
image/avifZicozimage/x-iconzUnknown image format nameN)
ValueError)Zimage_format_namer   r   r   rJ      s&    rJ   )r1   ior   rH   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.core.validatorsr   Zdjango.forms.fieldsr   r   Zdjango.template.defaultfiltersr   Zdjango.utils.translationr	   r%   r   r   r   rJ   r   r   r   r   <module>   s   
 