§
    ¤”jà-  ã                   óÒ   — 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 ej        ej        z   Z G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ d¦  «        ZdS )é    N)ÚdatetimeÚ	timedelta)Úsettings)Úsigning)Útimezone)Úget_random_string)Úimport_stringc                   ó   — e Zd ZdZdS )Ú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__© ó    út/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/django/contrib/sessions/backends/base.pyr   r      s   € € € € € ðð ð
 	€Dr   r   c                   ó   — e Zd ZdZdS )ÚUpdateErrorzF
    Occurs if Django tries to update a session that was deleted.
    Nr   r   r   r   r   r      s   € € € € € ðð ð 	€Dr   r   c                   ó�  — e Zd ZdZdZdZ e¦   «         Zd.d„Zd„ Z	d„ Z
d„ Zd	„ Zed
„ ¦   «         Zd.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" ee!¦  «        Z# ee!e"¦  «        Z$d/d „Z% ee%¦  «        Z&d!„ Z'd"„ Z(d#„ Z)d$„ Z*d%„ Z+d&„ Z,d'„ Z-d(„ Z.d)„ Z/d/d*„Z0d.d+„Z1d,„ Z2e3d-„ ¦   «         Z4dS )0ÚSessionBasez-
    Base class for all Session classes.
    Ú
