
    di-                         S SK r S SKJr  S SKJr  S SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJrJrJrJr  S	S
KJr  S	SKJrJr  S	SKJr   " S S\5      rSS jr " S S\5      rg)    N)datetime)	timedelta)AnyOptional)Flask)
SQLAlchemy)
want_bytes)ColumnDateTimeIntegerLargeBinarySequenceString   )retry_query)ServerSideSessionServerSideSessionInterface)Defaultsc                       \ rS rSrSrg)SqlAlchemySession    N)__name__
__module____qualname____firstlineno____static_attributes__r       m/var/www/fortnox.synktek.com/backend/venv/lib/python3.13/site-packages/flask_session/sqlalchemy/sqlalchemy.pyr   r      s    r   r   c                 D   ^^^^  " UUUU4S jSU R                   5      nU$ )Nc                      > \ rS rSr Yr Y(       a  S Y0O0 r Y r Y(       a  \" \\	"  Y5      SS9O\" \SS9r
\" \" S5      SS9r\" \5      r\" \5      rS\S\S	\4S
 jrS rSrg)%create_session_model.<locals>.Session   schemaT)primary_key   )unique
session_iddataexpiryc                 (    Xl         X l        X0l        g )Nr(   r)   r*   )selfr(   r)   r*   s       r   __init__.create_session_model.<locals>.Session.__init__#   s    (OI Kr   c                 "    SU R                    S3$ )Nz<Session data >)r)   r-   s    r   __repr__.create_session_model.<locals>.Session.__repr__(   s    #DII;a00r   )r)   r*   r(   N)r   r   r   r   __tablename____table_args____bind_key__r
   r   r   idr   r(   r   r)   r   r*   strr   r   r.   r3   r   )bind_keyr$   sequence
table_names   r   Sessionr"      s    "/5(F+2  7HX.DAT2 	
 F3K5
k"!	!s 	!# 	!x 	!
	1r   r=   )Model)dbr<   r$   r:   r;   r=   s    ```` r   create_session_modelr@      s    1 1"(( 1, Nr   c                      ^  \ rS rSrSr\rSr\R                  \R                  \R                  \R                  \R                  \R                  \R                  \R                   \R"                  \R$                  \R&                  4S\\   S\\   S\S\S\S	\S
\S\S\\   S\\   S\\   S\\   4U 4S jjjr\" 5       SS j5       r\" 5       S\S\\   4S j5       r\" 5       S\SS4S j5       r\" 5       S\ S\!S\SS4S j5       r"Sr#U =r$$ )SqlAlchemySessionInterface.   a$  Uses the Flask-SQLAlchemy from a flask app as session storage.

:param app: A Flask app instance.
:param client: A Flask-SQLAlchemy 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 table: The table name you want to use.
:param sequence: The sequence to use for the primary key if needed.
:param schema: The db schema to use.
:param bind_key: The db bind key to use.
:param cleanup_n_requests: Delete expired sessions on average every N requests.

.. versionadded:: 0.7
    db changed to client to be standard on all session interfaces.
    The `cleanup_n_request` parameter was added.

.. versionadded:: 0.6
    The `sid_length`, `sequence`, `schema` and `bind_key` parameters were added.

.. versionadded:: 0.2
    The `use_signer` parameter was added.
