Ë
    ¹ûàg>B  ã                   óÞ   — d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ ej                   ej"                  z   Z G d	„ d
e«      Z G d„ de«      Z G d„ d«      Zy)é    N)ÚdatetimeÚ	timedelta)Úsync_to_async)Úsettings)Úsigning)Útimezone)Úget_random_string)Úimport_stringc                   ó   — e Zd ZdZy)ÚCreateErrorz‡
    Used internally as a consistent exception type to catch from save (see the
    docstring for SessionBase.save() for details).
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/contrib/sessions/backends/base.pyr   r      s   „ ñð
 	r   r   c                   ó   — e Zd ZdZy)ÚUpdateErrorzF
    Occurs if Django tries to update a session that was deleted.
    Nr   r   r   r   r   r      s   „ ñð 	r   r   c                   ó"  — e Zd ZdZdZdZ e«       ZdHd„Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zed„ «       ZdHd„ZdHd„Zefd„Zefd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(d%„ Z)d&„ Z*d'„ Z+d(„ Z,d)„ Z-d*„ Z.d+„ Z/d,„ Z0 ee/«      Z1 ee/e0«      Z2dId-„Z3dId.„Z4 ee3«      Z5d/„ Z6d0„ Z7d1„ Z8d2„ Z9d3„ Z:d4„ Z;d5„ Z<d6„ Z=d7„ Z>d8„ Z?d9„ Z@d:„ ZAd;„ ZBd<„ ZCd=„ ZDd>„ ZEd?„ ZFdId@„ZGdIdA„ZHdHdB„ZIdHdC„ZJdD„ ZKdE„ ZLeMdF„ «       ZNeMdG„ «       ZOy)JÚSessionBasez-
    Base class for all Session classes.
    Ú
testcookieÚworkedNc                 ój   — || _         d| _        d| _        t        t        j
                  «      | _        y )NF)Ú_session_keyÚaccessedÚmodifiedr
   r   ÚSESSION_SERIALIZERÚ
