
    g                     ~    d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZ d dlmZ  G d d	e      Zy)
    N)sync_to_async)CreateErrorSessionBaseUpdateError)SuspiciousOperation)DatabaseErrorIntegrityErrorroutertransaction)timezone)cached_propertyc                        e Zd ZdZd fd	Zed        Zed        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd ZddZddZddZddZed        Zed        Z xZS )SessionStorez+
    Implement database session store.
    c                 $    t         |   |       y N)super__init__)selfsession_key	__class__s     {/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/sessions/backends/db.pyr   zSessionStore.__init__   s    %    c                     ddl m} |S )Nr   )Session)django.contrib.sessions.modelsr   )clsr   s     r   get_model_classzSessionStore.get_model_class   s     	;r   c                 "    | j                         S r   )r   r   s    r   modelzSessionStore.model   s    ##%%r   c                    	 | j                   j                  j                  | j                  t	        j
                               S # | j                   j                  t        f$ rg}t        |t              rFt        j                  d|j                  j                  z        }|j                  t        |             d | _        Y d }~y d }~ww xY wN)r   expire_date__gtzdjango.security.%s)r    objectsgetr   r   nowDoesNotExistr   
isinstancelogging	getLoggerr   __name__warningstr_session_keyr   eloggers      r   _get_session_from_dbz!SessionStore._get_session_from_db    s    	%::%%)) ,,hlln *   

