
    ՟f4                         d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 ddlmZ ddlmZmZ ddlmZ  G d	 d
e      Z G d de      Z G d de      Zy)    N)	timedelta)AnyOptionalProtocol)Flask   )total_seconds)ServerSideSessionServerSideSessionInterface)Defaultsc                   J    e Zd Zdedee   fdZdedededefdZ	dedefdZ
y)	MemcacheClientProtocolkeyreturnc                      y N selfr   s     \/var/www/cvtools/html/venv/lib/python3.12/site-packages/flask_session/memcached/memcached.pygetzMemcacheClientProtocol.get           valuetimeoutc                      y r   r   )r   r   r   r   s       r   setzMemcacheClientProtocol.set   r   r   c                      y r   r   r   s     r   deletezMemcacheClientProtocol.delete   r   r   N)__name__
__module____qualname__strr   r   r   intboolr   r   r   r   r   r   r      s7    1s1x}1BsB3BBB+#+$+r   r   c                       e Zd Zy)MemcachedSessionN)r    r!   r"   r   r   r   r'   r'      s    r   r'   c                   @    e Zd ZdZej
                  ZeZdZe	j                  e	j                  e	j                  e	j                  e	j                  e	j                  fdedee   dedededed	ef fd
Zd ZdedefdZdedee   fdZdeddfdZdedededdfdZ xZS )MemcachedSessionInterfacea  A Session interface that uses memcached as session storage. (`pylibmc`, `libmc`, `python-memcached` or `pymemcache` required)

    :param client: A ``memcache.Client`` instance.
    :param key_prefix: A prefix that is added to all storage keys.
    :param use_signer: Whether to sign the session id cookie or not.
    :param permanent: Whether to use permanent session or not.
    :param sid_length: The length of the generated session id in bytes.
    :param serialization_format: The serialization format to use for the session data.

    .. versionadded:: 0.7
        The `serialization_format` and `app` parameters were added.

    .. versionadded:: 0.6
        The `sid_length` parameter was added.

    .. versionadded:: 0.2
        The `use_signer` parameter was added.
    Tappclient
key_prefix
use_signer	permanent
sid_lengthserialization_formatc                     t        fddD              s,t        j                  dt        d       | j	                         | _        t        |   ||||||       y )Nc              3   6   K   | ]  }t        |        y wr   )hasattr).0methodr+   s     r   	<genexpr>z5MemcachedSessionInterface.__init__.<locals>.<genexpr>9   s      %
(.GFF#%
s   )r   r   r   zsNo valid memcache.Client instance provided, attempting to create a new instance on localhost with default settings.   )
stacklevel)allwarningswarnRuntimeWarning_get_preferred_memcache_clientr+   super__init__)	r   r*   r+   r,   r-   r.   r/   r0   	__class__s	     `     r   r?   z"MemcachedSessionInterface.__init__/   sj     > %
2J%
 "
 MM F
 88:FZJ@T	
r   c                     ddgfddgfdddgfg}|D ]&  \  }}	 t        |      }|j                  } ||      c S  t        d      # t        $ r Y ?w xY w)Npylibmc127.0.0.1:11211memcache)zpymemcache.client.baserC   libmczlocalhost:11211zNo memcache module found)
__import__ClientImportError)r   clientsmodule_nameservermoduleClientClasss         r   r=   z8MemcachedSessionInterface._get_preferred_memcache_clientG   s    *+,+,-9()*	
 $+ 	K#K0$mm"6**		 455  s   A	AAr   r   c                 P    |dkD  r |t        t        j                               z  }|S )z
        Memcached deals with long (> 30 days) timeouts in a special
        way. Call this function to obtain a safe value for your timeout.
        i ' )r$   time)r   r   s     r   _get_memcache_timeoutz/MemcachedSessionInterface._get_memcache_timeoutY   s&    
 Ws499;''Gr   store_idc                 t    | j                   j                  |      }|r| j                  j                  |      S y r   )r+   r   
serializerdecode)r   rQ   serialized_session_datas      r   _retrieve_session_dataz0MemcachedSessionInterface._retrieve_session_datac   s1    "&++//(";"??))*ABBr   Nc                 :    | j                   j                  |       y r   )r+   r   )r   rQ   s     r   _delete_sessionz)MemcachedSessionInterface._delete_sessionj   s    8$r   session_lifetimesessionc                     t        |      }| j                  j                  |      }| j                  j	                  ||| j                  |             y r   )r	   rS   encoder+   r   rP   )r   rY   rZ   rQ   storage_time_to_liverU   s         r   _upsert_sessionz)MemcachedSessionInterface._upsert_sessionm   sN      --=> #'//"8"8"A 	#&&';<	
r   ) r    r!   r"   __doc__r   rS   r'   session_classttlr   SESSION_MEMCACHEDSESSION_KEY_PREFIXSESSION_USE_SIGNERSESSION_PERMANENTSESSION_ID_LENGTHSESSION_SERIALIZATION_FORMATr   r   r   r#   r%   r$   r?   r=   rP   dictrV   rX   	TimeDeltar
   r^   __classcell__)r@   s   @r   r)   r)      s   & ,66J$M
C
 4<3M3M"55#66"44"44$,$I$I

 /0
 	

 
 
 
 "
06$S S s x~ % % %
 )
4E
QT
	
r   r)   )rO   r:   datetimer   ri   typingr   r   r   flaskr   _utilsr	   baser
   r   defaultsr   r   r'   r)   r   r   r   <module>rq      sH      + * *  " @ ,X ,	( 	c
 : c
r   