serializer©ÚselfÚsession_keys     r   Ú__init__zSessionBase.__init__-   s*   € Ø'ˆÔØˆŒØˆŒÜ'¬×(CÑ(CÓDˆ�r   c                 ó   — || j                   v S ©N©Ú_session©r"   Úkeys     r   Ú__contains__zSessionBase.__contains__3   ó   € Ø�d—m‘mÐ#Ð#r   c                 ó    — | j                   |   S r&   r'   r)   s     r   Ú__getitem__zSessionBase.__getitem__6   s   € Ø�}‰}˜SÑ!Ð!r   c                 ó0   — || j                   |<   d| _        y ©NT©r(   r   ©r"   r*   Úvalues      r   Ú__setitem__zSessionBase.__setitem__9   s   € Ø"ˆ�‰�cÑØˆ�r   c              ƒ   óT   K  — || j                  «       ƒ d {  –—† |<   d| _        y 7 Œ­wr0   )Ú_aget_sessionr   r2   s      r   ÚasetzSessionBase.aset=   s(   è ø€ Ø,1ˆt×!Ñ!Ó#×	# SÑ)Øˆ�ð 
$ús   ‚(—&˜(c                 ó,   — | j                   |= d| _        y r0   r1   r)   s     r   Ú__delitem__zSessionBase.__delitem__A   s   € Ø�M‰M˜#ÐØˆ�r   c                 ó4   — d| j                   j                  z   S )Nzdjango.contrib.sessions.)Ú	__class__r   ©r"   s    r   Úkey_saltzSessionBase.key_saltE   s   € à)¨D¯N©N×,GÑ,GÑGÐGr   c                 ó:   — | j                   j                  ||«      S r&   )r(   Úget©r"   r*   Údefaults      r   r?   zSessionBase.getI   s   € Ø�}‰}× Ñ   gÓ.Ð.r   c              ƒ   ó^   K  — | j                  «       ƒ d {  –—† j                  ||«      S 7 Œ­wr&   )r6   r?   r@   s      r   ÚagetzSessionBase.agetL   s(   è ø€ Ø×(Ñ(Ó*×*×/Ñ/°°WÓ=Ð=Ð*ús   ‚-–+—-c                 ó¤   — | j                   xs || j                  v | _         || j                  u rdn|f} | j                  j                  |g|¢­Ž S ©Nr   )r   r(   Ú_SessionBase__not_givenÚpop©r"   r*   rA   Úargss       r   rG   zSessionBase.popO   sM   € ØŸ™Ò=¨°·±Ð)=ˆŒØ × 0Ñ 0Ñ0‰r°w°jˆØ ˆt�}‰}× Ñ  Ð, tÒ,Ð,r   c              ƒ   óä   K  — | j                   xs || j                  «       ƒ d {  –—† v | _         || j                  u rdn|f} | j                  «       ƒ d {  –—† j                  |g|¢­Ž S 7 ŒF7 Œ­wrE   )r   r6   rF   rG   rH   s       r   ÚapopzSessionBase.apopT   sk   è ø€ ØŸ™ÒL¨°t×7IÑ7IÓ7K×1KÐ)LˆŒØ × 0Ñ 0Ñ0‰r°w°jˆØ/�d×(Ñ(Ó*×*×/Ñ/°Ð;°dÒ;Ð;ð 2Løà*ús!   ‚#A0¥A,¦1A0ÁA.ÁA0Á.A0c                 óJ   — || j                   v r| j                   |   S || |<   |S r&   r'   r2   s      r   Ú
setdefaultzSessionBase.setdefaultY   s+   € Ø�$—-‘-ÑØ—=‘= Ñ%Ð%àˆD�‰IØˆLr   c              ƒ   óŒ   K  — | j                  «       ƒ d {  –—† }||v r||   S | j                  ||«      ƒ d {  –—†  |S 7 Œ)7 Œ­wr&   )r6   r7   )r"   r*   r3   Úsessions       r   ÚasetdefaultzSessionBase.asetdefault`   sL   è ø€ Ø×*Ñ*Ó,×,ˆØ�'‰>Ø˜3‘<Ðà—)‘)˜C Ó'×'Ð'ØˆLð -øð (ús   ‚A–A —"A¹AºAÁAc                 ó6   — | j                   | | j                  <   y r&   )ÚTEST_COOKIE_VALUEÚTEST_COOKIE_NAMEr<   s    r   Úset_test_cookiezSessionBase.set_test_cookieh   s   € Ø&*×&<Ñ&<ˆˆT×"Ñ"Ò#r   c              ƒ   ól   K  — | j                  | j                  | j                  «      ƒ d {  –—†  y 7 Œ­wr&   )r7   rS   rR   r<   s    r   Úaset_test_cookiezSessionBase.aset_test_cookiek   s&   è ø€ Ø�i‰i˜×-Ñ-¨t×/EÑ/EÓF×FÒFús   ‚*4¬2­4c                 óR   — | j                  | j                  «      | j                  k(  S r&   )r?   rS   rR   r<   s    r   Útest_cookie_workedzSessionBase.test_cookie_workedn   s"   € Ø�x‰x˜×-Ñ-Ó.°$×2HÑ2HÑHÐHr   c              ƒ   ón   K  — | j                  | j                  «      ƒ d {  –—† | j                  k(  S 7 Œ­wr&   )rC   rS   rR   r<   s    r   Úatest_cookie_workedzSessionBase.atest_cookie_workedq   s,   è ø€ Ø—i‘i × 5Ñ 5Ó6×6¸4×;QÑ;QÑQÐQÐ6ús   ‚5¡3¢5c                 ó   — | | j                   = y r&   )rS   r<   s    r   Údelete_test_cookiezSessionBase.delete_test_cookiet   s   € Ø�×&Ñ&Ñ'r   c              ƒ   óV   K  — | j                  «       ƒ d {  –—† | j                  = y 7 Œ­wr&   )r6   rS   r<   s    r   Úadelete_test_cookiezSessionBase.adelete_test_cookiew   s#   è ø€ Ø×%Ñ%Ó'×'¨×)>Ñ)>Ñ?Ð'ús   ‚)–'—)c                 ó\   — t        j                  || j                  | j                  d¬«      S )zGReturn the given session dictionary serialized and encoded as a string.T)Úsaltr    Úcompress)r   Údumpsr=   r    )r"   Úsession_dicts     r   ÚencodezSessionBase.encodez   s'   € ä�}‰}ØØ—‘Ø—‘Øô	
ð 	
r   c                 óò   — 	 t        j                  || j                  | j                  ¬«      S # t         j                  $ r* t        j                  d«      }|j                  d«       Y i S t        $ r Y i S w xY w)N)r`   r    z!django.security.SuspiciousSessionzSession data corrupted)	r   Úloadsr=   r    ÚBadSignatureÚloggingÚ	getLoggerÚwarningÚ	Exception)r"   Úsession_dataÚloggers      r   ÚdecodezSessionBase.decodeƒ   sw   € ð
	Ü—=‘=Ø 4§=¡=¸T¿_¹_ôð øô ×#Ñ#ò 	5Ü×&Ñ&Ð'JÓKˆFØ�N‰NÐ3Õ4ð
 ˆ	ô	 ò 	ð Øˆ	ð		ús   ‚+. ®9A6Á*A6Á5A6c                 óH   — | j                   j                  |«       d| _        y r0   )r(   Úupdater   ©r"   Údict_s     r   rp   zSessionBase.update‘   s   € Ø�‰×Ñ˜UÔ#Øˆ�r   c              ƒ   ól   K  — | j                  «       ƒ d {  –—† j                  |«       d| _        y 7 Œ­wr0   )r6   rp   r   rq   s     r   ÚaupdatezSessionBase.aupdate•   s,   è ø€ Ø×!Ñ!Ó#×	#×+Ñ+¨EÔ2Øˆ�ð 
$ús   ‚4–2—4c                 ó   — || j                   v S r&   r'   r)   s     r   Úhas_keyzSessionBase.has_key™   r,   r   c              ƒ   óB   K  — || j                  «       ƒ d {  –—† v S 7 Œ­wr&   )r6   r)   s     r   Úahas_keyzSessionBase.ahas_keyœ   s    è ø€ Ø˜T×/Ñ/Ó1×1Ð2Ð2Ð1ús   ‚—˜c                 ó6   — | j                   j                  «       S r&   )r(   Úkeysr<   s    r   rz   zSessionBase.keysŸ   s   € Ø�}‰}×!Ñ!Ó#Ð#r   c              ƒ   óZ   K  — | j                  «       ƒ d {  –—† j                  «       S 7 Œ­wr&   )r6   rz   r<   s    r   ÚakeyszSessionBase.akeys¢   s$   è ø€ Ø×(Ñ(Ó*×*×0Ñ0Ó2Ð2Ð*úó   ‚+–)—+c                 ó6   — | j                   j                  «       S r&   )r(   Úvaluesr<   s    r   r   zSessionBase.values¥   s   € Ø�}‰}×#Ñ#Ó%Ð%r   c              ƒ   óZ   K  — | j                  «       ƒ d {  –—† j                  «       S 7 Œ­wr&   )r6   r   r<   s    r   ÚavalueszSessionBase.avalues¨   s$   è ø€ Ø×(Ñ(Ó*×*×2Ñ2Ó4Ð4Ð*úr}   c                 ó6   — | j                   j                  «       S r&   )r(   Úitemsr<   s    r   rƒ   zSessionBase.items«   s   € Ø�}‰}×"Ñ"Ó$Ð$r   c              ƒ   óZ   K  — | j                  «       ƒ d {  –—† j                  «       S 7 Œ­wr&   )r6   rƒ   r<   s    r   ÚaitemszSessionBase.aitems®   s$   è ø€ Ø×(Ñ(Ó*×*×1Ñ1Ó3Ð3Ð*úr}   c                 ó.   — i | _         d| _        d| _        y r0   )Ú_session_cacher   r   r<   s    r   ÚclearzSessionBase.clear±   s   € ð !ˆÔØˆŒØˆ�r   c                 óZ   — 	 | j                    xr | j                   S # t        $ r Y yw xY w)zBReturn True when there is no session_key and the session is empty.T)r   r‡   ÚAttributeErrorr<   s    r   Úis_emptyzSessionBase.is_empty¹   s6   € ð	Ø×(Ñ(Ð(ÒD°×1DÑ1DÐ-DÐDøÜò 	Ùð	ús   ‚ ž	*©*c                 óL   — 	 t        dt        «      }| j                  |«      s|S Œ$)z)Return session key that isn't being used.é    )r	   ÚVALID_KEY_CHARSÚexistsr!   s     r   Ú_get_new_session_keyz SessionBase._get_new_session_keyÀ   s(   € àÜ+¨B´Ó@ˆKØ—;‘;˜{Ô+Ø"Ð"ð r   c              ƒ   óh   K  — 	 t        dt        «      }| j                  |«      ƒ d {  –—† s|S Œ,7 Œ­w)Nr�   )r	   rŽ   Úaexistsr!   s     r   Ú_aget_new_session_keyz!SessionBase._aget_new_session_keyÇ   s5   è ø€ ØÜ+¨B´Ó@ˆKØŸ™ kÓ2×2Ð2Ø"Ð"ð à2ús   ‚&2¨0©2c                 ó\   — | j                   €| j                  «       | _         | j                   S r&   )r   r�   r<   s    r   Ú_get_or_create_session_keyz&SessionBase._get_or_create_session_keyÍ   s+   € Ø×ÑÐ$Ø $× 9Ñ 9Ó ;ˆDÔØ× Ñ Ð r   c              ƒ   óx   K  — | j                   €| j                  «       ƒ d {  –—† | _         | j                   S 7 Œ­wr&   )r   r“   r<   s    r   Ú_aget_or_create_session_keyz'SessionBase._aget_or_create_session_keyÒ   s8   è ø€ Ø×ÑÐ$Ø&*×&@Ñ&@Ó&B× BˆDÔØ× Ñ Ð ð !Cús   ‚ :¢8£:c                 ó&   — |xr t        |«      dk\  S )z”
        Key must be truthy and at least 8 characters long. 8 characters is an
        arbitrary lower bound for some minimal key security.
        é   )Úlenr)   s     r   Ú_validate_session_keyz!SessionBase._validate_session_key×   s   € ð
 Ò$”s˜3“x 1‘}Ð$r   c                 ó   — | j                   S r&   )Ú_SessionBase__session_keyr<   s    r   Ú_get_session_keyzSessionBase._get_session_keyÞ   s   € Ø×!Ñ!Ð!r   c                 óD   — | j                  |«      r|| _        yd| _        y)zV
        Validate session key on assignment. Invalid values will set to None.
        N)r›   r�   ©r"   r3   s     r   Ú_set_session_keyzSessionBase._set_session_keyá   s"   € ð ×%Ñ% eÔ,Ø!&ˆDÕà!%ˆDÕr   c                 ó´   — d| _         	 | j                  S # t        $ r9 | j                  �|ri | _        n| j	                  «       | _        Y | j                  S w xY w)zž
        Lazily load session from storage (unless "no_load" is True, when only
        an empty dict is stored) and store it in the current instance.
        T)r   r‡   rŠ   r#   Úload©r"   Úno_loads     r   Ú_get_sessionzSessionBase._get_sessioní   s\   € ð
 ˆŒð	2Ø×&Ñ&Ð&øÜò 	2Ø×ÑÐ'©7Ø&(�Õ#à&*§i¡i£k�Ô#øØ×"Ñ"Ð"ð	2ús   ‰ •4AÁAc              ƒ   óÎ   K  — d| _         	 | j                  S # t        $ rB | j                  �|ri | _        n| j	                  «       ƒ d {  –—†7  | _        Y | j                  S w xY w­wr0   )r   r‡   rŠ   r#   Úaloadr¤   s     r   r6   zSessionBase._aget_sessionü   sc   è ø€ ØˆŒð	9Ø×&Ñ&Ð&øÜò 	9Ø×ÑÐ'©7Ø&(�Õ#à,0¯J©J«L×&8Ð&8�Ô#øØ×"Ñ"Ð"ð	9üs1   ‚A%‹ –A%—2A"Á	AÁ

A"ÁA%Á!A"Á"A%c                 ó"   — t         j                  S r&   )r   ÚSESSION_COOKIE_AGEr<   s    r   Úget_session_cookie_agez"SessionBase.get_session_cookie_age	  s   € Ü×*Ñ*Ð*r   c                 ó€  — 	 |d   }	 |d   }|s| j	                  «       S t        |t        t        f«      s|S t        |t        «      rt        j                  |«      }||z
  }|j                  dz  |j                  z   S # t         $ r t        j                  «       }Y Œ•w xY w# t         $ r | j                  d«      }Y Œ¯w xY w)zÕGet the number of seconds until the session expires.

        Optionally, this function accepts `modification` and `expiry` keyword
        arguments specifying the modification and expiry of the session.
        ÚmodificationÚexpiryÚ_session_expiryé€Q )ÚKeyErrorr   Únowr?   r«   Ú
