From 37f3ed08e55704012b5c3b7b9e77b684c28d81b2 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Fri, 17 Apr 2015 23:13:14 -0500 Subject: default response_callback and finished_callback to an empty deque instead of None fixes #1600 --- CHANGES.txt | 4 ++++ pyramid/request.py | 23 ++++++++++------------- pyramid/tests/test_request.py | 4 ++-- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index a9e159275..87e9f1f3a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -191,6 +191,10 @@ Bug Fixes - Avoiding timing attacks against CSRF tokens. See https://github.com/Pylons/pyramid/pull/1574 +- ``request.finished_callbacks`` and ``request.response_callbacks`` now + default to an iterable instead of ``None``. It may be checked for a length + of 0. This was the behavior in 1.5. + Deprecations ------------ diff --git a/pyramid/request.py b/pyramid/request.py index 13b8cd339..5739e6311 100644 --- a/pyramid/request.py +++ b/pyramid/request.py @@ -37,8 +37,14 @@ class TemplateContext(object): pass class CallbackMethodsMixin(object): - response_callbacks = None - finished_callbacks = None + @reify + def finished_callbacks(self): + return deque() + + @reify + def response_callbacks(self): + return deque() + def add_response_callback(self, callback): """ Add a callback to the set of callbacks to be called by the @@ -76,11 +82,7 @@ class CallbackMethodsMixin(object): See also :ref:`using_response_callbacks`. """ - callbacks = self.response_callbacks - if callbacks is None: - callbacks = deque() - callbacks.append(callback) - self.response_callbacks = callbacks + self.response_callbacks.append(callback) def _process_response_callbacks(self, response): callbacks = self.response_callbacks @@ -135,12 +137,7 @@ class CallbackMethodsMixin(object): See also :ref:`using_finished_callbacks`. """ - - callbacks = self.finished_callbacks - if callbacks is None: - callbacks = deque() - callbacks.append(callback) - self.finished_callbacks = callbacks + self.finished_callbacks.append(callback) def _process_finished_callbacks(self): callbacks = self.finished_callbacks diff --git a/pyramid/tests/test_request.py b/pyramid/tests/test_request.py index 2c2298f26..c528b9174 100644 --- a/pyramid/tests/test_request.py +++ b/pyramid/tests/test_request.py @@ -120,7 +120,7 @@ class TestRequest(unittest.TestCase): def test_add_response_callback(self): inst = self._makeOne() - self.assertEqual(inst.response_callbacks, None) + self.assertEqual(len(inst.response_callbacks), 0) def callback(request, response): """ """ inst.add_response_callback(callback) @@ -171,7 +171,7 @@ class TestRequest(unittest.TestCase): def test_add_finished_callback(self): inst = self._makeOne() - self.assertEqual(inst.finished_callbacks, None) + self.assertEqual(len(inst.finished_callbacks), 0) def callback(request): """ """ inst.add_finished_callback(callback) -- cgit v1.2.3