
    ՋgK                     6    d dl Z G d d      Z G d de      Zy)    Nc            
          e Zd ZdZddefdZdej                  e   defdZde	dej                  fdZde	defd	Zd
e	dej                  ej                     fdZd
e	dej                   e	ej                  f   fdZ	 dde	dej                  dej                  e   dej                  e   fdZdde	dej                  dej                  e   defdZ	 ddej                   e	ej                  f   dej                  e   dej                  ej                     fdZd
e	dej                  ej                     fdZde	defdZdefdZdde	dedej                  e   fdZdde	dedej                  e   fdZy)	BaseCacheaM  Baseclass for the cache systems.  All the cache systems implement this
    API or a superset of it.

    :param default_timeout: the default timeout (in seconds) that is used if
                            no timeout is specified on :meth:`set`. A timeout
                            of 0 indicates that the cache never expires.
    default_timeoutc                     || _         y Nr   )selfr   s     @/var/www/html/venv/lib/python3.12/site-packages/cachelib/base.py__init__zBaseCache.__init__   s
    .    timeoutreturnc                 "    || j                   }|S r   r   )r	   r   s     r
   _normalize_timeoutzBaseCache._normalize_timeout   s    ?**Gr   keyc                      y)zLook up key in the cache and return the value for it.

        :param key: the key to be looked up.
        :returns: The value if it exists and is readable, else ``None``.
        N r	   r   s     r
   getzBaseCache.get   s     r   c                      y)zDelete `key` from the cache.

        :param key: the key to delete.
        :returns: Whether the key existed and has been deleted.
        :rtype: boolean
        Tr   r   s     r
   deletezBaseCache.delete        r   keysc                 J    |D cg c]  }| j                  |       c}S c c}w )a<  Returns a list of values for the given keys.
        For each key an item in the list is created::

            foo, bar = cache.get_many("foo", "bar")

        Has the same error handling as :meth:`get`.

        :param keys: The function accepts multiple keys as positional
                     arguments.
        )r   )r	   r   ks      r
   get_manyzBaseCache.get_many&   s      &*****s    c                 F    t        t        | | j                  |             S )zLike :meth:`get_many` but return a dict::

            d = cache.get_dict("foo", "bar")
            foo = d["foo"]
            bar = d["bar"]

        :param keys: The function accepts multiple keys as positional
                     arguments.
        )dictzipr   )r	   r   s     r
   get_dictzBaseCache.get_dict3   s!     CmdmmT2344r   Nvaluec                      y)ak  Add a new key/value to the cache (overwrites value, if key already
        exists in the cache).

        :param key: the key to set
        :param value: the value for the key
        :param timeout: the cache timeout for the key in seconds (if not
                        specified, it uses the default timeout). A timeout of
                        0 indicates that the cache never expires.
        :returns: ``True`` if key has been updated, ``False`` for backend
                  errors. Pickling errors, however, will raise a subclass of
                  ``pickle.PickleError``.
        :rtype: boolean
        Tr   r	   r   r!   r   s       r
   setzBaseCache.set?   s      r   c                      y)a  Works like :meth:`set` but does not overwrite the values of already
        existing keys.

        :param key: the key to set
        :param value: the value for the key
        :param timeout: the cache timeout for the key in seconds (if not
                        specified, it uses the default timeout). A timeout of
                        0 indicates that the cache never expires.
        :returns: Same as :meth:`set`, but also ``False`` for already
                  existing keys.
        :rtype: boolean
        Tr   r#   s       r
   addzBaseCache.addQ   s     r   mappingc                     g }|j                         D ]*  \  }}| j                  |||      s|j                  |       , |S )a  Sets multiple keys and values from a mapping.

        :param mapping: a mapping with the keys/values to set.
        :param timeout: the cache timeout for the key in seconds (if not
                        specified, it uses the default timeout). A timeout of
                        0 indicates that the cache never expires.
        :returns: A list containing all keys successfully set
        :rtype: boolean
        )itemsr$   append)r	   r'   r   set_keysr   r!   s         r
   set_manyzBaseCache.set_many`   sE     !--/ 	%JCxxUG,$	% r   c                 ^    g }|D ]%  }| j                  |      s|j                  |       ' |S )zDeletes multiple keys at once.

        :param keys: The function accepts multiple keys as positional
                     arguments.
        :returns: A list containing all successfully deleted keys
        :rtype: boolean
        )r   r*   )r	   r   deleted_keysr   s       r
   delete_manyzBaseCache.delete_manyr   s:      	)C{{3##C(	) r   c                     t        d      )zChecks if a key exists in the cache without returning it. This is a
        cheap operation that bypasses loading the actual data on the backend.

        :param key: the key to check
        z%s doesn't have an efficient implementation of `has`. That means it is impossible to check whether a key exists without fully loading the key's data. Consider using `self.get` explicitly if you don't care about performance.)NotImplementedErrorr   s     r
   haszBaseCache.has   s     ">
 	
r   c                      y)zClears the cache.  Keep in mind that not all caches support
        completely clearing the cache.

        :returns: Whether the cache has been cleared.
        :rtype: boolean
        Tr   )r	   s    r
   clearzBaseCache.clear   r   r   deltac                 ^    | j                  |      xs d|z   }| j                  ||      r|S dS )aH  Increments the value of a key by `delta`.  If the key does
        not yet exist it is initialized with `delta`.

        For supporting caches this is an atomic operation.

        :param key: the key to increment.
        :param delta: the delta to add.
        :returns: The new value or ``None`` for backend errors.
        r   Nr   r$   r	   r   r5   r!   s       r
   inczBaseCache.inc   3     ##!u,e,u6$6r   c                 ^    | j                  |      xs d|z
  }| j                  ||      r|S dS )aL  Decrements the value of a key by `delta`.  If the key does
        not yet exist it is initialized with `-delta`.

        For supporting caches this is an atomic operation.

        :param key: the key to increment.
        :param delta: the delta to subtract.
        :returns: The new value or `None` for backend errors.
        r   Nr7   r8   s       r
   deczBaseCache.dec   r:   r   )i,  r   )   )__name__
__module____qualname____doc__intr   _tOptionalr   strAnyr   boolr   Listr   Dictr    r$   r&   r,   r/   r2   r4   r9   r<   r   r   r
   r   r      s   / /"++c*: s 
s rvv # $ +c +bggbffo +
5c 
5bggc266k&: 
5 DH!vv02C0@	T	$s 266 BKK4D PT   JNwwsBFF{+68kk#6F	$  
s 
t 
t 7s 73 7r{{3/? 77s 73 7r{{3/? 7r   r   c                        e Zd ZdZdedefdZy)	NullCachezA cache that doesn't cache.  This can be useful for unit testing.

    :param default_timeout: a dummy parameter that is ignored but exists
                            for API compatibility with other caches.
    r   r   c                      y)NFr   r   s     r
   r2   zNullCache.has   s    r   N)r>   r?   r@   rA   rE   rG   r2   r   r   r
   rK   rK      s    s t r   rK   )typingrC   r   rK   r   r   r
   <module>rN      s!    j7 j7Z	 r   