isinstancer   ÚstrÚfromisoformatÚdaysÚseconds©r"   Úkwargsr­   r®   Údeltas        r   Úget_expiry_agezSessionBase.get_expiry_age  s¾   € ð	*Ø! .Ñ1ˆLð	1Ø˜HÑ%ˆFñ Ø×.Ñ.Ó0Ð0Ü˜&¤8¬S /Ô2ØˆMÜ�fœcÔ"Ü×+Ñ+¨FÓ3ˆFØ˜Ñ%ˆØ�z‰z˜EÑ! E§M¡MÑ1Ð1øô# ò 	*Ü#Ÿ<™<›>ŠLð	*ûô ò 	1Ø—X‘XÐ/Ó0ŠFð	1ús"   ‚A= ˆB  Á=BÂBÂ B=Â<B=c              ‹   óš  K  — 	 |d   }	 |d   }|s| j	                  «       S t        |t        t        f«      s|S t        |t        «      rt        j                  |«      }||z
  }|j                  dz  |j                  z   S # t         $ r t        j                  «       }Y Œ•w xY w# t         $ r | j                  d«      ƒ d {  –—†7  }Y Œ¸w xY w­w)Nr­   r®   r¯   r°   )r±   r   r²   rC   r«   r³   r   r´   rµ   r¶   r·   r¸   s        r   Úaget_expiry_agezSessionBase.aget_expiry_age'  sÇ   è ø€ ð	*Ø! .Ñ1ˆLð	8Ø˜HÑ%ˆFñ Ø×.Ñ.Ó0Ð0Ü˜&¤8¬S /Ô2ØˆMÜ�fœcÔ"Ü×+Ñ+¨FÓ3ˆFØ˜Ñ%ˆØ�z‰z˜EÑ! E§M¡MÑ1Ð1øô ò 	*Ü#Ÿ<™<›>ŠLð	*ûô ò 	8ØŸ9™9Ð%6Ó7×7Ð7ŠFð	8üsQ   ‚C„A? ŠB" �A0CÁ?BÂCÂBÂCÂ"CÂ?CÃ CÃCÃCÃCc                 óT  — 	 |d   }	 |d   }t	        |t
        «      r|S t	        |t        «      rt        j                  |«      S |xs | j                  «       }|t        |¬«      z   S # t         $ r t        j                  «       }Y Œw xY w# t         $ r | j                  d«      }Y Œ™w xY w)zÔGet session the expiry date (as a datetime object).

        Optionally, this function accepts `modification` and `expiry` keyword
        arguments specifying the modification and expiry of the session.
        r­   r®   r¯   ©r·   )
