
    3~h                        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      Z
d	 Z G d
 de      Z G d d      Z G d d      Z G d de      Zd%dZ G d de      Z	 d dlmZ   edd      e      Z G d de      Z G d de      Z	 d dlmZ   edd       e      Z G d  d!e      Z	 d d"lmZ   e       e      Z G d# d$e      Z y# e$ r Y _w xY w# e$ r Y =w xY w# e$ r Y )w xY w)&    N)copysettings)ImproperlyConfigured   )	get_cacheget_singletonsanitize_cache_keyc                       e Zd ZdZdZdZy)CacheFileStateexists
generatingdoes_not_existN)__name__
__module____qualname__EXISTS
GENERATINGDOES_NOT_EXIST     e/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/imagekit/cachefiles/backends.pyr   r   
   s    FJ%Nr   r   c                  :    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   s    r   get_default_cachefile_backendr      s    
 %DD') )r   c                       e Zd Zy)InvalidFileBackendErrorN)r   r   r   r   r   r   r   r      s    r   r   c                       e Zd ZdZddZd Zy)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.

    c                     t         NNotImplementedErrorselffileforces      r   generatez!AbstractCacheFileBackend.generate%       !!r   c                     t         r"   r#   r&   r'   s     r   r   zAbstractCacheFileBackend.exists(   r*   r   NF)r   r   r   __doc__r)   r   r   r   r   r    r       s    ""r   r    c                   R    e Zd ZdZ	 ed        Zd ZddZd Zd Z	d Z
ddZdd	Zy
)CachedFileBackend   c                 R    t        | dd       st               | _        | j                  S N_cache)getattrr   r4   )r&   s    r   cachezCachedFileBackend.cache7   s!    tXt,#+DK{{r   c                 V    ddl m} t        |j                  |j                  d      S )Nr   r   z-state)r   r   r
   IMAGEKIT_CACHE_PREFIXname)r&   r'   r   s      r   get_keyzCachedFileBackend.get_key=   s)    (!#+#A#A499#N O 	Or   c                     | j                  |      }| j                  j                  |      }|G|rE| j                  |      }|rt        j
                  nt        j                  }| j                  ||       |S r"   )r:   r6   get_existsr   r   r   	set_state)r&   r'   check_if_unknownkeystater   s         r   	get_statezCachedFileBackend.get_stateB   s`    ll4 

s#=-\\$'F-3N))9V9VENN4'r   c                     | j                  |      }|t        j                  k(  r(| j                  j	                  ||| j
                         y | j                  j	                  ||t        j                         y r"   )r:   r   r   r6   setexistence_check_timeoutr   IMAGEKIT_CACHE_TIMEOUT)r&   r'   rA   r@   s       r   r>   zCachedFileBackend.set_stateK   sR    ll4 N111JJNN3t'C'CDJJNN3x'F'FGr   c                 T    t        | j                        }|j                  dd        |S r3   )r   __dict__pop)r&   rA   s     r   __getstate__zCachedFileBackend.__getstate__R   s%    T]]# 			(D!r   c                 F    | j                  |      t        j                  k(  S r"   )rB   r   r   r,   s     r   r   zCachedFileBackend.existsY   s    ~~d#~'<'<<<r   c                     t         r"   r#   r%   s      r   r)   zCachedFileBackend.generate\   r*   r   c                 ,   |s1| j                  |      t        j                  t        j                  fvra| j	                  |t        j                         |j                          | j	                  |t        j                         |j                          y y r"   )rB   r   r   r   r>   	_generatecloser%   s      r   generate_nowzCachedFileBackend.generate_now_   sg    DNN4(1J1JNLaLa0bbNN4!:!:;NNNN4!6!67JJL	 cr   N)Tr-   )r   r   r   rE   propertyr6   r:   rB   r>   rJ   r   r)   rP   r   r   r   r0   r0   ,   sF      