Fappclient
key_prefix
use_signer	permanent
sid_lengthserialization_formattabler;   r$   r:   cleanup_n_requestsc           	        > Xl         Ub  [        U[        5      (       d%  [        R                  " S[
        SS9  [        U5      nX l        [        X(XU	5      U l        UR                  5          U(       a  U R                  R                  XS9nOU R                  R                  nU R                  R                  R                  USS9  S S S 5        [        TU ]=  UUUUUUU5        g ! , (       d  f       N$= f)NznNo valid SQLAlchemy instance provided, attempting to create a new instance on localhost with default settings.   )
stacklevel)bindT)rP   
checkfirst)rD   
isinstancer   warningswarnRuntimeWarningrE   r@   sql_session_modelapp_context
get_engineengine	__table__createsuperr.   )r-   rD   rE   rF   rG   rH   rI   rJ   rK   r;   r$   r:   rL   rY   	__class__s                 r   r.   #SqlAlchemySessionInterface.__init__L   s     >FJ!?!?MM A
  _F "66X"
 __///C++"",,33D3Q  	 	
 s   -AC''
C5returnNc                     U R                   R                  R                  U R                  5      R	                  U R                  R
                  [        R                  " 5       :*  5      R                  SS9  U R                   R                  R                  5         g ! [         a&    U R                   R                  R                  5         e f = f)NF)synchronize_session)rE   sessionqueryrV   filterr*   r   utcnowdeletecommit	Exceptionrollbackr2   s    r   _delete_expired_sessions3SqlAlchemySessionInterface._delete_expired_sessions|   s    	KK%%d&<&<=DD&&--1BBff/KK&&( 	KK((*	s   BB 0Cstore_idc                 @   U R                   R                  R                  US9R                  5       nU(       a|  UR                  b#  UR                  [
        R                  " 5       ::  aL   U R                  R                  R                  U5        U R                  R                  R                  5         S nU(       a0  [        UR                  5      nU R                  R!                  U5      $ g ! [         a&    U R                  R                  R                  5         e f = fNr(   )rV   rc   	filter_byfirstr*   r   re   rE   rb   rf   rg   rh   ri   r	   r)   
serializerdecode)r-   rl   recordserialized_session_datas       r   _retrieve_session_data1SqlAlchemySessionInterface._retrieve_session_data   s     ''--7787LRRT v}},AR0R##**62##**, F&0&=#??))*ABB  ##,,.s   *A	C- -0Dc                     U R                   R                  R                  US9R                  5         U R                  R
                  R                  5         g ! [         a&    U R                  R
                  R                  5         e f = frn   )	rV   rc   rp   rf   rE   rb   rg   rh   ri   )r-   rl   s     r   _delete_session*SqlAlchemySessionInterface._delete_session   sk    	""((22h2GNNPKK&&( 	KK((*	s   AA 0Bsession_lifetimerb   c                    [         R                  " 5       U-   nU R                  R                  U5      n U R                  R
                  R                  US9R                  5       nU(       a  XVl        XFl	        O6U R	                  UUUS9nU R                  R                  R                  U5        U R                  R                  R                  5         g ! [         a&    U R                  R                  R                  5         e f = f)Nro   r,   )r   re   rr   encoderV   rc   rp   rq   r)   r*   rE   rb   addrg   rh   ri   )r-   r{   rb   rl   storage_expiration_datetimeru   rt   s          r   _upsert_session*SqlAlchemySessionInterface._upsert_session   s     '/oo&7:J&J# #'//"8"8"A	++11;;x;PVVXF5 ;//'06 0 
 ##''/KK&&( 	KK((*	s   BC 0D)rD   rE   rV   )r_   N)%r   r   r   r   __doc__r   session_classttlr   SESSION_SQLALCHEMYSESSION_KEY_PREFIXSESSION_USE_SIGNERSESSION_PERMANENTSESSION_ID_LENGTHSESSION_SERIALIZATION_FORMATSESSION_SQLALCHEMY_TABLESESSION_SQLALCHEMY_SEQUENCESESSION_SQLALCHEMY_SCHEMASESSION_SQLALCHEMY_BIND_KEYSESSION_CLEANUP_N_REQUESTSr   r   r   r9   boolintr.   r   rj   dictrv   ry   	TimeDeltar   r   r   __classcell__)r]   s   @r   rB   rB   .   s   4 &M
C
 (0'B'B"55#66"44"44$,$I$I66"*"F"F ( B B"*"F"F,4,O,O.
e_.
 $.
 	.

 .
 .
 .
 ".
 .
 3-.
 .
 3-.
 %SM.
 .
` ]  ]s x~  & ]    ] )4EQT	 r   rB   )NNN)rS   r   r   r   typingr   r   flaskr   flask_sqlalchemyr   itsdangerousr	   
sqlalchemyr
   r   r   r   r   r   _utilsr   baser   r   defaultsr   r   r@   rB   r   r   r   <module>r      sJ      +    ' # O O   @ 	) 	4O!; Or   