r±   r   r²   r?   r³   r   r´   rµ   r«   r   ©r"   r¹   r­   r®   s       r   Úget_expiry_datezSessionBase.get_expiry_date:  sª   € ð	*Ø! .Ñ1ˆLð	1Ø˜HÑ%ˆFô �fœhÔ'ØˆMÜ˜¤Ô$Ü×)Ñ)¨&Ó1Ð1ØÒ8˜4×6Ñ6Ó8ˆØœi°Ô7Ñ7Ð7øô ò 	*Ü#Ÿ<™<›>ŠLð	*ûô
 ò 	1Ø—X‘XÐ/Ó0ŠFð	1ús"   ‚A' ˆB
 Á'BÂBÂ
B'Â&B'c              ‹   ón  K  — 	 |d   }	 |d   }t	        |t
        «      r|S t	        |t        «      rt        j                  |«      S |xs | j                  «       }|t        |¬«      z   S # t         $ r t        j                  «       }Y Œw xY w# t         $ r | j                  d«      ƒ d {  –—†7  }Y Œ¢w xY w­w)Nr­   r®   r¯   r¿   )
r±   r   r²   rC   r³   r   r´   rµ   r«   r   rÀ   s       r   Úaget_expiry_datezSessionBase.aget_expiry_dateQ  s³   è ø€ ð	*Ø! .Ñ1ˆLð	8Ø˜HÑ%ˆFô �fœhÔ'ØˆMÜ˜¤Ô$Ü×)Ñ)¨&Ó1Ð1ØÒ8˜4×6Ñ6Ó8ˆØœi°Ô7Ñ7Ð7øô ò 	*Ü#Ÿ<™<›>ŠLð	*ûô ò 	8ØŸ9™9Ð%6Ó7×7Ð7ŠFð	8üsQ   ‚B5„A) ŠB �AB5Á)B	ÂB5ÂB	Â	B5ÂB2Â)B,Â*B2Â/B5Â1B2Â2B5c                 óÈ   — |€	 | d= yt        |t        «      rt        j                  «       |z   }t        |t
        «      r|j                  «       }|| d<   y# t         $ r Y yw xY w)a*  
        Set a custom expiration for the session. ``value`` can be an integer,
        a Python ``datetime`` or ``timedelta`` object or ``None``.

        If ``value`` is an integer, the session will expire after that many
        seconds of inactivity. If set to ``0`` then the session will expire on
        browser close.

        If ``value`` is a ``datetime`` or ``timedelta`` object, the session
        will expire at that specific future time.

        If ``value`` is ``None``, the session uses the global session expiry
        policy.
        Nr¯   )r±   r³   r   r   r²   r   Ú	isoformatr    s     r   Ú
