
    ՟f                         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y)    N)datetime)	timedelta)Optional)Flask)
want_bytes)MongoClientversion   )ServerSideSessionServerSideSessionInterface)Defaultsc                       e Zd Zy)MongoDBSessionN)__name__
__module____qualname__     X/var/www/cvtools/html/venv/lib/python3.12/site-packages/flask_session/mongodb/mongodb.pyr   r      s    r   r   c                   F    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
                 R   |t        |t              s&t        j                  dt        d       t               }|| _        ||   |	   | _        t        t        j                  d      d         dk  | _
        | j                  j                  dd       t        
| 5  ||||||       y )	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!@MM B
 !]FBZ
+
%(s);A)>%?!%C" 	

CZJ@T	
r   store_idreturnc                     | j                   j                  d|i      }|r)t        |d         }| j                  j	                  |      S y )Nidval)r,   find_oner   
serializerdecode)r3   r5   documentserialized_session_datas       r   _retrieve_session_dataz.MongoDBSessionInterface._retrieve_session_dataK   sF    ::&&h'78&0%&A#??))*ABBr   Nc                     | j                   r| j                  j                  d|i       y | j                  j                  d|i       y )Nr8   )r/   r,   remove
delete_one)r3   r5   s     r   _delete_sessionz'MongoDBSessionInterface._delete_sessionS   s9    %%JJtX./JJ!!4"23r   session_lifetimesessionc                    t        j                         |z   }| j                  j                  |      }| j                  r$| j
                  j                  d|i|||dd       y | j
                  j                  d|id|||did       y )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     '/oo&7:J&J# #'//"8"8"A %%JJx "2"=
  JJ!!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      s   * #M
C
 )1(@(@"55#66"44"44$,$I$I--"::

 %
 	

 
 
 
 "
 
 
@s x~ 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8 er   