
    %^g                         d dl Z d dl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mZ d dlmZ  e j"                  e      Zdd	d
ddZ G d d      Zy)    N)default)defaultssettings)	serializetokey)DummyImageFile	ImageFile)parse_geometryjpgpnggifwebp)JPEGPNGGIFWEBPc            
           e Zd ZdZej
                  ej                  ej                  ej                  dddej                  ej                  d	ZdZd Zd Zd Zdd	Zd
 Zd Zd Zy)ThumbnailBackendz
    The main class for sorl-thumbnail, you can subclass this if you for example
    want to change the way destination filename is generated.
    FN)	formatquality
colorspaceupscalecropcropboxroundedpaddingpadding_color))progressiveTHUMBNAIL_PROGRESSIVE)orientationTHUMBNAIL_ORIENTATION)blurTHUMBNAIL_BLURc                 v    t         j                  j                  |j                        d   j	                         S )N   )ospathsplitextnamelower)selfsources     W/var/www/html/webapps/promises/venv/lib/python3.12/site-packages/sorl/thumbnail/base.pyfile_extensionzThumbnailBackend.file_extension.   s)    ww,Q/5577    c                     | j                  |      }|dk(  s|dk(  ry|dk(  ry|dk(  ry|dk(  ry	d
dlm} t        |dt        j
                        S )Nz.jpgz.jpegr   z.pngr   z.gifr   z.webpr   r   r   THUMBNAIL_FORMAT)r/   django.confr   getattrdefault_settingsr2   )r,   r-   r/   r   s       r.   _get_formatzThumbnailBackend._get_format1   s_    ,,V4V#~'@v%v%w&,8%79I9Z9Z[[r0   c                    t         j                  d||       |rt        |      }nt        d      t        j
                  r!|j                  d| j                  |             | j                  j                         D ]  \  }}|j                  ||        | j                  D ];  \  }}t        t        |      }|t        t        |      k7  s*|j                  ||       = | j                  |||      }t        |t        j                        }	t        j                   j#                  |	      }
|
r|
S t        j$                  s|	j'                         s	 t        j(                  j+                  |      }t        j(                  j7                  |      }||d<   t        j(                  j9                  |      }|j;                  |       	 | j=                  ||||	       | j?                  ||||	j@                         t        j(                  jC                  |       t        j                   jE                  |       t        j                   jG                  |	|       |	S # t,        $ rX}t         j/                  |       t        j0                  rt3        |      cY d}~S t         j5                  d||       |	cY d}~S d}~ww xY w# t        j(                  jC                  |       w xY w)z
        Returns thumbnail as an ImageFile instance for file with geometry and
        options given. First it will try to get it from the key value store,
        secondly it will create it.
        z'Getting thumbnail for file [%s] at [%s]z(falsey file_ argument in get_thumbnail()r   Nz'Remote file [%s] at [%s] does not exist
image_info)$loggerdebugr
   