set_expiryzSessionBase.set_expiryb  sn   € ð ˆ=ðØÐ*Ð+ð Ü�eœYÔ'Ü—L‘L“N UÑ*ˆEÜ�eœXÔ&Ø—O‘OÓ%ˆEØ"'ˆÐÒøô ò ØØðús   „A Á	A!Á A!c              ƒ   ó.  K  — |€	 | j                  d«      ƒ d {  –—†  y t        |t        «      rt	        j
                  «       |z   }t        |t        «      r|j                  «       }| j                  d|«      ƒ d {  –—†  y 7 Œg# t        $ r Y y w xY w7 Œ­w)Nr¯   )	rK   r±   r³   r   r   r²   r   rÅ   r7   r    s     r   Úaset_expiryzSessionBase.aset_expiry~  sŒ   è ø€ Øˆ=ðØ—i‘iÐ 1Ó2×2Ð2ð Ü�eœYÔ'Ü—L‘L“N UÑ*ˆEÜ�eœXÔ&Ø—O‘OÓ%ˆEØ�i‰iÐ)¨5Ó1×1Ñ1ð 3ùÜò ØØðúð 	2úsD   ‚B†B šB›B ŸABÁ<BÁ=BÂB Â	BÂBÂBÂBc                 óR   — | j                  d«      x}€t        j                  S |dk(  S )a  
        Return ``True`` if the session is set to expire when the browser
        closes, and ``False`` if there's an expiry date. Use
        ``get_expiry_date()`` or ``get_expiry_age()`` to find the actual expiry
        date/age, if there is one.
        r¯   r   )r?   r   ÚSESSION_EXPIRE_AT_BROWSER_CLOSE©r"   r®   s     r   Úget_expire_at_browser_closez'SessionBase.get_expire_at_browser_closeŒ  s/   € ð —h‘hÐ0Ó1Ð1ˆFÐ:Ü×;Ñ;Ð;Ø˜‰{Ðr   c              ƒ   ón   K  — | j                  d«      ƒ d {  –—† x}€t        j                  S |dk(  S 7 Œ­w)Nr¯   r   )rC   r   rÊ   rË   s     r   Úaget_expire_at_browser_closez(SessionBase.aget_expire_at_browser_close—  s9   è ø€ Ø ŸI™IÐ&7Ó8×8Ð8ˆFÐAÜ×;Ñ;Ð;Ø˜‰{Ðð 9ús   ‚5—3˜5c                 óR   — | j                  «        | j                  «        d| _        y)zc
        Remove the current session data from the database and regenerate the
        key.
        N)rˆ   Údeleter   r<   s    r   ÚflushzSessionBase.flushœ  s   € ð
 	�
