diff options
author | Tobias Kroenke <tobias@kroenke.de> | 2016-04-20 10:36:59 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2016-04-20 13:11:33 -0400 |
commit | 845d43e37ed0086baa55ba791a5d386da54e943b (patch) | |
tree | bd3409260f9311c9cd2efd2485d4a1948eaa2bf1 | |
parent | ebb55a247c0f060f3e2cf0e363137106385bda0f (diff) | |
download | django-845d43e37ed0086baa55ba791a5d386da54e943b.tar.gz |
[1.9.x] Fixed #26520 -- Fixed a regression where SessionBase.pop() didn't return a KeyError.
Backport of b040ac06ebba2348cece7390b88f746d2c91d07b from master
-rw-r--r-- | django/contrib/sessions/backends/base.py | 7 | ||||
-rw-r--r-- | docs/releases/1.9.6.txt | 3 | ||||
-rw-r--r-- | docs/topics/http/sessions.txt | 2 | ||||
-rw-r--r-- | tests/sessions_tests/tests.py | 4 |
4 files changed, 13 insertions, 3 deletions
diff --git a/django/contrib/sessions/backends/base.py b/django/contrib/sessions/backends/base.py index 718cc54215..dd4979e957 100644 --- a/django/contrib/sessions/backends/base.py +++ b/django/contrib/sessions/backends/base.py @@ -35,6 +35,8 @@ class SessionBase(object): TEST_COOKIE_NAME = 'testcookie' TEST_COOKIE_VALUE = 'worked' + __not_given = object() + def __init__(self, session_key=None): self._session_key = session_key self.accessed = False @@ -58,9 +60,10 @@ class SessionBase(object): def get(self, key, default=None): return self._session.get(key, default) - def pop(self, key, default=None): + def pop(self, key, default=__not_given): self.modified = self.modified or key in self._session - return self._session.pop(key, default) + args = () if default is self.__not_given else (default,) + return self._session.pop(key, *args) def setdefault(self, key, value): if key in self._session: diff --git a/docs/releases/1.9.6.txt b/docs/releases/1.9.6.txt index 8b48f803c7..e505ee5923 100644 --- a/docs/releases/1.9.6.txt +++ b/docs/releases/1.9.6.txt @@ -18,3 +18,6 @@ Bugfixes * Prevented ``makemigrations`` from generating infinite migrations for a model field that references a ``functools.partial`` (:ticket:`26475`). + +* Fixed a regression where ``SessionBase.pop()`` returned ``None`` rather than + raising a ``KeyError`` for nonexistent values (:ticket:`26520`). diff --git a/docs/topics/http/sessions.txt b/docs/topics/http/sessions.txt index c495bb5b4c..b72ce2f0d0 100644 --- a/docs/topics/http/sessions.txt +++ b/docs/topics/http/sessions.txt @@ -205,7 +205,7 @@ You can edit it multiple times. Example: ``fav_color = request.session.get('fav_color', 'red')`` - .. method:: pop(key, default=None) + .. method:: pop(key, default=__not_given) Example: ``fav_color = request.session.pop('fav_color', 'blue')`` diff --git a/tests/sessions_tests/tests.py b/tests/sessions_tests/tests.py index 50f14076e5..a28a5c8624 100644 --- a/tests/sessions_tests/tests.py +++ b/tests/sessions_tests/tests.py @@ -87,6 +87,10 @@ class SessionTestsMixin(object): self.assertTrue(self.session.accessed) self.assertFalse(self.session.modified) + def test_pop_no_default_keyerror_raised(self): + with self.assertRaises(KeyError): + self.session.pop('some key') + def test_setdefault(self): self.assertEqual(self.session.setdefault('foo', 'bar'), 'bar') self.assertEqual(self.session.setdefault('foo', 'baz'), 'bar') |