o
    `oi                     @   s  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m	Z	 G dd dZ
d	d
 ZG dd deZG dd dZG dd dZG dd deZd(ddZG dd deZzd dlmZ W n	 eyg   Y n	w edddeZG dd deZG dd deZzd d lmZ W n	 ey   Y n	w ed!d d"eZG d#d$ d$eZzd d%lmZ W n	 ey   Y nw e eZG d&d' d'eZ dS ))    N)copysettings)ImproperlyConfigured   )	get_cacheget_singletonsanitize_cache_keyc                   @   s   e Zd ZdZdZdZdS )CacheFileStateexistsZ
generatingZdoes_not_existN)__name__
__module____qualname__EXISTS
GENERATINGDOES_NOT_EXIST r   r   d/var/www/html/kuke-dev/django-kuke/venv/lib/python3.10/site-packages/imagekit/cachefiles/backends.pyr
   
   s    r
   c                  C   s   ddl m}  t| jdS )z(
    Get the default file backend.

    r   r   zfile backend)django.confr   r   Z"IMAGEKIT_DEFAULT_CACHEFILE_BACKENDr   r   r   r   get_default_cachefile_backend   s   r   c                   @   s   e Zd ZdS )InvalidFileBackendErrorN)r   r   r   r   r   r   r   r      s    r   c                   @   "   e Zd ZdZdddZdd ZdS )	AbstractCacheFileBackendz
    An abstract cache file backend. This isn't used by any internal classes and
    is included simply to illustrate the minimum interface of a cache file
    backend for users who wish to implement their own.

    Fc                 C      t NNotImplementedErrorselffileforcer   r   r   generate%      z!AbstractCacheFileBackend.generatec                 C   r   r   r   r   r   r   r   r   r   (   r"   zAbstractCacheFileBackend.existsNF)r   r   r   __doc__r!   r   r   r   r   r   r          
r   c                   @   s\   e Zd ZdZ	 edd Zdd ZdddZd	d
 Zdd Z	dd Z
dddZdddZdS )CachedFileBackend   c                 C   s   t | dd s
t | _| jS N_cache)getattrr   r*   )r   r   r   r   cache7   s   zCachedFileBackend.cachec                 C   s    ddl m} td|j|jf S )Nr   r   z
%s%s-state)r   r   r	   ZIMAGEKIT_CACHE_PREFIXname)r   r   r   r   r   r   get_key=   s   
zCachedFileBackend.get_keyTc                 C   sL   |  |}| j|}|d u r$|r$| |}|rtjntj}| || |S r   )r.   r,   get_existsr
   r   r   	set_state)r   r   check_if_unknownkeystater   r   r   r   	get_stateB   s   

zCachedFileBackend.get_statec                 C   s@   |  |}|tjkr| j||| j d S | j||tj d S r   )r.   r
   r   r,   setexistence_check_timeoutr   ZIMAGEKIT_CACHE_TIMEOUT)r   r   r4   r3   r   r   r   r1   K   s   

zCachedFileBackend.set_statec                 C   s   t | j}|dd  |S r)   )r   __dict__pop)r   r4   r   r   r   __getstate__R   s   
zCachedFileBackend.__getstate__c                 C   s   |  |tjkS r   )r5   r
   r   r#   r   r   r   r   Y   s   zCachedFileBackend.existsFc                 C   r   r   r   r   r   r   r   r!   \   r"   zCachedFileBackend.generatec                 C   sN   |s|  |tjtjfvr%| |tj |  | |tj |  d S d S r   )r5   r
   r   r   r1   Z	_generatecloser   r   r   r   generate_now_   s   zCachedFileBackend.generate_nowN)Tr$   )r   r   r   r7   propertyr,   r.   r5   r1   r:   r   r!   r<   r   r   r   r   r'   ,   s    	

	
r'   c                   @   r   )	Simplez
    The most basic file backend. The storage is consulted to see if the file
    exists. Files are generated synchronously.

    Fc                 C      | j ||d d S Nr    r<   r   r   r   r   r!   n      zSimple.generatec                 C   s$   t t|dd p|jo|j|jS )N_file)boolr+   r-   Zstorager   r#   r   r   r   r0   q   s   zSimple._existsNr$   )r   r   r   r%   r!   r0   r   r   r   r   r>   g   r&   r>   Fc                 C   r?   r@   rB   )backendr   r    r   r   r   _generate_filev   rC   rG   c                   @   s(   e Zd ZdZdZd	ddZd	ddZdS )
	BaseAsynczP
    Base class for cache file backends that generate files asynchronously.
    TFc                 C   s4   | j |dd}|tjtjfvr| j||d d S d S )NF)r2   rA   )r5   r
   r   r   schedule_generation)r   r   r    r4   r   r   r   r!      s   zBaseAsync.generatec                 C   r   r   r   r   r   r   r   rI      s   zBaseAsync.schedule_generationNr$   )r   r   r   r%   is_asyncr!   rI   r   r   r   r   rH   z   s
    

rH   )shared_taskTpickle)Zignore_result
serializerc                       *   e Zd ZdZ fddZdddZ  ZS )Celeryz<
    A backend that uses Celery to generate the images.
    c                    :   zdd l }W n ty   tdw t j|i | d S )Nr   zCYou must install celery to use imagekit.cachefiles.backends.Celery.)celeryImportErrorr   super__init__)r   argskwargsrQ   	__class__r   r   rT         zCelery.__init__Fc                 C      t j| ||d d S r@   )_celery_taskdelayr   r   r   r   rI         zCelery.schedule_generationr$   r   r   r   r%   rT   rI   __classcell__r   r   rW   r   rO          rO   c                       s   e Zd Z fddZ  ZS )Asyncc                    s.   d}t |jtdt t j|i | d S )Nz6{path}.Async is deprecated. Use {path}.Celery instead.)path)warningswarnformatr   DeprecationWarningrS   rT   )r   rU   rV   messagerW   r   r   rT      s   zAsync.__init__)r   r   r   rT   r_   r   r   rW   r   ra      s    ra   )jobdefault)Z
result_ttlc                       rN   )RQz8
    A backend that uses RQ to generate the images.
    c                    rP   )Nr   zBYou must install django-rq to use imagekit.cachefiles.backends.RQ.)	django_rqrR   r   rS   rT   )r   rU   rV   rk   rW   r   r   rT      rY   zRQ.__init__Fc                 C   rZ   r@   )_rq_jobr\   r   r   r   r   rI      r]   zRQ.schedule_generationr$   r^   r   r   rW   r   rj      r`   rj   )actorc                       rN   )Dramatiqz>
    A backend that uses Dramatiq to generate the images.
    c                    rP   )Nr   zNYou must install django-dramatiq to use imagekit.cachefiles.backends.Dramatiq.)dramatiqrR   r   rS   rT   )r   rU   rV   ro   rW   r   r   rT      rY   zDramatiq.__init__Fc                 C   rZ   r@   )_dramatiq_actorsendr   r   r   r   rI      r]   zDramatiq.schedule_generationr$   r^   r   r   rW   r   rn      r`   rn   r$   )!rc   r   r   r   Zdjango.core.exceptionsr   utilsr   r   r	   r
   r   r   r   r'   r>   rG   rH   rQ   rK   taskrR   r[   rO   ra   rk   rh   rl   rj   ro   rm   rp   rn   r   r   r   r   <module>   sF    
;

