
    h'                     :   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlm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 ddlmZ ddlmZ ddlm Z   e jB                  e"      Z# e$ede      Z%e	 e&e%e      Z% e       d        Z' G d de       Z(y)    N)settings)Warning)register)ValidationError)models)cached_property)gettext_lazy)Image)MAX_IMAGE_PIXELS   )PILImage)FilerThumbnailer)get_exif_for_file   )FileFILER_MAX_IMAGE_PIXELSc                 8    t         st        ddt              gS g S )NzPBoth settings.FILER_MAX_IMAGE_PIXELS and PIL.Image.MAX_IMAGE_PIXELS are not set.zSet FILER_MAX_IMAGE_PIXELS to a positive integer value in your settings.py. This setting is used to limit the maximum number of pixels an image can have to protect your site from memory bombs.)hintobj)r   r   r   )app_configskwargss     E/home/dcms/DCMS/lib/python3.12/site-packages/filer/models/abstract.pymax_pixel_setting_checkr   "   s+    !b? 
 	
 I    c                       e Zd ZdZddddedfdddddddddddZd	Zd
Z ej                  dd      Z	 ej                  dd      Z
 ej                  dd      Z ej                   ed      ddd      Z ej                   ed      ddd      Z ej                   ed      ddd      Z ej$                  dddej&                        Z G d d      Zed        Zd- fd	Zd Z fdZd Zd  Zed!        Zd" Zd# Z d$ Z!d% Z"e#d&        Z$e#d'        Z%e#d(        Z&d) Z'e#d*        Z(e#d+        Z)e#d,        Z* xZ+S ).	BaseImage   )    r   T)sizecropupscaler   )r   r!   )0   r"   )admin_clipboard_iconadmin_sidebar_previewadmin_directory_listing_iconadmin_tiny_iconr
   image)nullblankF)r(   defaultzdefault alt text   )
max_lengthr)   r(   zdefault captionzsubject location@    )r,   r)   r*   z
filer.Filez%(app_label)s_%(class)s_file)toparent_linkrelated_name	on_deletec                   8    e Zd ZdZ ed      Z ed      ZdZdZy)BaseImage.Metafilerr'   imagesTobjectsN)	__name__
__module____qualname__	app_label_verbose_nameverbose_name_pluralabstractdefault_manager_name r   r   Metar4   i   s%    	zk(r   rB   c                 L    ddl m} |j                  d      \  }}|dk(  xr ||v S )Nr   )IMAGE_MIME_TYPES/r'   )r   rD   split)clsinameifile	mime_typerD   maintypesubtypes          r   matches_file_typezBaseImage.matches_file_typep   s0     	0%OOC0'7"Bw2B'BBr   c                 l   t         |   |      }|r	 	 | j                  j                  }|j                  d       | j                  dk(  r4t        j                  |      j                  \  | _
        | _        d| _        nRt        j                  |      }|j                  \  | _
        | _        t        j                   j#                  |      | _        |j                  d       |S |S # t        $ r | j                  j                  }Y w xY w# t$        $ r |du rd\  | _
        | _        d| _        Y |S w xY w)N)	post_initr   zimage/svg+xmlTF)NN)superfile_data_changedfile
ValueErrorfile_ptrseekrJ   VILImageloadr   _width_height_transparentr   openeasy_thumbnailsutilsis_transparent	Exception)selfrO   attrs_updatedimgfile	pil_image	__class__s        r   rQ   zBaseImage.file_data_changedw   s   1I1F.1"iinnG Q>>_408g0F0K0K-DK(,D% (g 6I09-DK(7(=(=(L(LY(WD%Q }# " 1"mm00G1  .% 1;-DK(-D%.s/   C' B7D 'D	D D		D #D32D3c                 8   | j                   rt        sy | j                  | j                  dt        z  dz   }d}n6t	        d| j
                        t	        d| j                        }}||z  }||z  }t        t        |z  dz        }t        ||z        }|dt        z  kD  r7t        d      t        t        dz  ||      z  }t        t        |      d	      |t        kD  r;t        d
      t        |dz  t        dz  ||      z  }t        t        |      d	      y )Nr   r   gqq?g      ?zImage format not recognized or image size exceeds limit of %(max_pixels)d million pixels by a factor of two or more. Before uploading again, check file format or resize image to %(width)d x %(height)d resolution or lower.i@B )
