
    h                     ~    S SK r S SKJr  S SKJrJrJr  S SKJr  S SK	J
r
JrJrJr  S SKJr  S SKJr   " S S	\5      rg)
    N)sync_to_async)CreateErrorSessionBaseUpdateError)SuspiciousOperation)DatabaseErrorIntegrityErrorroutertransaction)timezone)cached_propertyc                      ^  \ rS rSrSrSU 4S jjr\S 5       r\S 5       r	S r
S rS rS	 rS
 rS rS rS rS rS rSS jrSS jrSS jrSS jr\S 5       r\S 5       rSrU =r$ )SessionStore   z#
Implement database session store.
c                 $   > [         TU ]  U5        g N)super__init__)selfsession_key	__class__s     U/var/www/html/env/lib/python3.13/site-packages/django/contrib/sessions/backends/db.pyr   SessionStore.__init__   s    %    c                     SSK Jn  U$ )Nr   )Session)django.contrib.sessions.modelsr   )clsr   s     r   get_model_classSessionStore.get_model_class   s     	;r   c                 "    U R                  5       $ r   )r   r   s    r   modelSessionStore.model   s    ##%%r   c                     U R                   R                  R                  U R                  [        R
                  " 5       S9$ ! U R                   R                  [        4 am  n[        U[        5      (       aG  [        R                  " SUR                  R                  -  5      nUR                  [        U5      5        S U l         S nAg S nAff = f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_db!SessionStore._get_session_from_db    s    	%::%%)) ,,hlln *   

'')<= 	%!011 **+?!++BVBV+VWs1v& $D		%s   A A  C#A#CCc                   #     U R                   R                  R                  U R                  [        R
                  " 5       S9I S h  vN $  N! U R                   R                  [        4 am  n[        U[        5      (       aG  [        R                  " SUR                  R                  -  5      nUR                  [        U5      5        S U l         S nAg S nAff = f7fr&   )r#   r(   agetr   r   r*   r+   r   r,   r-   r.   r   r/   r0   r1   r2   r3   s      r   _aget_session_from_db"SessionStore._aget_session_from_db+   s     	%++00 ,,hlln 1     

'')<= 	%!011 **+?!++BVBV+VWs1v& $D		%sB   CAA A	A CA  C/A#CCCCc                 j    U R                  5       nU(       a  U R                  UR                  5      $ 0 $ r   )r6   decodesession_datar   ss     r   loadSessionStore.load6   s*    %%'./t{{1>>*7R7r   c                    #    U R                  5       I S h  vN nU(       a  U R                  UR                  5      $ 0 $  N(7fr   )r:   r=   r>   r?   s     r   aloadSessionStore.aload:   s5     ,,.../t{{1>>*7R7 /s   A?)Ac                 d    U R                   R                  R                  US9R                  5       $ N)r   )r#   r(   filterexistsr   r   s     r   rI   SessionStore.exists>   s)    zz!!(([(AHHJJr   c                    #    U R                   R                  R                  US9R                  5       I S h  vN $  N7frG   )r#   r(   rH   aexistsrJ   s     r   rM   SessionStore.aexistsA   s2     ZZ''..;.GOOQQQQs   5><>c                      U R                  5       U l         U R                  SS9  SU l        g ! [         a     M;  f = fNT)must_create)_get_new_session_keyr2   saver   modifiedr"   s    r   createSessionStore.createD   sK     $ 9 9 ;D 		d	+ !DM	  s   / 
==c                    #     U R                  5       I S h  vN U l         U R                  SS9I S h  vN   SU l        g  N) N! [         a     MO  f = f7frP   )_aget_new_session_keyr2   asaver   rT   r"   s    r   acreateSessionStore.acreateQ   s_     &*&@&@&B BD jjTj222 !DM !C 3 sA   AA	AA AA 	AA 
AAAAc                 z    U R                  U R                  5       U R                  U5      U R                  5       S9$ )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   r>   expire_date)r#   _get_or_create_session_keyencodeget_expiry_dater   datas     r   create_model_instance"SessionStore.create_model_instance^   s>     zz779T*,,.  
 	
