Commit b040ac06 authored by Tobias Kroenke's avatar Tobias Kroenke Committed by Tim Graham
Browse files

Fixed #26520 -- Fixed a regression where SessionBase.pop() didn't return a KeyError.

parent 973f3937
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -42,6 +42,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
@@ -65,9 +67,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:
+3 −0
Original line number Diff line number Diff line
@@ -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`).
+1 −1
Original line number Diff line number Diff line
@@ -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')``

+4 −0
Original line number Diff line number Diff line
@@ -88,6 +88,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')