From b847e0b4030ab6797ed8d996d133d1d8068aba83 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 13 Sep 2010 04:05:33 +0000 Subject: allow callbacks to add other callbacks --- repoze/bfg/request.py | 10 ++++++---- repoze/bfg/tests/test_request.py | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/repoze/bfg/request.py b/repoze/bfg/request.py index 84a5660ef..6a7ce14ac 100644 --- a/repoze/bfg/request.py +++ b/repoze/bfg/request.py @@ -88,9 +88,10 @@ class Request(WebobRequest): self.response_callbacks = callbacks def _process_response_callbacks(self, response): - for callback in self.response_callbacks: + callbacks = self.response_callbacks + while callbacks: + callback = callbacks.pop(0) callback(self, response) - self.response_callbacks = () def add_finished_callback(self, callback): """ @@ -148,9 +149,10 @@ class Request(WebobRequest): self.finished_callbacks = callbacks def _process_finished_callbacks(self): - for callback in self.finished_callbacks: + callbacks = self.finished_callbacks + while callbacks: + callback = callbacks.pop(0) callback(self) - self.finished_callbacks = () # override default WebOb "environ['adhoc_attr']" mutation behavior __getattr__ = object.__getattribute__ diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py index ae52f8420..87585c301 100644 --- a/repoze/bfg/tests/test_request.py +++ b/repoze/bfg/tests/test_request.py @@ -186,7 +186,7 @@ class TestRequest(unittest.TestCase): self.assertEqual(inst.called2, True) self.assertEqual(response.called1, True) self.assertEqual(response.called2, True) - self.assertEqual(inst.response_callbacks, ()) + self.assertEqual(inst.response_callbacks, []) def test_add_finished_callback(self): inst = self._makeOne({}) @@ -208,7 +208,7 @@ class TestRequest(unittest.TestCase): inst._process_finished_callbacks() self.assertEqual(inst.called1, True) self.assertEqual(inst.called2, True) - self.assertEqual(inst.finished_callbacks, ()) + self.assertEqual(inst.finished_callbacks, []) class Test_route_request_iface(unittest.TestCase): def _callFUT(self, name): -- cgit v1.2.3