
    h                         d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dZd	gZd
ZdZ e	d      Zd Zd Z G d d      Zeeed dZ G d de      Zy	)z-Memcached and in-memory cache result backend.    )bytes_to_strensure_bytes)cached_property)ImproperlyConfigured)LRUCache   )KeyValueStoreBackend)CacheBackendNzBThe Memcached backend requires either pylibmc or python-memcached.zYThe cache backend {0!r} is unknown,
Please use one of the following backends instead: {1}i  )limitc                      t         d   dt        }} 	 dd l}d} | ||ft         d<   t         d   S # t        $ r% 	 dd l}n# t        $ r t        t              w xY wY Bw xY w)Nr   FT)_impr   pylibmcImportErrormemcacher   REQUIRES_BACKEND)
is_pylibmcmemcache_key_tr   s      Q/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/backends/cache.pyimport_best_memcacher      su    Aw%*LN
	=&J x8Q7N  	== =*+;<<=  	=s#   . 	A=AAAAc                  R    t               \  }}}|j                  x}|sfd}||fS )Nc                  8    |j                  dd         | i |S )N	behaviors)pop)argskwargs_Clients     r   Clientz!get_best_memcache.<locals>.Client2   s!    JJ{D)D+F++    )r   r   )r   r   r   r   key_tr   r   s         @r   get_best_memcacher    +   s6     #7"8J%&FW	, 5=r   c                   8    e Zd Zd Zd Zd Zd Zd Zd	dZd Z	y)
DummyClientc                     t         | _        y N)_DUMMY_CLIENT_CACHEcache)selfr   r   s      r   __init__zDummyClient.__init__;   s	    (
r   c                 8    | j                   j                  |      S r$   )r&   getr'   keyr   r   s       r   r*   zDummyClient.get>   s    zz~~c""r   c                 V    | j                   }|D ci c]  }||v s|||    c}S c c}w r$   r&   )r'   keysr&   ks       r   	get_multizDummyClient.get_multiA   s-    

%)8Q%Z58888s   	&&c                 "    || j                   |<   y r$   r.   )r'   r,   valuer   r   s        r   setzDummyClient.setE   s    

3r   c                 <    | j                   j                  |d        y r$   )r&   r   r+   s       r   deletezDummyClient.deleteH   s    

sD!r   c                 :    | j                   j                  ||      S r$   )r&   incr)r'   r,   deltas      r   r8   zDummyClient.incrK   s    zzsE**r   c                      y r$    )r'   r,   expires      r   touchzDummyClient.touchN   s    r   N)r   )
__name__
__module____qualname__r(   r*   r1   r4   r6   r8   r=   r;   r   r   r"   r"   9   s%    )#9 "+r   r"   c                      t         t        fS r$   )r"   r   r;   r   r   <lambda>rB   V   s	    {L1r   )r   	memcachedr   memoryc                        e Zd ZdZdZdZdZdZ	 	 d fd	Zd Z	d Z
d Zd Z fd	Zd
 Zd Zed        Zd fd	Zd Z xZS )r
   zCache result backend.NTc           	         |si n|}t        	|   |fi | || _        t        | j                  j
                  j                  fi || _        |xs$ |xs  | j                  j
                  j                  | _	        | j                  rI| j                  j                  d      \  | _	        }}|j                  d      j                  d      | _        | j                  |t              | _        	 t#        | j                            \  | _        | _        | j3                          y # t(        $ r= t+        t,        j/                  | j                  dj1                  t"                          w xY w)N:///;)typez, )superr(   urldictappconfcache_backend_optionsoptionscache_backendbackend	partitionrstripsplitserversprepare_expiresintexpiresbackendsr   r   KeyErrorr   UNKNOWN_BACKENDformatjoin_encode_prefixes)
r'   rN   rZ   rS   rQ   rL   r   _rW   	__class__s
            r   r(   zCacheBackend.__init__b   s*   #"''DHHMM?? '%' DgD)D)D<<'+||'='=e'D$DL!W">>#.44S9DL++G#+>	4&.t||&<&>#DK 	  	4&'='=dii1(3 4 4	4s   -$D" "AE(c                 8    | j                   j                  |      S r$   )clientr*   r'   r,   s     r   r*   zCacheBackend.getw   s    {{s##r   c                 8    | j                   j                  |      S r$   )rd   r1   )r'   r/   s     r   mgetzCacheBackend.mgetz   s    {{$$T**r   c                 P    | j                   j                  ||| j                        S r$   )rd   r4   rZ   r'   r,   r3   s      r   r4   zCacheBackend.set}   s    {{sE4<<88r   c                 8    | j                   j                  |      S r$   )rd   r6   re   s     r   r6   zCacheBackend.delete   s    {{!!#&&r   c                     | j                  |d         }| j                  j                  |d| j                         t	        |   ||fi |S )Nr   )time)get_key_for_chordrd   r4   rZ   rK   _apply_chord_incr)r'   header_result_argsbodyr   	chord_keyrb   s        r   rn   zCacheBackend._apply_chord_incr   sR    **+=a+@A		14<<8w(0(.0 	0r   c                 8    | j                   j                  |      S r$   )rd   r8   re   s     r   r8   zCacheBackend.incr   s    {{$$r   c                 :    | j                   j                  ||      S r$   )rd   r=   ri   s      r   r<   zCacheBackend.expire   s    {{  e,,r   c                 P     | j                   | j                  fi | j                  S r$   )r   rW   rQ   )r'   s    r   rd   zCacheBackend.client   s     t{{4<<84<<88r   c                     |si n|}dj                  | j                        }| j                   d| d}|j                  || j                  | j
                  d       t        |   ||      S )NrI   rG   rH   )rS   rZ   rQ   )r_   rW   rS   updaterZ   rQ   rK   
__reduce__)r'   r   r   rW   rS   rb   s        r   rw   zCacheBackend.__reduce__   sj    !v((4<<(\\N#gYa0&	' w!$//r   c                 \    dj                  | j                        }| j                   d| dS )zcReturn the backend as an URI.

        This properly handles the case of multiple servers.
        rI   rG   rH   )r_   rW   rS   )r'   r   r   rW   s       r   as_urizCacheBackend.as_uri   s-    
 ((4<<(,,s7)1--r   )NNNN)r;   N)r>   r?   r@   __doc__rW   supports_autoexpiresupports_native_joinimplements_incrr(   r*   rg   r4   r6   rn   r8   r<   r   rd   rw   ry   __classcell__)rb   s   @r   r
   r
   Z   sh    GO26#' *$+9'0%- 9 90.r   r
   )rz   kombu.utils.encodingr   r   kombu.utils.objectsr   celery.exceptionsr   celery.utils.functionalr   baser	   __all__r   r   r]   r%   r   r    r"   r[   r
   r;   r   r   <module>r      sw    3 ; / 2 , &
v  T*  4 "" 1	I.' I.r   