O
H="r   r0   c                       e Zd ZdZddZd Zy)Simplez
    The most basic file backend. The storage is consulted to see if the file
    exists. Files are generated synchronously.

    c                 *    | j                  ||       y Nr(   rP   r%   s      r   r)   zSimple.generaten   s    $e,r   c                     t        t        |dd       xs3 |j                  xr% |j                  j	                  |j                              S )N_file)boolr5   r9   storager   r,   s     r   r=   zSimple._existsq   sA    GD'40 F		Ddll&9&9$))&DG 	Gr   Nr-   )r   r   r   r.   r)   r=   r   r   r   rS   rS   g   s    -Gr   rS   c                 *    | j                  ||       y rU   rW   )backendr'   r(   s      r   _generate_filer^   v   s    U+r   c                   $    e Zd ZdZdZddZddZy)	BaseAsynczP
    Base class for cache file backends that generate files asynchronously.
    Tc                     | j                  |d      }|t        j                  t        j                  fvr| j	                  ||       y y )NF)r?   rV   )rB   r   r   r   schedule_generation)r&   r'   r(   rA   s       r   r)   zBaseAsync.generate   sH     te<22N4I4IJJ$$T$7 Kr   c                     t         r"   r#   r%   s      r   rb   zBaseAsync.schedule_generation   s
     "!r   Nr-   )r   r   r   r.   is_asyncr)   rb   r   r   r   r`   r`   z   s     H8"r   r`   )shared_taskTpickle)ignore_result
serializerc                   *     e Zd ZdZ fdZddZ xZS )Celeryz<
    A backend that uses Celery to generate the images.
    c                 ^    	 dd l }t        |   |i | y # t        $ r t        d      w xY w)Nr   zCYou must install celery to use imagekit.cachefiles.backends.Celery.)celeryImportErrorr   super__init__)r&   argskwargsrl   	__class__s       r   ro   zCelery.__init__   sH    	P 	$)&)  	P& (O P P	P    ,c                 4    t         j                  | ||       y rU   )_celery_taskdelayr%   s      r   rb   zCelery.schedule_generation   s    4U3r   r-   r   r   r   r.   ro   rb   __classcell__rr   s   @r   rj   rj      s    *4r   rj   c                        e Zd Z fdZ xZS )Asyncc                     d}t        j                  |j                  t              t               t        |   |i | y )Nz6{path}.Async is deprecated. Use {path}.Celery instead.)path)warningswarnformatr   DeprecationWarningrn   ro   )r&   rp   rq   messagerr   s       r   ro   zAsync.__init__   s4    Jgnn(n35GH$)&)r   )r   r   r   ro   rx   ry   s   @r   r{   r{      s    * *r   r{   )jobdefault)
result_ttlc                   *     e Zd ZdZ fdZddZ xZS )RQz8
    A backend that uses RQ to generate the images.
    c                 ^    	 dd l }t        |   |i | y # t        $ r t        d      w xY w)Nr   zBYou must install django-rq to use imagekit.cachefiles.backends.RQ.)	django_rqrm   r   rn   ro   )r&   rp   rq   r   rr   s       r   ro   zRQ.__init__   sH    	L 	$)&)  	L& (K L L	Lrs   c                 4    t         j                  | ||       y rU   )_rq_jobrv   r%   s      r   rb   zRQ.schedule_generation   s    dD.r   r-   rw   ry   s   @r   r   r      s    */r   r   )actorc                   *     e Zd ZdZ fdZddZ xZS )Dramatiqz>
    A backend that uses Dramatiq to generate the images.
    c                 ^    	 dd l }t        |   |i | y # t        $ r t        d      w xY w)Nr   zNYou must install django-dramatiq to use imagekit.cachefiles.backends.Dramatiq.)dramatiqrm   r   rn   ro   )r&   rp   rq   r   rr   s       r   ro   zDramatiq.__init__   sH    	S 	$)&)  	S& (R S S	Srs   c                 4    t         j                  | ||       y rU   )_dramatiq_actorsendr%   s      r   rb   zDramatiq.schedule_generation   s    T4u5r   r-   rw   ry   s   @r   r   r      s    *6r   r   r-   )!r~   r   r   r   django.core.exceptionsr   utilsr   r	   r
   r   r   r   r    r0   rS   r^   r`   rl   re   taskru   rm   rj   r{   r   r   r   r   r   r   r   r   r   r   r   <module>r      s(       7 @ @& &)	2 	" "8 8vG G," ",Q* A4dx@PL4Y 4"*F *; +c)*>:G/ / . egn-O6y 6}  		@  		0  		s6   (C C! 7C, CC!C)(C),C43C4