
     h                     z    d dl 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)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dZd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     b/var/www/surfInsights/venv3-11/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                 f    |                                  }|r|                     |j                  ni S r   )r/   decodesession_data)r   ss     r   loadzSessionStore.load)   s1    %%''./7t{{1>***R7r   c                 f    | j         j                            |                                          S N)r   )r   r"   filterexistsr   r   s     r   r8   zSessionStore.exists-   s*    z!(([(AAHHJJJr   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.create0   sg    
	 $ 9 9 ; ;D 		d	++++    !DMFs   3 
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   r2   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   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_updaterJ   )r   r?   _get_sessionrF   r	   db_for_writer   r
   atomicr=   r   r   r   r   )r   r;   rE   objrJ   s        r   r=   zSessionStore.saveI   sN    #;;==    55((..#DJ===	#%000  !,{?RW                       	 	 	 "!! 	 	 	 "!!	s0   #B, 8BB, B##B, &B#'B, ,(Cc                     || j         d S | j         }	 | j        j                            |                                           d S # | j        j        $ r Y d S w xY wr6   )r   r   r"   r#   deleter%   r9   s     r   rR   zSessionStore.deleteb   sx    '*K	J""{";;BBDDDDDz& 	 	 	DD	s   2A AAc                     |                                  j                            t          j                                                               d S )N)expire_date__lt)r   r"   r7   r   r$   rR   )r   s    r   clear_expiredzSessionStore.clear_expiredl   s@    %,,X\^^,LLSSUUUUUr   r   )F)r)   
__module____qualname____doc__r   classmethodr   r   r   r/   r4   r8   r?   rF   r=   rR   rU   __classcell__)r   s   @r   r   r   
   s        & & & & & &   [ & & _&	% 	% 	%8 8 8K K K  

 

 

   2    V V [V V V V Vr   r   )r'   %django.contrib.sessions.backends.baser   r   r   django.core.exceptionsr   	django.dbr   r   r	   r
   django.utilsr   django.utils.functionalr   r    r   r   <module>ra      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dV dV dV dV dV; dV dV dV dV dVr   