Skip to content

Commit a8d7d56

Browse files
achernetskyasvetlov
authored andcommitted
Method set_new_identity for change identity (#237)
1 parent bb47305 commit a8d7d56

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

aiohttp_session/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ def invalidate(self):
6868
self._changed = True
6969
self._mapping = {}
7070

71+
def set_new_identity(self, identity):
72+
if not self._new:
73+
raise RuntimeError(
74+
"Can't change identity for a session which is not new")
75+
76+
self._identity = identity
77+
7178
def __len__(self):
7279
return len(self._mapping)
7380

docs/reference.rst

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Session
9090
.. attribute:: identity
9191

9292
Client's identity. It may be cookie name or database
93-
key. Read-only property.
93+
key. Read-only property. For change use :func:`Session.set_new_identity`.
9494

9595
.. attribute:: new
9696

@@ -130,6 +130,13 @@ Session
130130
Call this when you want to invalidate the session (dump all
131131
data, and -- perhaps -- set a clearing cookie).
132132

133+
.. method:: set_new_identity(identity)
134+
135+
Call this when you want to change the :py:attr:`identity`.
136+
137+
.. warning::
138+
139+
Never change :py:attr:`identity` of a session which is not new.
133140

134141
.. _aiohttp-session-storage:
135142

tests/test_session_dict.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pytest
12
import time
23

34
from aiohttp_session import Session
@@ -31,6 +32,22 @@ def test_create3():
3132
assert s.created is not None
3233

3334

35+
def test_set_new_identity_ok():
36+
s = Session(identity=1, data=None, new=True)
37+
assert s.new
38+
assert s.identity == 1
39+
40+
s.set_new_identity(2)
41+
assert s.new
42+
assert s.identity == 2
43+
44+
45+
def test_set_new_identity_for_not_new_session():
46+
s = Session(identity=1, data=None, new=False)
47+
with pytest.raises(RuntimeError):
48+
s.set_new_identity(2)
49+
50+
3451
def test__repr__():
3552
s = Session('test_identity', data=None, new=True)
3653
assert str(s) == \

0 commit comments

Comments
 (0)