testcookieÚworkedNc                 ól   — || _         d| _        d| _        t          t          j        ¦  «        | _        d S )NF)Ú_session_keyÚaccessedÚmodifiedr	   r   ÚSESSION_SERIALIZERÚ
serializer©ÚselfÚsession_keys     r   Ú__init__zSessionBase.__init__+   s.   € Ø'ˆÔØˆŒØˆŒÝ'­Ô(CÑDÔDˆŒˆˆr   c                 ó   — || j         v S ©N©Ú_session©r!   Úkeys     r   Ú__contains__zSessionBase.__contains__1   ó   € Ø�d”mÐ#Ð#r   c                 ó   — | j         |         S r%   r&   r(   s     r   Ú__getitem__zSessionBase.__getitem__4   s   € ØŒ}˜SÔ!Ð!r   c                 ó(   — || j         |<   d| _        d S ©NT©r'   r   ©r!   r)   Úvalues      r   Ú__setitem__zSessionBase.__setitem__7   s   € Ø"ˆŒ�cÑØˆŒˆˆr   c                 ó$   — | j         |= d| _        d S r/   r0   r(   s     r   Ú__delitem__zSessionBase.__delitem__;   s   € ØŒM˜#ÐØˆŒˆˆr   c                 ó    — d| j         j        z   S )Nzdjango.contrib.sessions.)Ú	__class__r   ©r!   s    r   Úkey_saltzSessionBase.key_salt?   s   € à)¨D¬NÔ,GÑGÐGr   c                 ó8   — | j                              ||¦  «        S r%   )r'   Úget)r!   r)   Údefaults      r   r;   zSessionBase.getC   s   € ØŒ}× Ò   gÑ.Ô.Ð.r   c                 ón   — | j         p|| j        v | _         || j        u rdn|f} | j        j        |g|¢R Ž S )Nr   )r   r'   Ú_SessionBase__not_givenÚpop)r!   r)   r<   Úargss       r   r?   zSessionBase.popF   sL   € ØœÐ=¨°´Ð)=ˆŒØ Ô 0Ð0Ð0ˆrˆr°w°jˆØ ˆtŒ}Ô  Ð, tÐ,Ð,Ð,Ð,r   c                 óT   — || j         v r| j         |         S d| _        || j         |<   |S r/   r0   r1   s      r   Ú
setdefaultzSessionBase.setdefaultK   s4   € Ø�$”-ÐÐØ”= Ô%Ð%à ˆDŒMØ!&ˆDŒM˜#ÑØˆLr   c                 ó$   — | j         | | j        <   d S r%   )ÚTEST_COOKIE_VALUEÚTEST_COOKIE_NAMEr8   s    r   Úset_test_cookiezSessionBase.set_test_cookieS   s   € Ø&*Ô&<ˆˆTÔ"Ñ#Ð#Ð#r   c                 óH   — |                       | j        ¦  «        | j        k    S r%   )r;   rE   rD   r8   s    r   Útest_cookie_workedzSessionBase.test_cookie_workedV   s   € Ø�xŠx˜Ô-Ñ.Ô.°$Ô2HÒHÐHr   c                 ó   — | | j         = d S r%   )rE   r8   s    r   Údelete_test_cookiezSessionBase.delete_test_cookieY   s   € Ø�Ô&Ð'Ð'Ð'r   c                 óF   — t          j        || j        | j        d¬¦  «        S )zGReturn the given session dictionary serialized and encoded as a string.T)Úsaltr   Úcompress)r   Údumpsr9   r   )r!   Úsession_dicts     r   ÚencodezSessionBase.encode\   s+   € åŒ}ØØ”Ø”Øð	
ñ 
ô 
ð 	
r   c                 óÜ   — 	 t          j        || j        | j        ¬¦  «        S # t           j        $ r, t          j        d¦  «        }|                     d¦  «         Y nt          $ r Y nw xY wi S )N)rL   r   z!django.security.SuspiciousSessionzSession data corrupted)	r   Úloadsr9   r   ÚBadSignatureÚloggingÚ	getLoggerÚwarningÚ	Exception)r!   Úsession_dataÚloggers      r   ÚdecodezSessionBase.decodee   s•   € ð
	Ý”=Ø 4¤=¸T¼_ðñ ô ð øõ Ô#ð 	5ð 	5ð 	5ÝÔ&Ð'JÑKÔKˆFØ�NŠNÐ3Ñ4Ô4Ð4Ð4Ð4Ýð 	ð 	ð 	ð ˆDð	øøøð ˆ	s   ‚ # £8A)Á	A)Á(A)c                 óH   — | j                              |¦  «         d| _        d S r/   )r'   Úupdater   )r!   Údict_s     r   r\   zSessionBase.updates   s#   € ØŒ×Ò˜UÑ#Ô#Ð#ØˆŒˆˆr   c                 ó   — || j         v S r%   r&   r(   s     r   Úhas_keyzSessionBase.has_keyw   r+   r   c                 ó4   — | j                              ¦   «         S r%   )r'   Úkeysr8   s    r   ra   zSessionBase.keysz   s   € ØŒ}×!Ò!Ñ#Ô#Ð#r   c                 ó4   — | j                              ¦   «         S r%   )r'   Úvaluesr8   s    r   rc   zSessionBase.values}   s   € ØŒ}×#Ò#Ñ%Ô%Ð%r   c                 ó4   — | j                              ¦   «         S r%   )r'   Úitemsr8   s    r   re   zSessionBase.items€   s   € ØŒ}×"Ò"Ñ$Ô$Ð$r   c                 ó0   — i | _         d| _        d| _        d S r/   )Ú_session_cacher   r   r8   s    r   ÚclearzSessionBase.clearƒ   s   € ð !ˆÔØˆŒØˆŒˆˆr   c                 óF   — 	 | j          o| j         S # t          $ r Y dS w xY w)zBReturn True when there is no session_key and the session is empty.T)r   rg   ÚAttributeErrorr8   s    r   Úis_emptyzSessionBase.is_empty‹   s@   € ð	ØÔ(Ð(ÐD°Ô1DÐ-DÐDøÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚ ’
 Ÿ c                 ó^   — 	 t          dt          ¦  «        }|                      |¦  «        s|S Œ-)z)Return session key that isn't being used.Té    )r   ÚVALID_KEY_CHARSÚexistsr    s     r   Ú_get_new_session_keyz SessionBase._get_new_session_key’   s5   € ð	#Ý+¨BµÑ@Ô@ˆKØ—;’;˜{Ñ+Ô+ð #Ø"Ð"ð	#r   c                 óP   — | j         €|                      ¦   «         | _         | j         S r%   )r   rp   r8   s    r   Ú_get_or_create_session_keyz&SessionBase._get_or_create_session_key™   s(   € ØÔÐ$Ø $× 9Ò 9Ñ ;Ô ;ˆDÔØÔ Ð r   c                 ó,   — |o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”x 1’}Ð$r   c                 ó   — | j         S r%   )Ú_SessionBase__session_keyr8   s    r   Ú_get_session_keyzSessionBase._get_session_key¥   s   € ØÔ!Ð!r   c                 óP   — |                       |¦  «        r	|| _        dS d| _        dS )zV
        Validate session key on assignment. Invalid values will set to None.
        N)rv   rx   ©r!   r2   s     r   Ú_set_session_keyzSessionBase._set_session_key¨   s6   € ð ×%Ò% eÑ,Ô,ð 	&Ø!&ˆDÔÐÐà!%ˆDÔÐÐr   Fc                 ó¢   — d| _         	 | j        S # t          $ r- | j        �|ri | _        n|                      ¦   «         | _        Y nw xY w| j        S )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   rg   rj   r"   Úload)r!   Úno_loads     r   Ú_get_sessionzSessionBase._get_session´   sj   € ð
 ˆŒð	2ØÔ&Ð&øÝð 	2ð 	2ð 	2ØÔÐ'¨7Ð'Ø&(�Ô#Ð#à&*§i¢i¡k¤k�Ô#øøð		2øøøð
 Ô"Ð"s   ‰ �4AÁAc                 ó   — t           j        S r%   )r   ÚSESSION_COOKIE_AGEr8   s    r   Úget_session_cookie_agez"SessionBase.get_session_cookie_ageÅ   s   € ÝÔ*Ð*r   c                 ó¢  — 	 |d         }n## t           $ r t          j        ¦   «         }Y nw xY w	 |d         }n%# t           $ r |                      d¦  «        }Y nw xY w|s|                      ¦   «         S t          |t          t          f¦  «        s|S t          |t          ¦  «        rt          j        |¦  «        }||z
  }|j	        dz  |j
        z   S )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_expiryi€Q )ÚKeyErrorr   Únowr;   rƒ   Ú
