o
    vh                     @   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exists
generatingdoes_not_existN)__name__
__module____qualname__EXISTS
GENERATINGDOES_NOT_EXIST r   r   Z/var/www/html/hyperkenya/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   "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	   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   )r2   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   )r2   r
   r   r/   setexistence_check_timeoutr   IMAGEKIT_CACHE_TIMEOUT)r!   r"   r8   r7   r   r   r   r5   K   s   

zCachedFileBackend.set_statec                 C   s   t | j}|dd  |S r,   )r   __dict__pop)r!   r8   r   r   r   __getstate__R   s   
zCachedFileBackend.__getstate__c                 C   s   |  |tjkS r   )r9   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   )r9   r
   r   r   r5   	_generatecloser    r   r   r   generate_now_   s   zCachedFileBackend.generate_nowN)Tr'   )r   r   r   r;   propertyr/   r2   r9   r5   r?   r   r$   rB   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#   rB   r    r   r   r   r$   n      zSimple.generatec                 C   s$   t t|dd p|jo|j|jS )N_file)boolr.   r1   storager   r&   r   r   r   r4   q   s   zSimple._existsNr'   )r   r   r   r(   r$   r4   r   r   r   r   rD   g   r)   rD   Fc                 C   rE   rF   rH   )backendr"   r#   r   r   r   _generate_filev   rI   rN   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)r6   rG   )r9   r
   r   r   schedule_generation)r!   r"   r#   r8   r   r   r   r$      s   zBaseAsync.generatec                 C   r   r   r   r    r   r   r   rP      s   zBaseAsync.schedule_generationNr'   )r   r   r   r(   is_asyncr$   rP   r   r   r   r   rO   z   s
    

rO   )shared_taskTpickle)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kwargsrY   	__class__r   r   r\         zCelery.__init__Fc                 C      t j| ||d d S rF   )_celery_taskdelayr    r   r   r   rP         zCelery.schedule_generationr'   r   r   r   r(   r\   rP   __classcell__r   r   r_   r   rW          rW   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   DeprecationWarningr[   r\   )r!   r]   r^   messager_   r   r   r\      s   zAsync.__init__)r   r   r   r\   rg   r   r   r_   r   ri      s    ri   )jobdefault)
result_ttlc                       rV   )RQz8
    A backend that uses RQ to generate the images.
    c                    rX   )Nr   zBYou must install django-rq to use imagekit.cachefiles.backends.RQ.)	django_rqrZ   r   r[   r\   )r!   r]   r^   rt   r_   r   r   r\      ra   zRQ.__init__Fc                 C   rb   rF   )_rq_jobrd   r    r   r   r   rP      re   zRQ.schedule_generationr'   rf   r   r   r_   r   rs      rh   rs   )actorc                       rV   )Dramatiqz>
    A backend that uses Dramatiq to generate the images.
    c                    rX   )Nr   zNYou must install django-dramatiq to use imagekit.cachefiles.backends.Dramatiq.)dramatiqrZ   r   r[   r\   )r!   r]   r^   rx   r_   r   r   r\      ra   zDramatiq.__init__Fc                 C   rb   rF   )_dramatiq_actorsendr    r   r   r   rP      re   zDramatiq.schedule_generationr'   rf   r   r   r_   r   rw      rh   rw   r'   )!rk   r   r   r   django.core.exceptionsr   utilsr   r   r	   r
   r   r   r   r*   rD   rN   rO   rY   rR   taskrZ   rc   rW   ri   rt   rp   ru   rs   rx   rv   ry   rw   r   r   r   r   <module>   sF    
;