‰
ŒØ�‰ŒØ ˆÕr   c              ƒ   ón   K  — | j                  «        | j                  «       ƒ d {  –—†  d | _        y 7 Œ­wr&   )rˆ   Úadeleter   r<   s    r   ÚaflushzSessionBase.aflush¥  s+   è ø€ Ø�
‰
ŒØ�l‰l‹n×ÐØ ˆÕð 	ús   ‚$5¦3§5c                 óŠ   — | j                   }| j                  }| j                  «        || _        |r| j	                  |«       yy©zU
        Create a new session key, while retaining the current session data.
        N)r(   r#   Úcreater‡   rÐ   ©r"   Údatar*   s      r   Ú	cycle_keyzSessionBase.cycle_keyª  s=   € ð �}‰}ˆØ×ÑˆØ�‰ŒØ"ˆÔÙØ�K‰K˜Õð r   c              ƒ   óÖ   K  — | j                  «       ƒ d{  –—† }| j                  }| j                  «       ƒ d{  –—†  || _        |r| j	                  |«      ƒ d{  –—†  yy7 ŒL7 Œ*7 Œ
­wrÖ   )r6   r#   Úacreater‡   rÓ   rØ   s      r   Ú
acycle_keyzSessionBase.acycle_keyµ  sd   è ø€ ð ×'Ñ'Ó)×)ˆØ×ÑˆØ�l‰l‹n×ÐØ"ˆÔÙØ—,‘,˜sÓ#×#Ñ#ð ð	 *øàøð $ús1   ‚A)–A#—#A)ºA%»!A)ÁA'ÁA)Á%A)Á'A)c                 ó   — t        d«      ‚)zF
        Return True if the given session_key already exists.
        z9subclasses of SessionBase must provide an exists() method©ÚNotImplementedErrorr!   s     r   r�   zSessionBase.existsÂ  s   € ô "ØGó