'')<= 	%!01 **+?!++BVBV+VWs1v& $D		%s   AA C$ACCc                   K   	 | j                   j                  j                  | j                  t	        j
                                d {   S 7 # | j                   j                  t        f$ rg}t        |t              rFt        j                  d|j                  j                  z        }|j                  t        |             d | _        Y d }~y d }~ww xY wwr"   )r    r$   agetr   r   r&   r'   r   r(   r)   r*   r   r+   r,   r-   r.   r/   s      r   _aget_session_from_dbz"SessionStore._aget_session_from_db+   s     	%++00 ,,hlln 1     

'')<= 	%!01 **+?!++BVBV+VWs1v& $D		%sB   CAA 
AA CA C0ACCCCc                 `    | j                         }|r| j                  |j                        S i S r   )r2   decodesession_datar   ss     r   loadzSessionStore.load6   s*    %%'./t{{1>>*7R7r   c                 |   K   | j                          d {   }|r| j                  |j                        S i S 7 #wr   )r5   r7   r8   r9   s     r   aloadzSessionStore.aload:   s6     ,,.../t{{1>>*7R7 /s   <:$<c                 j    | j                   j                  j                  |      j                         S N)r   )r    r$   filterexistsr   r   s     r   rA   zSessionStore.exists>   s)    zz!!(([(AHHJJr   c                    K   | j                   j                  j                  |      j                          d {   S 7 wr?   )r    r$   r@   aexistsrB   s     r   rD   zSessionStore.aexistsA   s3     ZZ''..;.GOOQQQQs   8A?Ac                     	 | j                         | _        	 | j                  d       d| _        y # t        $ r Y <w xY wNT)must_create)_get_new_session_keyr.   saver   modifiedr   s    r   createzSessionStore.createD   sK     $ 9 9 ;D 		d	+ !DM	  s   2 	>>c                    K   	 | j                          d {   | _        	 | j                  d       d {    d| _        y 7 ,7 # t        $ r Y Pw xY wwrF   )_aget_new_session_keyr.   asaver   rJ   r   s    r   acreatezSessionStore.acreateQ   sa     &*&@&@&B BD jjTj222 !DM !C 3 sA   AA	AA AA 	AA 	AAAAc                     | j                  | j                         | j                  |      | j                               S )z
        Return a new instance of the session model object, which represents the
        current session state. Intended to be used for saving the session data
        to the database.
        r   r8   expire_date)r    _get_or_create_session_keyencodeget_expiry_dater   datas     r   create_model_instancez"SessionStore.create_model_instance^   s>     zz779T*,,.  
 	
r   c                    K   | j                  | j                          d{   | j                  |      | j                          d{         S 7 07 w)zSee create_model_instance().NrQ   )r    _aget_or_create_session_keyrT   aget_expiry_daterV   s     r   acreate_model_instancez#SessionStore.acreate_model_instancej   sM     zz">>@@T*"3355  
 	
@5s!   AA&AA	
AAc                    | j                   | j                         S | j                  |      }| j                  |      }t	        j
                  | j                  |      }	 t        j                  |      5  |j                  || |       ddd       y# 1 sw Y   yxY w# t        $ r
 |rt         t        $ r
 |st         w xY w)z
        Save the current session data to the database. If 'must_create' is
        True, raise a database error if the saving operation doesn't create a
        new entry (as opposed to possibly updating an existing entry).
        Nno_loadinstanceusingforce_insertforce_updaterc   )r   rK   _get_sessionrX   r
   db_for_writer    r   atomicrI   r	   r   r   r   )r   rG   rW   objrc   s        r   rI   zSessionStore.saver   s     #;;=    5((.##DJJ=	##%0!,{?RW   100  	!! 	!!	s*   "B# 8BB# B B#  B# #$Cc                   K   | j                   | j                          d{   S | j                         d{   }| j                  |       d{   t	        j
                  | j                        	 t        fd       } |        d{    y7 y7 a7 J7 # t        $ r
 rt         t        $ r
 st         w xY ww)zSee save().Nr^   r`   c                      t        j                        5  j                            d d d        y # 1 sw Y   y xY w)Nrb   rd   )r   ri   rI   )rG   rj   rc   s   r   sync_transactionz,SessionStore.asave.<locals>.sync_transaction   s9     ''e4HH%0)4_#   544s	   7A )r   rO   _aget_sessionr\   r
   rh   r    r   r	   r   r   r   )r   rG   rW   rm   rj   rc   s    `  @@r   rN   zSessionStore.asave   s     #'''''<<//55##DJJ=	   #$$$# (<5 % 	!! 	!!	s\    CBCB! CB#%C?B' B%B' C!C#C%B' '$CCc                     || j                   y | j                   }	 | j                  j                  j                  |      j	                          y # | j                  j
                  $ r Y y w xY wr?   )r   r    r$   r%   deleter'   rB   s     r   rp   zSessionStore.delete   sg    '**K	JJ""{";BBDzz&& 		s   4A A.-A.c                   K   || j                   y | j                   }	 | j                  j                  j                  |       d {   }|j	                          d {    y 7 7 # | j                  j
                  $ r Y y w xY wwr?   )r   r    r$   r4   adeleter'   )r   r   rj   s      r   rr   zSessionStore.adelete   s     '**K	

**//K/HHC++- Izz&& 		sL   B	)A* A&	A*  A(!A* %B	&A* (A* *BB	BB	c                     | j                         j                  j                  t        j                               j                          y N)expire_date__lt)r   r$   r@   r   r&   rp   r   s    r   clear_expiredzSessionStore.clear_expired   s1    %%,,X\\^,LSSUr   c                    K   | j                         j                  j                  t        j                               j                          d {    y 7 wrt   )r   r$   r@   r   r&   rr   rv   s    r   aclear_expiredzSessionStore.aclear_expired   sB     !!#++22$LLN 3 

')	 	s   AAAAr   )F)r+   
__module____qualname____doc__r   classmethodr   r   r    r2   r5   r;   r=   rA   rD   rK   rO   rX   r\   rI   rN   rp   rr   rw   ry   __classcell__)r   s   @r   r   r      s    &   & &	%	%88KR


2<	 V V  r   r   )r)   asgiref.syncr   %django.contrib.sessions.backends.baser   r   r   django.core.exceptionsr   	django.dbr   r	   r
   r   django.utilsr   django.utils.functionalr   r    r   r   <module>r      s.     & W W 6 H H ! 3z; zr   