o
    `oi.                     @   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   V/var/www/html/kuke-dev/django-kuke/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moduleZobjnamemodeobjr   r   r   get_by_qname   s,   
r   c                 C   s*   t | |}t|}|s|  }t|< |S N)r   _singletonsget)Z
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_modulesZimagegeneratorsT)_autodiscoveredZdjango.utils.module_loadingr'   r&   r   r   r   autodiscover7   s
   
r)   imagekitTc                 C   s    t | }|r|t   |S r    )logging	getLogger
addHandlerNullHandler)Zlogger_nameZadd_null_handlerloggerr   r   r   
get_loggerI   s   
r0   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fieldZattnamer   )Z
field_filer   r   r   get_field_infoP   s   
r3   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   r4   c   s
   
r4   c                 C   s0   t | dd }t ||d }|d ur||  d S d S )NZcachefile_strategyr2   )filemethod_nameZstrategyfnr   r   r   call_strategy_methods   s
   r?   c                  C   s   ddl m}  | tj S )Nr   caches)Zdjango.core.cacherA   r   ZIMAGEKIT_CACHE_BACKENDr@   r   r   r   	get_cachez   s   
rB   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)Zdjango.core.files.storagerD   rE   r   r%   r   ZIMAGEKIT_DEFAULT_FILE_STORAGErC   r   r   r   get_storage   s   rF   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   Z%IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEYbad_memcached_key_charssubr5   r   encode	hexdigest)keyZnew_keyr   r   r   sanitize_cache_key   s   "rO   )r*   T)r+   rehashlibr   	importlibr   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.core.filesr   Zpilkit.utilscompilerJ   r(   r   r   r!   r%   r)   r0   r3   r4   r?   rB   rF   rO   r   r   r   r   <module>   s,    
	
