o
    ;h                     @   s   d dl Z d dlmZ d dlmZ d dl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 deZG dd deZdS )    N)	timedelta)Optional)Flask)Redis   )total_seconds)ServerSideSessionServerSideSessionInterface)Defaultsc                   @   s   e Zd ZdS )RedisSessionN)__name__
__module____qualname__ r   r   L/var/www/html/venv/lib/python3.10/site-packages/flask_session/redis/redis.pyr      s    r   c                       s   e Zd Zd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
dZdedee fddZdeddfddZdedededdfddZ  ZS )RedisSessionInterfacea  Uses the Redis key-value store as a session storage. (`redis-py` required)

    :param client: A ``redis.Redis`` 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                    sH   |d u s	t |tstjdtdd t }|| _t |||||| d S )NziNo valid Redis instance provided, attempting to create a new instance on localhost with default settings.   )
stacklevel)
isinstancer   warningswarnRuntimeWarningr   super__init__)selfr   r   r   r   r   r   r   	__class__r   r   r    (   s   
zRedisSessionInterface.__init__store_idreturnc                 C   s    | j |}|r| j|S d S N)r   get
serializerdecode)r!   r$   serialized_session_datar   r   r   _retrieve_session_data>   s   z,RedisSessionInterface._retrieve_session_dataNc                 C   s   | j | d S r&   )r   delete)r!   r$   r   r   r   _delete_sessionE   s   z%RedisSessionInterface._delete_sessionsession_lifetimesessionc                 C   s*   t |}| j|}| jj|||d d S )N)namevalueex)r   r(   encoder   set)r!   r.   r/   r$   Zstorage_time_to_liver*   r   r   r   _upsert_sessionH   s   
z%RedisSessionInterface._upsert_session)r   r   r   __doc__r   Zsession_classttlr
   ZSESSION_REDISZSESSION_KEY_PREFIXZSESSION_USE_SIGNERZSESSION_PERMANENTZSESSION_ID_LENGTHZSESSION_SERIALIZATION_FORMATr   r   r   strboolintr    dictr+   r-   	TimeDeltar   r5   __classcell__r   r   r"   r   r      sH    r   )r   datetimer   r<   typingr   Zflaskr   Zredisr   Z_utilsr   baser   r	   defaultsr
   r   r   r   r   r   r   <module>   s    