
    Evg                         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dS )
    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.
    Nc                 J    t                                          |           d S N)super__init__)selfsession_key	__class__s     `/var/www/pixelcanvas.ch/venv/lib/python3.11/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                 *    |                                  S r   )r   r   s    r   modelzSessionStore.model   s    ##%%%r   c                 x   	 | j         j                            | j        t	          j                              S # | j         j        t          f$ rj}t          |t                    rCt          j
        d|j        j        z            }|                    t          |                     d | _        Y d }~d S 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    	%:%)) ,hlnn *    
')<= 	% 	% 	%!011 ' *+?!+BV+VWWs1vv&&& $D		%s   69 B9AB44B9c                   K   	 | j         j                            | j        t	          j                               d {V S # | j         j        t          f$ rj}t          |t                    rCt          j
        d|j        j        z            }|                    t          |                     d | _        Y d }~d S d }~ww xY 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 ,hlnn 1          
')<= 	% 	% 	%!011 ' *+?!+BV+VWWs1vv&&& $D		%s   <A CAB<<Cc                 f    |                                  }|r|                     |j                  ni S r   )r2   decodesession_datar   ss     r   loadzSessionStore.load6   s1    %%''./7t{{1>***R7r   c                 v   K   |                                   d {V }|r|                     |j                  ni S r   )r5   r7   r8   r9   s     r   aloadzSessionStore.aload:   sG      ,,........./7t{{1>***R7r   c                 f    | j         j                            |                                          S N)r   )r    r$   filterexistsr   r   s     r   rA   zSessionStore.exists>   s*    z!(([(AAHHJJJr   c                 v   K   | j         j                            |                                           d {V S r?   )r    r$   r@   aexistsrB   s     r   rD   zSessionStore.aexistsA   s@      Z'..;.GGOOQQQQQQQQQr   c                     	 |                                  | _        	 |                     d           n# t          $ r Y >w xY wd| _        d S NT)must_create)_get_new_session_keyr.   saver   modifiedr   s    r   createzSessionStore.createD   sg    
	 $ 9 9 ; ;D 		d	++++    !DMFs   3 
A A c                    K   	 |                                   d {V | _        	 |                     d           d {V  n# t          $ r Y Jw xY wd| _        d S rF   )_aget_new_session_keyr.   asaver   rJ   r   s    r   acreatezSessionStore.acreateQ   s      
	&*&@&@&B&B B B B B B BD jjTj2222222222    !DMFs   A 
AAc                     |                      |                                 |                     |          |                                           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^   sL     zz7799T**,,..  
 
 	
r   c                    K   |                      |                                  d{V |                     |          |                                  d{V           S )zSee create_model_instance().NrQ   )r    _aget_or_create_session_keyrT   aget_expiry_daterV   s     r   acreate_model_instancez#SessionStore.acreate_model_instancej   sr      zz">>@@@@@@@@T**"3355555555  
 
 	
r   Fc                    | j         |                                 S |                     |          }|                     |          }t	          j        | j        |          }	 t          j        |          5  |	                    || |           ddd           dS # 1 swxY w Y   dS # 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   sN    #;;==    55((..#DJ===	#%000  !,{?RW                       	 	 	 "!! 	 	 	 "!!	s0   #B, 8BB, B##B, &B#'B, ,(Cc                   K   | j         |                                  d{V S |                                d{V }|                     |           d{V t	          j        | j                  	 t          fd            } |             d{V  dS # t          $ r rt           t          $ r st           w xY w)zSee save().Nr^   r`   c                      t          j                  5                                    d d d            d S # 1 swxY w Y   d S )Nrb   rd   )r   ri   rI   )rG   rj   rc   s   r   sync_transactionz,SessionStore.asave.<locals>.sync_transaction   s     'e444  HH%0)4_#                     s   >A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   sB     #''''''''''<<<<<<<<//55555555#DJ===	       ] #"$$$$$$$$$$$ 	 	 	 "!! 	 	 	 "!!	s   :$B   (Cc                     || j         d S | j         }	 | j        j                            |                                           d S # | j        j        $ r Y d S w xY wr?   )r   r    r$   r%   deleter'   rB   s     r   rp   zSessionStore.delete   sx    '*K	J""{";;BBDDDDDz& 	 	 	DD	s   2A AAc                    K   || j         d S | j         }	 | j        j                            |           d {V }|                                 d {V  d S # | j        j        $ r Y d S w xY wr?   )r   r    r$   r4   adeleter'   )r   r   rj   s      r   rr   zSessionStore.adelete   s      '*K	
*//K/HHHHHHHHC++--z& 	 	 	DD	s   A A A+*A+c                     |                                  j                            t          j                                                               d S N)expire_date__lt)r   r$   r@   r   r&   rp   r   s    r   clear_expiredzSessionStore.clear_expired   s@    %,,X\^^,LLSSUUUUUr   c                    K   |                                  j                            t          j                                                               d {V  d S rt   )r   r$   r@   r   r&   rr   rv   s    r   aclear_expiredzSessionStore.aclear_expired   sl      !!##+22$LNN 3 
 

'))	 	 	 	 	 	 	 	 	r   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 88 8 8K K KR R R    

 

 


 
 
   2   <   	 	 	 	 V 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 W W W W W W W W 6 6 6 6 6 6 H H H H H H H H H H H H ! ! ! ! ! ! 3 3 3 3 3 3z z z z z; z z z z zr   