§
    X˜¶f-  ã                   óâ   — d dl Z d dlmZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d	d
lmZ d	dlmZmZ d	dlmZ  G d„ de¦  «        Zdd„Z G d„ de¦  «        ZdS )é    N)Údatetime)Ú	timedelta)ÚAnyÚOptional)ÚFlask)Ú
SQLAlchemy)Ú
want_bytes)ÚColumnÚDateTimeÚIntegerÚLargeBinaryÚSequenceÚStringé   )Úretry_query)ÚServerSideSessionÚServerSideSessionInterface)ÚDefaultsc                   ó   — e Zd ZdS )ÚSqlAlchemySessionN)Ú__name__Ú
__module__Ú__qualname__© ó    úW/var/www/piapp/venv/lib/python3.11/site-packages/flask_session/sqlalchemy/sqlalchemy.pyr   r      s   € € € € € Ø€Dr   r   c                 ó>   ‡‡‡‡—  G ˆˆˆˆfd„d| j         ¦  «        }|S )Nc                   óæ   •— e Zd Z”Z”rd”ini Z” Z”r ee e”¦  «        d¬¦  «        n eed¬¦  «        Z	 e e
d¦  «        d¬¦  «        Z ee¦  «        Z ee¦  «        Zdededefd	„Zd
„ ZdS )ú%create_session_model.<locals>.SessionÚschemaT)Úprimary_keyéÿ   )ÚuniqueÚ
session_idÚdataÚexpiryc                 ó0   — || _         || _        || _        d S )N©r$   r%   r&   )Úselfr$   r%   r&   s       r   Ú__init__z.create_session_model.<locals>.Session.__init__#   s   € Ø(ˆDŒOØˆDŒIØ ˆDŒKˆKˆKr   c                 ó   — d| j         › d�S )Nz<Session data ú>)r%   ©r)   s    r   Ú__repr__z.create_session_model.<locals>.Session.__repr__(   s   € Ø0 D¤IÐ0Ð0Ð0Ð0r   N)r   r   r   Ú__tablename__Ú__table_args__Ú__bind_key__r
   r   r   Úidr   r$   r   r%   r   r&   Ústrr   r   r*   r.   )Úbind_keyr    ÚsequenceÚ
table_names   €€€€r   ÚSessionr      sè   ø€ € € € € Ø"ˆØ/5Ð=˜( FÐ+Ð+¸2ˆØˆð ð3ˆFˆF�7˜H˜H XÑ.Ô.¸DÐAÑAÔAÐAà�˜¨TÐ2Ñ2Ô2ð 	ð
 �V˜F˜F 3™KœK°Ð5Ñ5Ô5ˆ
Øˆv�kÑ"Ô"ˆØ�˜Ñ!Ô!ˆð	! sð 	!°#ð 	!¸xð 	!ð 	!ð 	!ð 	!ð
	1ð 	1ð 	1ð 	1ð 	1r   r7   )ÚModel)Údbr6   r    r4   r5   r7   s    ```` r   Úcreate_session_modelr:      sR   øøøø€ ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1�"”(ñ 1ô 1ð 1ð, €Nr   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        ej        ej        ej        fdee         dee         dedededed	ed
edee         dee         dee         dee         fˆ fd„Z e¦   «         dd„¦   «         Z e¦   «         dedee         fd„¦   «         Z e¦   «         deddfd„¦   «         Z e¦   «         dede deddfd„¦   «         Z!ˆ xZ"S )ÚSqlAlchemySessionInterfaceat  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Útabler5   r    r4   Úcleanup_n_requestsc           	      ó  •— || _         |�t          |t          ¦  «        s+t          j        dt
          d¬¦  «         t          |¦  «        }|| _        t          |||
||	¦  «        | _        | 	                    ¦   «         5  |r| j         
                    ||¬¦  «        }n| j        j        }| j        j                             |d¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          ¦   «                              |||||||¦  «         d S )NznNo valid SQLAlchemy instance provided, attempting to create a new instance on localhost with default settings.é   )Ú
stacklevel)ÚbindT)rI   Ú
checkfirst)r=   Ú
isinstancer   ÚwarningsÚwarnÚRuntimeWarningr>   r:   Úsql_session_modelÚapp_contextÚ
get_engineÚengineÚ	__table__ÚcreateÚsuperr*   )r)   r=   r>   r?   r@   rA   rB   rC   rD   r5   r    r4   rE   rR   Ú	__class__s                 €r   r*   z#SqlAlchemySessionInterface.__init__L   sy  ø€ ð ˆŒàˆ>¥¨FµJÑ!?Ô!?ˆ>ÝŒMð AÝØðñ ô ð õ
   ‘_”_ˆFØˆŒõ "6Ø�E˜6 8¨Xñ"
