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mZ dd
lmZ G dd deZG dd deZdS )    N)datetime)	timedelta)Optional)Flask)
want_bytes)MongoClientversion   )ServerSideSessionServerSideSessionInterface)Defaultsc                   @   s   e Zd ZdS )MongoDBSessionN)__name__
__module____qualname__ r   r   P/var/www/html/venv/lib/python3.10/site-packages/flask_session/mongodb/mongodb.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ejejfdedee ded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 )MongoDBSessionInterfacea4  A Session interface that uses mongodb as session storage. (`pymongo` required)

    :param client: A ``pymongo.MongoClient`` 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.
    :param db: The database to use.
    :param collection: The collection to use.

    .. 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_formatdb
collectionc
           
         s~   |d u s	t |tstjdtdd t }|| _|| |	 | _tt	dd dk | _
| jjddd t |||||| d S )	NzoNo valid MongoClient instance provided, attempting to create a new instance on localhost with default settings.   )
stacklevel.r      
expiration)ZexpireAfterSeconds)
isinstancer   warningswarnRuntimeWarningr   storeintr   splituse_deprecated_methodZcreate_indexsuper__init__)
selfr   r   r   r   r   r   r   r   r   	__class__r   r   r+   +   s   z MongoDBSessionInterface.__init__store_idreturnc                 C   s0   | j d|i}|rt|d }| j|S d S )Nidval)r&   Zfind_oner   
serializerdecode)r,   r/   Zdocumentserialized_session_datar   r   r   _retrieve_session_dataK   s
   z.MongoDBSessionInterface._retrieve_session_dataNc                 C   s.   | j r| jd|i d S | jd|i d S )Nr1   )r)   r&   removeZ
delete_one)r,   r/   r   r   r   _delete_sessionS   s   z'MongoDBSessionInterface._delete_sessionsession_lifetimesessionc                 C   sb   t  | }| j|}| jr| jd|i|||dd d S | jd|id|||did d S )Nr1   )r1   r2   r!   Tz$set)r   utcnowr3   encoder)   r&   updateZ
update_one)r,   r9   r:   r/   Zstorage_expiration_datetimer5   r   r   r   _upsert_sessionY   s*   
z'MongoDBSessionInterface._upsert_session)r   r   r   __doc__r   Zsession_classttlr   ZSESSION_MONGODBZSESSION_KEY_PREFIXZSESSION_USE_SIGNERZSESSION_PERMANENTZSESSION_ID_LENGTHZSESSION_SERIALIZATION_FORMATZSESSION_MONGODB_DBZSESSION_MONGODB_COLLECTr   r   r   strboolr'   r+   dictr6   r8   	TimeDeltar
   r>   __classcell__r   r   r-   r   r      sT    	
 r   )r#   r   r   rD   typingr   Zflaskr   Zitsdangerousr   Zpymongor   r   baser
   r   defaultsr   r   r   r   r   r   r   <module>   s    