ð 	
r   c              ƒ   óT   K  —  t        | j                  «      |«      ƒ d {  –—† S 7 Œ­wr&   )r   r�   r!   s     r   r’   zSessionBase.aexistsÊ  ó"   è ø€ Ø/”] 4§;¡;Ó/°Ó<×<Ð<Ð<úó   ‚(¡&¢(c                 ó   — t        d«      ‚)zÅ
        Create a new session instance. Guaranteed to create a new object with
        a unique key and will have saved the result once (with empty data)
        before the method returns.
        z8subclasses of SessionBase must provide a create() methodrß   r<   s    r   r×   zSessionBase.createÍ  s   € ô "ØFó
ð 	
r   c              ƒ   óR   K  —  t        | j                  «      «       ƒ d {  –—† S 7 Œ­wr&   )r   r×   r<   s    r   rÜ   zSessionBase.acreate×  s    è ø€ Ø/”] 4§;¡;Ó/Ó1×1Ð1Ð1úó   ‚' %¡'c                 ó   — t        d«      ‚)zä
        Save the session data. If 'must_create' is True, create a new session
        object (or raise CreateError). Otherwise, only update an existing
        object and don't create one (raise UpdateError if needed).
        z6subclasses of SessionBase must provide a save() methodrß   ©r"   Úmust_creates     r   ÚsavezSessionBase.saveÚ  s   € ô "ØDó