max_pixelswidthheight
image_size)codezImage size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d million pixels. Before uploading again, resize image to %(width)d x %(height)d resolution or lower.)pixelsrf   rg   rh   )rR   r   rX   rY   maxrg   rh   intr<   dictr   str)r`   rk   aspectrg   rh   res_xres_ymsgs           r   cleanzBaseImage.clean   s-   
 yy 6;;$,,"6//!3FF4::.At{{0C6E&.F!FNF069cAB(A...G  6' AW\]	^C
 "#c(>>**' Fg-:PT[:[ 0	0C "#c(>> +r   c                 N    | j                         | _        t        |   |i | y N)_check_validityhas_all_mandatory_datarP   save)r`   argsr   rd   s      r   ry   zBaseImage.save   s%    &*&:&:&<#d%f%r   c                     | j                   syy)NFT)namer`   s    r   rw   zBaseImage._check_validity   s    yyr   c                 r    | j                   r+t        | j                         t        | j                        z  S y)Ng      ?)rg   floatSIDEBAR_IMAGE_WIDTHr}   s    r   sidebar_image_ratiozBaseImage.sidebar_image_ratio   s+    ::$uT-E-E'FFFr   c                 P    	 t        | j                        S # t        $ r i cY S w xY wrv   )r   rR   r_   r}   s    r   exifzBaseImage.exif   s*    	$TYY// 	I	s    %%c                 &    | j                  |d      S )Nedithas_generic_permissionr`   requests     r   has_edit_permissionzBaseImage.has_edit_permission       **7F;;r   c                 &    | j                  |d      S )Nreadr   r   s     r   has_read_permissionzBaseImage.has_read_permission   r   r   c                 &    | j                  |d      S )Nadd_childrenr   r   s     r   has_add_children_permissionz%BaseImage.has_add_children_permission   s    **7NCCr   c                     |j                   }|j                  sy|j                  ry|| j                  k(  ry| j                  r| j                  j                  ||      S y)z
        Return true if the current user has permission on this
        image. Return the string 'ALL' if the user has all rights.
        FT)useris_authenticatedis_superuserownerfolderr   )r`   r   permission_typer   s       r   r   z BaseImage.has_generic_permission   sU    
 ||$$TZZ[[;;55gOOr   c                 V    | j                   dv r| j                  xs dS | j                   S )N)r.   Nzunnamed file)r|   original_filenamer}   s    r   labelzBaseImage.label   s)    99
"));^;99r   c                 "    | j                   xs dS Ng        )rX   r}   s    r   rg   zBaseImage.width   s    {{!c!r   c                 "    | j                   xs dS r   )rY   r}   s    r   rh   zBaseImage.height   s    ||"s"r   c                 d   i }|j                         D ]M  \  }}	 |j                  d| j                  i       | j                  j	                  |      }|j
                  ||<   O |S # t        $ rA}t        j                  rt        j                  d|       t        j                  r Y d }~d }~ww xY w)Nsubject_locationz$Error while generating thumbnail: %s)itemsupdater   rR   get_thumbnailurlr_   filer_settingsFILER_ENABLE_LOGGINGloggererrorFILER_DEBUG)r`   required_thumbnails_thumbnailsr|   optsthumbes          r   _generate_thumbnailszBaseImage._generate_thumbnails   s    -335 	JD$/1F1FGH		//5$)IID!		    "66LL!GK!-- .s   AA%%	B/.7B**B/c           	          t         j                  D ci c](  }|t        |      t        |      fdd| j                  d* }}| j	                  |      S c c}w )NT)r   r    r!   r   )r   FILER_ADMIN_ICON_SIZESrm   r   r   )r`   r   r   s      r   iconszBaseImage.icons  sl     '==?  TCI.$($9$9	 ? ? (()<==?s   -Ac                 @    | j                  t        j                        S rv   )r   r   DEFAULT_THUMBNAILSr}   s    r   
thumbnailszBaseImage.thumbnails  s    (()E)EFFr   c                     t        | j                  | j                  j                  | j                  j                  | j                  j                  | j                  j
                        }|S )N)rR   r|   source_storagethumbnail_storagethumbnail_basedir)r   rR   r|   r   r   r   )r`   tns     r   easy_thumbnails_thumbnailerz%BaseImage.easy_thumbnails_thumbnailer  sK    9933"ii99"ii99	;
 	r   )F),r8   r9   r:   r   r   	file_type_iconr   
FloatFieldrY   rX   BooleanFieldrZ   	CharFieldr<   default_alt_textdefault_captionr   OneToOneFieldCASCADErT   rB   classmethodrM   rQ   rt   ry   rw   r   r   r   r   r   r   r   propertyr   rg   rh   r   r   r   r   __classcell__)rd   s   @r   r   r   1   s   )14,0!2+>*Bt!T1915$)H$,dtL IEfG
 VF
 '6&&L
 (v''	
	 'f&&	
	O (v''	
	 $v##3..	H) ) C C2!?F&
  <<D"   " " # #" 	> 	> G G  r   r   ))loggingdjango.confr   django.core.checksr   r   register_checkdjango.core.exceptionsr   	django.dbr   django.utils.functionalr   django.utils.translationr	   r<   easy_thumbnails.utilsr\   easy_thumbnails.VILr
   rV   	PIL.Imager   r.   r   utils.compatibilityr   utils.filer_easy_thumbnailsr   utils.pil_exifr   
filemodelsr   	getLoggerr8   r   getattrr   minr   r   rA   r   r   <module>r      s       & 9 2  3 6  1 & ) * : .  
		8	$ !+CEUV  !79IJ  i ir   