
    Xf                         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e          Z G d de          ZdS )    N)datetime)	timedelta)Optional)Flask)
want_bytes)MongoClientversion   )ServerSideSessionServerSideSessionInterface)Defaultsc                       e Zd ZdS )MongoDBSessionN)__name__
__module____qualname__     Q/var/www/piapp/venv/lib/python3.11/site-packages/flask_session/mongodb/mongodb.pyr   r      s        Dr   r   c                       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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 )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
                    |t          |t                    s*t          j        dt          d           t                      }|| _        ||         |	         | _        t          t          j	        d          d                   dk     | _
        | j                            dd           t                                          ||||||           d S )	NzoNo valid MongoClient instance provided, attempting to create a new instance on localhost with default settings.   )
stacklevel.r      
expiration)expireAfterSeconds)
isinstancer   warningswarnRuntimeWarningr   storeintr	   splituse_deprecated_methodcreate_indexsuper__init__)selfr   r   r   r   r   r   r   r   r    	__class__s             r   r2   z MongoDBSessionInterface.__init__+   s     >FK!@!@>M B   
 !]]FBZ
+
%(s););A)>%?%?!%C" 	
CCCZJ@T	
 	
 	
 	
 	
r   store_idreturnc                     | j                             d|i          }|r/t          |d                   }| j                            |          S d S )Nidval)r,   find_oner   
serializerdecode)r3   r5   documentserialized_session_datas       r   _retrieve_session_dataz.MongoDBSessionInterface._retrieve_session_dataK   sS    :&&h'788 	C&0%&A&A#?))*ABBBtr   Nc                     | j         r| j                            d|i           d S | j                            d|i           d S )Nr8   )r/   r,   remove
delete_one)r3   r5   s     r   _delete_sessionz'MongoDBSessionInterface._delete_sessionS   sO    % 	4JtX./////J!!4"233333r   session_lifetimesessionc                    t          j                    |z   }| j                            |          }| j        r$| j                            d|i|||dd           d S | j                            d|id|||did           d S )Nr8   )r8   r9   r&   Tz$set)r   utcnowr;   encoder/   r,   update
update_one)r3   rD   rE   r5   storage_expiration_datetimer>   s         r   _upsert_sessionz'MongoDBSessionInterface._upsert_sessionY   s     '/o&7&7:J&J# #'/"8"8"A"A % 	Jx "2"= 
      J!!x &6&A  
 
 
 
 
r   )r   r   r   __doc__r   session_classttlr   SESSION_MONGODBSESSION_KEY_PREFIXSESSION_USE_SIGNERSESSION_PERMANENTSESSION_ID_LENGTHSESSION_SERIALIZATION_FORMATSESSION_MONGODB_DBSESSION_MONGODB_COLLECTr   r   r   strboolr-   r2   dictr?   rC   	TimeDeltar   rL   __classcell__)r4   s   @r   r   r      sd        * #M
C
 )1(@"5#6"4"4$,$I-":
 

 %
 	

 
 
 
 "
 
 
 
 
 
 
 
@s x~    4 4 4 4 4 4 )4EQT	       r   r   )r)   r   r   r[   typingr   flaskr   itsdangerousr   pymongor   r	   baser   r   defaultsr   r   r   r   r   r   <module>rc      s          + + + + + +             # # # # # # ( ( ( ( ( ( ( ( @ @ @ @ @ @ @ @      	 	 	 	 	& 	 	 	e e e e e8 e e e e er   