From 262da78ca7c5b71901f0f23111ef65156ac56463 Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Fri, 23 Sep 2011 12:03:49 -0400 Subject: [PATCH] Fix del_event_handler for Python3 (different semantics for filter()). Fixes issue #103 --- sleekxmpp/xmlstream/xmlstream.py | 5 +++-- tests/test_events.py | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index e047dbd7..0a66a974 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -840,8 +840,9 @@ class XMLStream(object): def filter_pointers(handler): return handler[0] != pointer - self.__event_handlers[name] = filter(filter_pointers, - self.__event_handlers[name]) + self.__event_handlers[name] = list(filter( + filter_pointers, + self.__event_handlers[name])) def event_handled(self, name): """ diff --git a/tests/test_events.py b/tests/test_events.py index ea4cf8a4..fb34be30 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -48,6 +48,29 @@ class TestEvents(SleekTest): msg = "Event was not triggered the correct number of times: %s" self.failUnless(happened == [True], msg % happened) + def testAddDelAddEvent(self): + """Test adding, then removing, then adding an event handler.""" + happened = [] + + def handletestevent(event): + happened.append(True) + + self.xmpp.add_event_handler("test_event", handletestevent) + self.xmpp.event("test_event", {}) + + self.xmpp.del_event_handler("test_event", handletestevent) + # Should not trigger because it was deleted + self.xmpp.event("test_event", {}) + + self.xmpp.add_event_handler("test_event", handletestevent) + self.xmpp.event("test_event", {}) + + # Give the event queue time to process. + time.sleep(0.1) + + msg = "Event was not triggered the correct number of times: %s" + self.failUnless(happened == [True, True], msg % happened) + def testDisposableEvent(self): """Test disposable handler working, then not being triggered again.""" happened = []