isinstancer   ÚstrÚfromisoformatÚdaysÚseconds)r!   Úkwargsr…   r†   Údeltas        r   Úget_expiry_agezSessionBase.get_expiry_ageÈ   sö   € ð	*Ø! .Ô1ˆLˆLøÝð 	*ð 	*ð 	*Ý#œ<™>œ>ˆLˆLˆLð	*øøøð
	1Ø˜HÔ%ˆFˆFøÝð 	1ð 	1ð 	1Ø—X’XÐ/Ñ0Ô0ˆFˆFˆFð	1øøøð ð 	1Ø×.Ò.Ñ0Ô0Ð0Ý˜&¥8­S /Ñ2Ô2ð 	ØˆMÝ�f�cÑ"Ô"ð 	4ÝÔ+¨FÑ3Ô3ˆFØ˜Ñ%ˆØŒz˜EÑ! E¤MÑ1Ð1ó   ‚ ‹+ª+¯8 ¸AÁAc                 óŒ  — 	 |d         }n## t           $ r t          j        ¦   «         }Y nw xY w	 |d         }n%# t           $ r |                      d¦  «        }Y nw xY wt	          |t
          ¦  «        r|S t	          |t          ¦  «        rt          j        |¦  «        S |p|                      ¦   «         }|t          |¬¦  «        z   S )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ˆLøÝð 	*ð 	*ð 	*Ý#œ<™>œ>ˆLˆLˆLð	*øøøð	1Ø˜HÔ%ˆFˆFøÝð 	1ð 	1ð 	1Ø—X’XÐ/Ñ0Ô0ˆFˆFˆFð	1øøøõ �f�hÑ'Ô'ð 	2ØˆMÝ˜¥Ñ$Ô$ð 	2ÝÔ)¨&Ñ1Ô1Ð1ØÐ8˜4×6Ò6Ñ8Ô8ˆØ�i°Ð7Ñ7Ô7Ñ7Ð7r’   c                 óê   — |€	 | d= n# t           $ r Y nw xY wdS t          |t          ¦  «        rt          j        ¦   «         |z   }t          |t
          ¦  «        r|                     ¦   «         }|| d<   dS )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_expiryú   s“   € ð ˆ=ðØÐ*Ð+Ð+øÝð ð ð Ø�ðøøøàˆFÝ�e�YÑ'Ô'ð 	+Ý”L‘N”N UÑ*ˆEÝ�e�XÑ&Ô&ð 	&Ø—O’OÑ%Ô%ˆEØ"'ˆÐÑÐÐs   „ ˆ