ð 	
r   c              ƒ   óT   K  —  t        | j                  «      |«      ƒ d {  –—† S 7 Œ­wr&   )r   rê   rè   s     r   ÚasavezSessionBase.asaveä  s"   è ø€ Ø-”] 4§9¡9Ó-¨kÓ:×:Ð:Ð:úrã   c                 ó   — t        d«      ‚)zx
        Delete the session data under this key. If the key is None, use the
        current session key value.
        z8subclasses of SessionBase must provide a delete() methodrß   r!   s     r   rÐ   zSessionBase.deleteç  s   € ô
 "ØFó
ð 	
r   c              ƒ   óT   K  —  t        | j                  «      |«      ƒ d {  –—† S 7 Œ­wr&   )r   rÐ   r!   s     r   rÓ   zSessionBase.adeleteð  râ   rã   c                 ó   — t        d«      ‚)z@
        Load the session data and return a dictionary.
        z6subclasses of SessionBase must provide a load() methodrß   r<   s    r   r£   zSessionBase.loadó  s   € ô "ØDó
ð 	
r   c              ƒ   óR   K  —  t        | j                  «      «       ƒ d {  –—† S 7 Œ­wr&   )r   r£   r<   s    r   r¨   zSessionBase.aloadû  s    è ø€ Ø-”] 4§9¡9Ó-Ó/×/Ð/Ð/úræ   c                 ó   — t        d«      ‚)a  
        Remove expired sessions from the session store.

        If this operation isn't possible on a given backend, it should raise
        NotImplementedError. If it isn't necessary, because the backend has
        a built-in expiration mechanism, it should be a no-op.
        z.This backend does not support clear_expired().rß   ©Úclss    r   Úclear_expiredzSessionBase.clear_expiredþ  s   € ô "Ð"RÓSÐSr   c              ƒ   óR   K  —  t        | j                  «      «       ƒ d {  –—† S 7 Œ­wr&   )r   rô   rò   s    r   Úaclear_expiredzSessionBase.aclear_expired	  s"   è ø€ à5”] 3×#4Ñ#4Ó5Ó7×7Ð7Ð7úræ   r&   )F)Pr   r   r   r   rS   rR   ÚobjectrF   r$   r+   r.   r4   r7   r9   Úpropertyr=   r?   rC   rG   rK   rM   rP   rT   rV   rX   rZ   r\   r^   rd   rn   rp   rt   rv   rx   rz   r|   r   r�   rƒ   r…   rˆ   r‹   r�   r“   r•   r—   r›   rž   r¡   r#   r   r¦   r6   r(   r«   r»   r½   rÁ   rÃ   rÆ   rÈ   rÌ   rÎ   rÑ   rÔ   rÚ   rÝ   r�   r’   r×   rÜ   rê   rì   rÐ   rÓ   r£   r¨   Úclassmethodrô   rö   r   r   r   r   r   #   sÒ  „ ñð $ÐØ Ðá“(€KóEò$ò"òòòð ñHó ðHó/ó>ð  +ó -ð
 '2ó <ò
òò=òGòIòRò(ò@ò
òòòò$ò3ò$ò3ò&ò5ò%ò4òòò#ò#ò!ò
!ò
%ò"ò&ñ Ð+Ó,€KÙÐ,Ð.>Ó?€Ló#ó	#ñ ˜Ó%€Hò+ò2ò62ò&8ò.8ò"(ò82ò	òò
!ò!ò
	ò	$ò
ò=ò
ò2ó
ó;ó
ó=ò
ò0ð ñTó ðTð ñ8ó ñ8r   r   )rh   Ústringr   r   Úasgiref.syncr   Údjango.confr   Údjango.corer   Údjango.utilsr   Údjango.utils.cryptor	   Údjango.utils.module_loadingr
   Úascii_lowercaseÚdigitsrŽ   rk   r   r   r   r   r   r   ú<module>r     sZ   ðÛ Û ß (å &å  Ý Ý !Ý 1Ý 5ð ×(Ñ(¨6¯=©=Ñ8€ô	�)ô 	ô	�)ô 	÷h8ò h8r   