
    3~h.                         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	 d dl
mZ d dl  ej                  d      Zd	ad
 Zd Zi ad Zd ZddZd Zd Zd Zd Zd Zd Zy)    N)md5)import_module)settings)ImproperlyConfigured)File)*z[ -\s]+Fc              #      K   | j                   j                  s|  | j                         D ]  }t        |      E d{     y7 w)z4 Returns all non-abstract descendants of the model. N)_metaabstract__subclasses__get_nonabstract_descendants)modelss     W/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/imagekit/utils.pyr   r      sA     ;;!!# 2.q11121s   <AAAc           
      n   	 | j                  d      }| d | | |dz   d  }}	 t        |      }	 t        ||      }|S # t        $ r t        | d|d      w xY w# t        $ r}t        d|d|d|d      d }~ww xY w# t        $ r, t        |d	   j                         |dd  z   d
|d|d      w xY w)N.z	 isn't a z module.   zError importing z module z: ""r   z	 module "z" does not define ")rindex
ValueErrorr   r   ImportErrorgetattrAttributeErrorupper)pathdescdotmoduleobjnamemodeobjs           r   get_by_qnamer#      s    Kkk# 4Cj$sQwx.GF#F#Ac7#
  K"dD#IJJK
  #"vq$" # 	##  A"7==?T!"X-vw$@ A 	AAs+   ; A A? A	A<"A77A<?5B4c                 l    t        | |      }t        j                  |      }|s |       x}t        |<   |S N)r#   _singletonsget)
class_pathr   clsinstances       r   get_singletonr+   .   s5    
z4
(Cs#H&)e+;s#O    c                  2    t         ryddlm}   | d       da y)z
    Auto-discover INSTALLED_APPS imagegenerators.py modules and fail silently
    when not present. This forces an import on them to register any admin bits
    they may want.

    Copied from django.contrib.admin
    Nr   autodiscover_modulesimagegeneratorsT)_autodiscovereddjango.utils.module_loadingr/   r.   s    r   autodiscoverr3   7   s     @*+Or,   c                 z    t        j                  |       }|r#|j                  t        j                                |S r%   )logging	getLogger
addHandlerNullHandler)logger_nameadd_null_handlerloggers      r   
get_loggerr<   I   s1    {+F'--/0Mr,   c                 L    t        | dd      t        t        | dd      dd      fS )a
  
    A utility for easily extracting information about the host model from a
    Django FileField (or subclass). This is especially useful for when you want
    to alter processors based on a property of the source model. For example::

        class MySpec(ImageSpec):
            def __init__(self, source):
                instance, attname = get_field_info(source)
                self.processors = [SmartResize(instance.thumbnail_width,
                                               instance.thumbnail_height)]

    r*   Nfieldattnamer   )
field_files    r   get_field_inforB   P   s/     	
J-
GT2ItD r,   c                     | j                         }t        |      }t        |j                               |_        |j                  d       |S )z
    Calls the ``generate()`` method of a generator instance, and then wraps the
    result in a Django File object so Django knows how to save it.

    r   )generater   lenreadsizeseek)	generatorcontentfs      r   rD   rD   c   s?       "GWA  AFLLOHr,   c                 N    t        | dd       }t        ||d       }|	 ||        y y )Ncachefile_strategyr@   )filemethod_namestrategyfns       r   call_strategy_methodrR   s   s0    t148H	;	-B	~
4 r,   c                  4    ddl m}  | t        j                     S )Nr   caches)django.core.cacherU   r   IMAGEKIT_CACHE_BACKENDrT   s    r   	get_cacherX   z   s    ((1122r,   c                      	 ddl m} m} 	 | t        j                     S # |$ r t        t        j                  d      cY S w xY w# t        $ r t        t        j                  d      cY S w xY w)Nr   storagesInvalidStorageErrorzfile storage backend)django.core.files.storager[   r\   r   IMAGEKIT_DEFAULT_FILE_STORAGEr+   r   rZ   s     r   get_storager_      sq    K	HBBCC" 	 668N 	  
224J
 	

s   A  A A #A)(A)c                     t         j                  rVt        j                  d|       }t	        |      dk\  r0|d d dt        | j                  d            j                         }|} | S )N       :zutf-8)r   %IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEYbad_memcached_key_charssubrE   r   encode	hexdigest)keynew_keys     r   sanitize_cache_keyrl      s]    55)--b#6 w<3!((!3SG9L5M5W5W5YZGJr,   )imagekitT)r5   rehashlibr   	importlibr   django.confr   django.core.exceptionsr   django.core.filesr   pilkit.utilscompilerf   r1   r   r#   r&   r+   r3   r<   rB   rD   rR   rX   r_   rl    r,   r   <module>rw      ss     	  #   7 " $"**%:; 2A& $& 3 r,   