ô "
ˆÔð �_Š_ÑÔð 	Rð 	RØð ,Øœ×/Ò/°¸(Ð/ÑCÔC��àœÔ+�ØÔ"Ô,×3Ò3¸ÈDÐ3ÑQÔQÐQð	Rð 	Rð 	Rñ 	Rô 	Rð 	Rð 	Rð 	Rð 	Rð 	Rð 	Røøøð 	Rð 	Rð 	Rð 	Rõ 	‰Œ×ÒØØØØØØ Øñ	
ô 	
ð 	
ð 	
ð 	
s   Á>ACÃCÃCÚreturnNc                 ór  — 	 | j         j                             | j        ¦  «                             | j        j        t          j        ¦   «         k    ¦  «                             d¬¦  «         | j         j         	                    ¦   «          d S # t          $ r  | j         j                             ¦   «          ‚ w xY w)NF)Úsynchronize_session)r>   ÚsessionÚqueryrO   Úfilterr&   r   ÚutcnowÚdeleteÚcommitÚ	ExceptionÚrollbackr-   s    r   Ú_delete_expired_sessionsz3SqlAlchemySessionInterface._delete_expired_sessions|   sª   € ð	ØŒKÔ×%Ò% dÔ&<Ñ=Ô=×DÒDØÔ&Ô-µ´Ñ1BÔ1BÒBñô çŠf¨ˆfÑ/Ô/Ð/ØŒKÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝð 	ð 	ð 	ØŒKÔ×(Ò(Ñ*Ô*Ð*Øð	øøøs   ‚BB Â*B6Ústore_idc                 óð  — | j         j                             |¬¦  «                             ¦   «         }|r‘|j        �|j        t          j        ¦   «         k    rn	 | j        j         	                    |¦  «         | j        j         
                    ¦   «          n-# t          $ r  | j        j                             ¦   «          ‚ w xY wd }|r.t          |j        ¦  «        }| j                             |¦  «        S d S ©N©r$   )rO   r[   Ú	filter_byÚfirstr&   r   r]   r>   rZ   r^   r_   r`   ra   r	   r%   Ú
serializerÚdecode)r)   rc   ÚrecordÚserialized_session_datas       r   Ú_retrieve_session_dataz1SqlAlchemySessionInterface._retrieve_session_data‡   sú   € ð Ô'Ô-×7Ò7À8Ð7ÑLÔL×RÒRÑTÔTˆð ð 	�v”}Ð,°´ÅÄÑARÔARÒ0RÐ0RðØ”Ô#×*Ò*¨6Ñ2Ô2Ð2Ø”Ô#×*Ò*Ñ,Ô,Ð,Ð,øÝð ð ð Ø”Ô#×,Ò,Ñ.Ô.Ð.Øðøøøð ˆFàð 	CÝ&0°´Ñ&=Ô&=Ð#Ø”?×)Ò)Ð*AÑBÔBÐBØˆts   Á=B Â*Cc                 ó  — 	 | j         j                             |¬¦  «                             ¦   «          | j        j                             ¦   «          d S # t          $ r  | j        j                             ¦   «          ‚ w xY wre   )	rO   r[   rg   r^   r>   rZ   r_   r`   ra   )r)   rc   s     r   Ú_delete_sessionz*SqlAlchemySessionInterface._delete_session›   s‚   € ð	ØÔ"Ô(×2Ò2¸hÐ2ÑGÔG×NÒNÑPÔPÐPØŒKÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝð 	ð 	ð 	ØŒKÔ×(Ò(Ñ*Ô*Ð*Øð	øøøs   ‚AA Á*A>Úsession_lifetimerZ   c                 óò  — t          j        ¦   «         |z   }| j                             |¦  «        }	 | j        j                             |¬¦  «                             ¦   «         }|r||_        ||_	        n7|                      |||¬¦  «        }| j
        j                             |¦  «         | j
        j                             ¦   «          d S # t          $ r  | j
        j                             ¦   «          ‚ w xY w)Nrf   r(   )r   r]   ri   ÚencoderO   r[   rg   rh   r%   r&   r>   rZ   Úaddr_   r`   ra   )r)   rp   rZ   rc   Ústorage_expiration_datetimerl   rk   s          r   Ú_upsert_sessionz*SqlAlchemySessionInterface._upsert_session¤   s  € õ '/¤oÑ&7Ô&7Ð:JÑ&JÐ#ð #'¤/×"8Ò"8¸Ñ"AÔ"AÐð	ØÔ+Ô1×;Ò;ÀxÐ;ÑPÔP×VÒVÑXÔXˆFØð 	0Ø5�”Ø ;�”�à×/Ò/Ø'Ø0Ø6ð 0ñ ô �ð
 ”Ô#×'Ò'¨Ñ/Ô/Ð/ØŒKÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝð 	ð 	ð 	ØŒKÔ×(Ò(Ñ*Ô*Ð*Øð	øøøs   ²BC Ã*C6)rW   N)#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   r3   ÚboolÚintr*   r   rb   Údictrm   ro   Ú	TimeDeltar   ru   Ú__classcell__)rV   s   @r   r<   r<   .   s  ø€ € € € € ðð ð4 &€MØ
€Cð
 (0Ô'BØ"Ô5Ø#Ô6Ø"Ô4Ø"Ô4Ø$,Ô$IØÔ6Ø"*Ô"FØ (Ô BØ"*Ô"FØ,4Ô,Oð.
ð .
à�eŒ_ð.
ð ˜Ô$ð.
ð ð	.
ð
 ð.
ð ð.
ð ð.
ð "ð.
ð ð.
ð ˜3”-ð.
ð ˜”ð.
ð ˜3”-ð.
ð % SœMð.
ð .
ð .
ð .
ð .
ð .
ð` €[�]„]ðð ð ñ „]ðð €[�]„]ð¨sð °xÀ´~ð ð ð ñ „]ðð& €[�]„]ð¨ð °ð ð ð ñ „]ðð €[�]„]ðØ )ðØ4EðØQTðà	ðð ð ñ „]ðð ð ð ð r   r<   )NNN)rL   r   r   r‡   Útypingr   r   Úflaskr   Úflask_sqlalchemyr   Úitsdangerousr	   Ú
sqlalchemyr
   r   r   r   r   r   Ú_utilsr   Úbaser   r   Údefaultsr   r   r:   r<   r   r   r   ú<module>r‘      sj  ðØ €€€Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø #Ð #Ð #Ð #Ð #Ð #Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ Oà  Ð  Ð  Ð  Ð  Ð  Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	Ð)ñ 	ô 	ð 	ðð ð ð ð4Oð Oð Oð Oð OÐ!;ñ Oô Oð Oð Oð Or   