ValueErrorr   THUMBNAIL_PRESERVE_FORMAT
setdefaultr6   default_optionsitemsextra_optionsr4   r5   _get_thumbnail_filenamer   storagekvstoregetTHUMBNAIL_FORCE_OVERWRITEexistsengine	get_image	Exception	exceptionTHUMBNAIL_DUMMYr	   warningget_image_infoget_image_sizeset_size_create_thumbnail_create_alternative_resolutionsr*   cleanup
get_or_setset)r,   file_geometry_stringoptionsr-   keyvalueattrr*   	thumbnailcachedsource_imageer8   sizes                  r.   get_thumbnailzThumbnailBackend.get_thumbnailA   s`    	>Wu%FGHH --x)9)9&)AB..446 	+JCsE*	+ ++ 	/ICHd+E 0$77""3.	/
 ++FOWMdGOO4	$$Y/M --Y5E5E5G%&~~77?  !66|DJ$.GL!>>00>DOOD!5&&|_g'0244\?5<innN &&|4
 	""6*Iv.C  %  #++)/::
 NNA %$%4 &&|4s6   I 2J; 	J8 /J3J8J3-J83J8;!Kc                 |    t        |      }|r|j                          t        j                  j                  |       y)zg
        Deletes file_ references in Key Value store and optionally the file_
        it self.
        N)r
   deleter   rC   )r,   rU   delete_file
image_files       r.   rb   zThumbnailBackend.delete   s/    
 u%
z*r0   c                    t         j                  d|j                  ||       t        j                  j                  ||      }t        ||      }t        j                  j                  |||      }t        j                  j                  |||       t        j                  j                  |      }|j                  |       y)z?
        Creates the thumbnail by using default.engine
        z.Creating thumbnail file [%s] at [%s] with [%s]N)r9   r:   r*   r   rG   get_image_ratior   createwriterN   rO   )	r,   r]   rV   rW   r[   ratiogeometryimager_   s	            r.   rP   z"ThumbnailBackend._create_thumbnail   s    
 	E^^_g	?..|WE!/59%%lHgFUGY7~~,,U34 r0   c           
         t         j                  j                  ||      }t        ||      }t        j
                  j                  |      \  }}t        j                  D ]m  }	t        |d   |	z        t        |d   |	z        f}
|j                         }d|v rt        |d   t              r|d   j                  d      }t        t        |            D ]J  }t!        j"                  d||         }|sdt        t        |j%                  d            |	z        z  ||<   L dj'                  |      |d<   t         j                  j)                  ||
|      }d|d|	z  |d	z  }t+        |t         j,                        }t         j                  j/                  |||       t         j                  j1                  |      }|j3                  |       p y
)z
        Creates the thumbnail by using default.engine with multiple output
        sizes.  Appends @<ratio>x to the file name.
        r   r&   r    z(\d+)pxz%spxz#%(file_name)s%(suffix)s%(file_ext)sz@%sx)	file_namesuffixfile_extN)r   rG   rf   r   r'   r(   r)   r   !THUMBNAIL_ALTERNATIVE_RESOLUTIONSintcopy
isinstancestrsplitrangelenrematchgroupjoinrg   r
   rB   rh   rN   rO   )r,   r]   rV   rW   r*   ri   rj   rn   dot_file_ext
resolutionresolution_geometryresolution_optionsr   isrk   thumbnail_namer[   r_   s                      r.   rQ   z0ThumbnailBackend._create_alternative_resolutions   s    ..|WE!/59"$''"2"24"8	<"DD 	%J#&x{Z'?#@#hqkT^F^B_"`!( Z%Ev,,S1s4y) MAT!W5A"(3s1771:/K+L"LQM .1XXd^"6*NN)),8KWUEB& :-(F N
 ".'//BINN  (:IF>>007Dt$)	%r0   c                     t        |j                  |t        |            }|dd d|dd d|}t        j                  |dt
        |d      S )z4
        Computes the destination filename.
        N   /   .r   )r   rX   r   r   THUMBNAIL_PREFIX
EXTENSIONS)r,   r-   rV   rW   rX   r(   s         r.   rA   z(ThumbnailBackend._get_thumbnail_filename   sQ     FJJ71CD !Wc!Ah4$55tZPXHY=Z[[r0   )T)__name__
__module____qualname____doc__r   r2   THUMBNAIL_QUALITYTHUMBNAIL_COLORSPACETHUMBNAIL_UPSCALETHUMBNAIL_PADDINGTHUMBNAIL_PADDING_COLORr>   r@   r/   r6   r`   rb   rP   rQ   rA    r0   r.   r   r      s~     ++--33----!99
OM8\ IV+!%@\r0   r   )loggingr'   ry   sorl.thumbnailr   sorl.thumbnail.confr   r5   r   sorl.thumbnail.helpersr   r   sorl.thumbnail.imagesr	   r
   sorl.thumbnail.parsersr   	getLoggerr   r9   r   r   r   r0   r.   <module>r      sU     	 	 " < ( 3 ; 1			8	$ 	
v\ v\r0   