o
    &zh.                     @   s   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T edZd	ad
d Zdd Zi add Zdd Zd"ddZdd Zdd Zdd Zdd Zdd Zd d! ZdS )#    N)md5)import_module)settings)ImproperlyConfigured)File)*z[ -\s]+Fc                 c   s0    | j js| V  |  D ]	}t|E dH  qdS )z4 Returns all non-abstract descendants of the model. N)_metaabstract__subclasses__get_nonabstract_descendants)models r   I/var/www/html/kangema/venv/lib/python3.10/site-packages/imagekit/utils.pyr      s   r   c              
   C   s   z|  d}W n ty   td| |f w | d | | |d d  }}zt|}W n tyA } z	td|||f d }~ww zt||}|W S  tyd   td|d  |dd   ||f w )N.z%s isn't a %s module.   z"Error importing %s module %s: "%s"z#%s module "%s" does not define "%s"r   )rindex
ValueErrorr   r   ImportErrorgetattrAttributeErrorupper)pathdescdotmoduleobjnamemodeobjr   r   r   get_by_qname   s,   
r    c                 C   s*   t | |}t|}|s|  }t|< |S N)r    _singletonsget)
class_pathr   clsinstancer   r   r   get_singleton.   s
   

r'   c                  C   s$   t rdS ddlm}  | d da dS )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(   r   r   r   autodiscover7   s
   
r-   imagekitTc                 C   s    t | }|r|t   |S r!   )logging	getLogger
addHandlerNullHandler)logger_nameadd_null_handlerloggerr   r   r   
get_loggerI   s   
r6   c                 C   s    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_filer   r   r   get_field_infoP   s   
r;   c                 C   s,   |   }t|}t| |_|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fr   r   r   r<   c   s
   
r<   c                 C   s0   t | dd }t ||d }|d ur||  d S d S )Ncachefile_strategyr9   )filemethod_namestrategyfnr   r   r   call_strategy_methods   s
   rI   c                  C   s   ddl m}  | tj S )Nr   caches)django.core.cacherK   r   IMAGEKIT_CACHE_BACKENDrJ   r   r   r   	get_cachez   s   
rN   c                  C   s`   z
ddl m} m} W n ty   ttjd Y S w z| tj W S  |y/   ttjd Y S w )Nr   storagesInvalidStorageErrorzfile storage backend)django.core.files.storagerP   rQ   r   r'   r   IMAGEKIT_DEFAULT_FILE_STORAGErO   r   r   r   get_storage   s   rT   c                 C   sH   t jr"td| }t|dkr d|d d t| d f }|} | S )N    z%s:%s   zutf-8)r   %IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEYbad_memcached_key_charssubr=   r   encode	hexdigest)keynew_keyr   r   r   sanitize_cache_key   s   "r_   )r.   T)r/   rehashlibr   	importlibr   django.confr   django.core.exceptionsr   django.core.filesr   pilkit.utilscompilerY   r+   r   r    r"   r'   r-   r6   r;   r<   rI   rN   rT   r_   r   r   r   r   <module>   s,    
	