”c                 óT   — |                       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‡   Nr   )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Ð1ˆFÐ:ÝÔ;Ð;Ø˜Š{Ðr   c                 ód   — |                       ¦   «          |                      ¦   «          d| _        dS )zc
        Remove the current session data from the database and regenerate the
        key.
        N)rh   Údeleter   r8   s    r   ÚflushzSessionBase.flush!  s,   € ð
 	�
Š
‰ŒˆØ�Š‰ŒˆØ ˆÔÐÐr   c                 óŠ   — | j         }| j        }|                      ¦   «          || _        |r|                      |¦  «         dS dS )zU
        Create a new session key, while retaining the current session data.
        N)r'   r"   Úcreaterg   rœ   )r!   Údatar)   s      r   Ú	cycle_keyzSessionBase.cycle_key*  sR   € ð Œ}ˆØÔˆØ�Š‰ŒˆØ"ˆÔØð 	Ø�KŠK˜ÑÔÐÐÐð	ð 	r   c                 ó    — t          d¦  «        ‚)zF
        Return True if the given session_key already exists.
        z9subclasses of SessionBase must provide an exists() method©ÚNotImplementedErrorr    s     r   ro   zSessionBase.exists7  s   € õ "ØGñ
ô 
ð 	
r   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£   r8   s    r   rŸ   zSessionBase.create?  s   € õ "ØFñ
ô 
ð 	
r   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.saveI  s   € õ "ØDñ
ô 
ð 	
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.deleteS  s   € õ
 "ØFñ
ô 
ð 	
r   c                 ó    — t          d¦  «        ‚)z@
        Load the session data and return a dictionary.
        z6subclasses of SessionBase must provide a load() methodr£   r8   s    r   r~   zSessionBase.load\  s   € õ "ØDñ
ô 
ð 	
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_expiredd  s   € õ "Ð"RÑSÔSÐSr   r%   )F)5r   r   r   r   rE   rD   Úobjectr>   r#   r*   r-   r3   r5   Úpropertyr9   r;   r?   rB   rF   rH   rJ   rP   rZ   r\   r_   ra   rc   re   rh   rk   rp   rr   rv   ry   r|   r"   r   r€   r'   rƒ   r‘   r”   r—   rš   r�   r¡   ro   rŸ   r¨   rœ   r~   Úclassmethodr­   r   r   r   r   r   !   s  € € € € € ðð ð $ÐØ Ðà�&‘(”(€KðEð Eð Eð Eð$ð $ð $ð"ð "ð "ðð ð ðð ð ð ðHð Hñ „XðHð/ð /ð /ð /ð  +ð -ð -ð -ð -ð
ð ð ð=ð =ð =ðIð Ið Ið(ð (ð (ð
ð 
ð 
ðð ð ðð ð ð$ð $ð $ð$ð $ð $ð&ð &ð &ð%ð %ð %ðð ð ðð ð ð#ð #ð #ð!ð !ð !ð
%ð %ð %ð"ð "ð "ð&ð &ð &ð �(Ð+Ñ,Ô,€KØ�8Ð,Ð.>Ñ?Ô?€Lð#ð #ð #ð #ð ˆx˜Ñ%Ô%€Hð+ð +ð +ð2ð 2ð 2ð68ð 8ð 8ð.(ð (ð (ð8	ð 	ð 	ð!ð !ð !ð	ð 	ð 	ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð ðTð Tñ „[ðTð Tð Tr   r   )rT   Ústringr   r   Údjango.confr   Údjango.corer   Údjango.utilsr   Údjango.utils.cryptor   Údjango.utils.module_loadingr	   Úascii_lowercaseÚdigitsrn   rW   r   r   r   r   r   r   ú<module>r¹      s4  ðØ €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5ð Ô(¨6¬=Ñ8€ð	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�)ñ 	ô 	ð 	ðLTð LTð LTð LTð LTñ LTô LTð LTð LTð LTr   