r   c                    #    U R                  U R                  5       I Sh  vN U R                  U5      U R                  5       I Sh  vN S9$  N- N7f)zSee create_model_instance().Nr]   )r#   _aget_or_create_session_keyr`   aget_expiry_daterb   s     r   acreate_model_instance#SessionStore.acreate_model_instancej   sK     zz">>@@T*"3355  
 	
@5s!   AA&AA	AAc                    U R                   c  U R                  5       $ U R                  US9nU R                  U5      n[        R
                  " U R                  US9n [        R                  " US9   UR                  X(       + US9  SSS5        g! , (       d  f       g= f! [         a    U(       a  [        ee [         a    U(       d  [        ee f = f)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_updaterq   )r   rU   _get_sessionrd   r
   db_for_writer#   r   atomicrS   r	   r   r   r   )r   rQ   rc   objrq   s        r   rS   SessionStore.saver   s     #;;=    5((.##DJJ=	##%0!,?RW   100  	!! 	!!	s*   B" 2BB" 
BB" B" "0Cc                   ^^^#    U R                   c  U R                  5       I Sh  vN $ U R                  TS9I Sh  vN nU R                  U5      I Sh  vN m[        R
                  " U R                  TS9m [        UUU4S j5       nU" 5       I Sh  vN   g Nu N` NI N! [         a    T(       a  [        ee [         a    T(       d  [        ee f = f7f)zSee save().Nrl   rn   c                     > [         R                  " TS9   TR                  T T (       + TS9  S S S 5        g ! , (       d  f       g = f)Nrp   rr   )r   rw   rS   )rQ   rx   rq   s   r   sync_transaction,SessionStore.asave.<locals>.sync_transaction   s9     ''e4HH%0)4_#   544s	   6
A)r   rZ   _aget_sessionri   r
   rv   r#   r   r	   r   r   r   )r   rQ   rc   r|   rx   rq   s    `  @@r   rY   SessionStore.asave   s     #'''''<<//55##DJJ=	   #$$$# (<5 % 	!! 	!!	s[   !CBCBCB #C;B$ B"B$ CC C"B$ $0CCc                     Uc  U R                   c  g U R                   n U R                  R                  R                  US9R	                  5         g ! U R                  R
                   a     g f = frG   )r   r#   r(   r)   deleter+   rJ   s     r   r   SessionStore.delete   sg    '**K	JJ""{";BBDzz&& 		s   1A A.-A.c                   #    Uc  U R                   c  g U R                   n U R                  R                  R                  US9I S h  vN nUR	                  5       I S h  vN   g  N N! U R                  R
                   a     g f = f7frG   )r   r#   r(   r9   adeleter+   )r   r   rx   s      r   r   SessionStore.adelete   s}     '**K	

**//K/HHC++- Izz&& 		sL   B	&A) A%A) A' A) $B	%A) 'A) )BB	BB	c                     U R                  5       R                  R                  [        R                  " 5       S9R                  5         g N)expire_date__lt)r   r(   rH   r   r*   r   r   s    r   clear_expiredSessionStore.clear_expired   s1    %%,,X\\^,LSSUr   c                    #    U R                  5       R                  R                  [        R                  " 5       S9R                  5       I S h  vN   g  N7fr   )r   r(   rH   r   r*   r   r   s    r   aclear_expiredSessionStore.aclear_expired   sA     !!#++22$LLN 3 

')	 	s   AAAA)r2   rT   r   )F)r/   
__module____qualname____firstlineno____doc__r   classmethodr   r   r#   r6   r:   rA   rD   rI   rM   rU   rZ   rd   ri   rS   rY   r   r   r   r   __static_attributes____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   