
    Xf4                         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dS )    N)	timedelta)AnyOptionalProtocol)Flask   )total_seconds)ServerSideSessionServerSideSessionInterface)Defaultsc                   R    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
dS )	MemcacheClientProtocolkeyreturnc                     d S N selfr   s     U/var/www/piapp/venv/lib/python3.11/site-packages/flask_session/memcached/memcached.pygetzMemcacheClientProtocol.get             valuetimeoutc                     d S r   r   )r   r   r   r   s       r   setzMemcacheClientProtocol.set   r   r   c                     d S 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      s`        1s1x}1111BsB3BBBBBB+#+$++++++r   r   c                       e Zd ZdS )MemcachedSessionN)r    r!   r"   r   r   r   r'   r'      s        Dr   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                       s0t          j        dt          d           |                                 | _        t                                          ||||||           d S )Nc              3   8   K   | ]}t          |          V  d S r   )hasattr).0methodr+   s     r   	<genexpr>z5MemcachedSessionInterface.__init__.<locals>.<genexpr>9   s>       %
 %
(.GFF##%
 %
 %
 %
 %
 %
r   )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__/   s     > %
 %
 %
 %
2J%
 %
 %
 "
 "
> M F   
 88::FZJ@T	
 	
 	
 	
 	
r   c                     ddgfddgfdddgfg}|D ]8\  }}	 t          |          }|j        } ||          c S # t          $ r Y 5w xY wt          d          )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0$m"{6*****    4555s    ;
AAr   r   c                 X    |dk    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s49;;'''Gr   store_idc                 r    | j                             |          }|r| j                            |          S d S r   )r+   r   
serializerdecode)r   rQ   serialized_session_datas      r   _retrieve_session_dataz0MemcachedSessionInterface._retrieve_session_datac   s;    "&+//(";";" 	C?))*ABBBtr   Nc                 :    | j                             |           d S r   )r+   r   )r   rQ   s     r   _delete_sessionz)MemcachedSessionInterface._delete_sessionj   s    8$$$$$r   session_lifetimesessionc                     t          |          }| j                            |          }| j                            |||                     |                     d S r   )r	   rS   encoder+   r   rP   )r   rY   rZ   rQ   storage_time_to_liverU   s         r   _upsert_sessionz)MemcachedSessionInterface._upsert_sessionm   sg      --=>> #'/"8"8"A"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}        & ,6J$M
C
 4<3M"5#6"4"4$,$I
 

 /0
 	

 
 
 
 "
 
 
 
 
 
06 6 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      s)     + + + + + + * * * * * * * * * *       " " " " " " @ @ @ @ @ @ @ @      , , , , ,X , , ,	 	 	 	 	( 	 	 	c
 c
 c
 c
 c
 : c
 c
 c
 c
 c
r   