o
    <g4                     @   sR   d Z ddlZddlmZ ddlmZ ddlmZ dZ	e
dZG dd	 d	eZdS )
z#
Cached, database-backed sessions.
    N)settings)SessionStore)cachesz!django.contrib.sessions.cached_dbzdjango.contrib.sessionsc                       s   e Zd ZdZeZd fdd	Zedd Zdd Z	d	d
 Z
dd Z fddZ fddZd fdd	Zd fdd	Zd fdd	Zd fdd	Zdd Zdd Z  ZS ) r   z5
    Implement cached, database backed sessions.
    Nc                    s   t tj | _t | d S N)r   r   SESSION_CACHE_ALIAS_cachesuper__init__selfsession_key	__class__ ]/var/www/html/venv/lib/python3.10/site-packages/django/contrib/sessions/backends/cached_db.pyr	      s   zSessionStore.__init__c                 C   s   | j |   S r   )cache_key_prefix_get_or_create_session_keyr   r   r   r   	cache_key   s   zSessionStore.cache_keyc                    s   | j |  I d H  S r   )r   _aget_or_create_session_keyr   r   r   r   
acache_key   s   zSessionStore.acache_keyc                 C   sr   z	| j | j}W n ty   d }Y nw |d u r7|  }|r5| |j}| j | j|| j|j	d |S i }|S N)expiry)
r   getr   	Exception_get_session_from_dbdecodesession_datasetget_expiry_ageexpire_dater   datasr   r   r   load"   s   zSessionStore.loadc                    s   z| j |  I d H I d H }W n ty   d }Y nw |d u rL|  I d H }|rJ| |j}| j |  I d H || j|j	dI d H I d H  |S i }|S r   )
r   agetr   r   _aget_session_from_dbr   r   asetaget_expiry_ager    r!   r   r   r   aload5   s$    
zSessionStore.aloadc                    s    |r
| j | | jv pt |S r   )r   r   r   existsr
   r   r   r   r*   J   s
   
zSessionStore.existsc                    s(   |r| j | | jv pt |I d H S r   )r   r   r   aexistsr
   r   r   r   r+   Q   s   zSessionStore.aexistsFc                    sN   t  | z| j| j| j|   W d S  ty&   t	d| j Y d S w NzError saving to cache (%s))
r   saver   r   r   _sessionr   r   logger	exceptionr   must_creater   r   r   r-   X   s   zSessionStore.savec                    sj   t  |I d H  z| j|  I d H | j|  I d H I d H  W d S  ty4   t	d| j Y d S w r,   )
r   asaver   r'   r   r.   r(   r   r/   r0   r1   r   r   r   r3   _   s   zSessionStore.asavec                    s>   t  | |d u r| jd u rd S | j}| j| j|  d S r   )r   deleter   r   r   r
   r   r   r   r4   j   s   
zSessionStore.deletec                    sL   t  |I d H  |d u r| jd u rd S | j}| j| j| I d H  d S r   )r   adeleter   r   r   r
   r   r   r   r5   r   s   
zSessionStore.adeletec                 C   s   |    | | j d| _dS )zc
        Remove the current session data from the database and regenerate the
        key.
        N)clearr4   r   _session_keyr   r   r   r   flushz   s   
zSessionStore.flushc                    s&   |    | | jI dH  d| _dS )zSee flush().N)r6   r5   r   r7   r   r   r   r   aflush   s   
zSessionStore.aflushr   )F)__name__
__module____qualname____doc__
KEY_PREFIXr   r	   propertyr   r   r$   r)   r*   r+   r-   r3   r4   r5   r8   r9   __classcell__r   r   r   r   r      s"    
	r   )r=   loggingdjango.confr   #django.contrib.sessions.backends.dbr   DBStoredjango.core.cacher   r>   	getLoggerr/   r   r   r   r   <module>   s    
