o
    [hB                     @   sD   d dl mZ d dlmZmZmZ d dlmZ dZG dd deZ	dS )    )settings)CreateErrorSessionBaseUpdateError)cacheszdjango.contrib.sessions.cachec                       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dd Zdd Zd#ddZd#ddZdd Zdd Zd"ddZd"ddZedd Zed d! Z  ZS )$SessionStorez&
    A cache-based session store.
    Nc                    s   t tj | _t | d S N)r   r   ZSESSION_CACHE_ALIAS_cachesuper__init__selfsession_key	__class__ /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/contrib/sessions/backends/cache.pyr      s   zSessionStore.__init__c                 C   s   | j |   S r   )cache_key_prefixZ_get_or_create_session_keyr   r   r   r   	cache_key   s   zSessionStore.cache_keyc                    s   | j |  I d H  S r   )r   Z_aget_or_create_session_keyr   r   r   r   
acache_key   s   zSessionStore.acache_keyc                 C   s@   z	| j | j}W n ty   d }Y nw |d ur|S d | _i S r   )r	   getr   	Exception_session_keyr   Zsession_datar   r   r   load   s   zSessionStore.loadc                    sP   z| j |  I d H I d H }W n ty   d }Y nw |d ur#|S d | _i S r   )r	   agetr   r   r   r   r   r   r   aload&   s    zSessionStore.aloadc              	   C   sN   t dD ]}|  | _z| jdd W n	 ty   Y qw d| _ d S tdNi'  T)must_createzOUnable to create a new session key. It is likely that the cache is unavailable.)rangeZ_get_new_session_keyr   saver   modifiedRuntimeErrorr   ir   r   r   create0   s   
zSessionStore.createc              	      s\   t dD ]$}|  I d H | _z| jddI d H  W n	 ty#   Y qw d| _ d S tdr   )r    Z_aget_new_session_keyr   asaver   r"   r#   r$   r   r   r   acreateC   s   zSessionStore.acreateFc                 C   sn   | j d u r	|  S |r| jj}n| j| jd ur| jj}nt|| j| j|d| 	 }|r3|s5t
d S d S N)Zno_load)r   r&   r	   addr   r   setr   Z_get_sessionZget_expiry_ager   r   r   funcresultr   r   r   r!   Q   s   



zSessionStore.savec                    s   | j d u r|  I d H S |r| jj}n| j|  I d H I d H d ur)| jj}nt||  I d H | j|dI d H | 	 I d H I d H }|rK|sMt
d S d S r)   )r   r(   r	   Zaaddr   r   Zasetr   Z_aget_sessionZaget_expiry_ager   r,   r   r   r   r'   b   s    

 

zSessionStore.asavec                 C   s   t |o| j| | jv S r   )boolr   r	   r   r   r   r   existss   s   zSessionStore.existsc                    s"   t |o| j| j| I d H S r   )r/   r	   Zahas_keyr   r   r   r   r   aexistsx   s   
zSessionStore.aexistsc                 C   s2   |d u r| j d u rd S | j }| j| j|  d S r   )r   r	   deleter   r   r   r   r   r2   }   s
   
zSessionStore.deletec                    s:   |d u r| j d u rd S | j }| j| j| I d H  d S r   )r   r	   adeleter   r   r   r   r   r3      s   
zSessionStore.adeletec                 C   s   d S r   r   clsr   r   r   clear_expired   s   zSessionStore.clear_expiredc                    s   d S r   r   r4   r   r   r   aclear_expired   s   zSessionStore.aclear_expiredr   )F)__name__
__module____qualname____doc__
KEY_PREFIXr   r   propertyr   r   r   r   r&   r(   r!   r'   r0   r1   r2   r3   classmethodr6   r7   __classcell__r   r   r   r   r      s*    






r   N)
Zdjango.confr   Z%django.contrib.sessions.backends.baser   r   r   Zdjango.core.cacher   r<   r   r   r   r   r   <module>   s
    