
    XfK                     D    d dl Z G d d          Z G d de          ZdS )    Nc            
       v   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dS )	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                     || _         d S Nr   )selfr   s     A/var/www/piapp/venv/lib/python3.11/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                     dS )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	     tr   c                     dS )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   	     tr   keysc                        fd|D             S )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.
        c                 :    g | ]}                     |          S r   )r   ).0kr
   s     r   
<listcomp>z&BaseCache.get_many.<locals>.<listcomp>1   s#    ******r   r   r
   r   s   ` r   get_manyzBaseCache.get_many&   s     +***T****r   c                 L    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    s     r   get_dictzBaseCache.get_dict3   s%     CmdmT233444r   Nvaluec                     dS )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	      tr   c                     dS )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	     tr   mappingc                     g }|                                 D ]1\  }}|                     |||          r|                    |           2|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`   sT     !--// 	% 	%JCxxUG,, %$$$r   c                 h    g }|D ],}|                      |          r|                    |           -|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   sG      	) 	)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                     dS )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    |                      |          pd|z   }|                     ||          r|n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   r;   r&   s       r   inczBaseCache.inc   :     ##!u,e,,6uu$6r   c                 j    |                      |          pd|z
  }|                     ||          r|n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   Nr=   r>   s       r   deczBaseCache.dec   r@   r   )r   r   )r:   )__name__
__module____qualname____doc__intr   _tOptionalr   strAnyr   boolr   Listr!   Dictr%   r)   r+   r1   r4   r7   r9   r?   rB   r   r   r   r   r      s        / / / / / /"+c*: s    
s rv    # $    +c +bgbfo + + + +
5c 
5bgc26k&: 
5 
5 
5 
5 DH !v02C0@	T	   $ s 26 BK4D PT      JN wsBF{+68k#6F	   $     
s 
t 
 
 
 
t    7 7s 73 7r{3/? 7 7 7 77 7s 73 7r{3/? 7 7 7 7 7 7r   r   c                   "    e Zd ZdZdedefdZdS )	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                     dS )NFr   r   s     r   r7   zNullCache.has   s    ur   N)rC   rD   rE   rF   rJ   rL   r7   r   r   r   rP   rP      s@         s t      r   rP   )typingrH   r   rP   r   r   r   <module>rS      sv       j7 j7 j7 j7 j7 j7 j7 j7Z    	     r   