diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index b558eda..5ce0346 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -285,7 +285,8 @@ class JCLComponent(Component, object): def apply_registered_behavior(self, handlers, stanza, apply_filter_func=None, - apply_handle_func=None): + apply_handle_func=None, + send_result=True): """Execute handler if their filter method does not return None""" result = [] lang_class = self.lang.get_lang_class_from_node(stanza.get_node()) @@ -322,7 +323,8 @@ class JCLComponent(Component, object): stanza_type="error", subject=lang_class.error_subject, body=lang_class.error_body % (e.message))] - self.send_stanzas(result) + if send_result: + self.send_stanzas(result) return result def handle_get_gateway(self, info_query): @@ -365,8 +367,12 @@ class JCLComponent(Component, object): lambda filter_func, stanza, lang_class: \ filter_func(stanza, lang_class, node), lambda handle_func, stanza, lang_class, data, result: \ - handle_func(stanza, lang_class, node, result, data)) - return result + handle_func(stanza, lang_class, node, result, data), + send_result=False) + if len(result) > 0: + return result[0] + else: + return None def disco_get_items(self, node, info_query): """ @@ -378,8 +384,12 @@ class JCLComponent(Component, object): lambda filter_func, stanza, lang_class: \ filter_func(stanza, lang_class, node), lambda handle_func, stanza, lang_class, data, result: \ - handle_func(stanza, lang_class, node, result, data)) - return result + handle_func(stanza, lang_class, node, result, data), + send_result=False) + if len(result) > 0: + return result[0] + else: + return None def handle_get_version(self, info_query): """Get Version handler diff --git a/src/jcl/jabber/tests/component.py b/src/jcl/jabber/tests/component.py index 62cf165..cb2ed96 100644 --- a/src/jcl/jabber/tests/component.py +++ b/src/jcl/jabber/tests/component.py @@ -505,9 +505,8 @@ class JCLComponent_TestCase(unittest.TestCase): info_query = Iq(stanza_type="get", from_jid="user1@test.com", to_jid="jcl.test.com") - disco_infos = self.comp.disco_get_info(None, info_query) - self.assertEquals(len(disco_infos), 1) - disco_info = disco_infos[0] + disco_info = self.comp.disco_get_info(None, info_query) + self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(disco_info.get_identities()[0].get_name(), self.comp.name) self.assertTrue(disco_info.has_feature("jabber:iq:version")) self.assertTrue(disco_info.has_feature("jabber:iq:register")) @@ -519,9 +518,8 @@ class JCLComponent_TestCase(unittest.TestCase): info_query = Iq(stanza_type="get", from_jid="user1@test.com", to_jid="jcl.test.com") - disco_infos = self.comp.disco_get_info(None, info_query) - self.assertEquals(len(disco_infos), 1) - disco_info = disco_infos[0] + disco_info = self.comp.disco_get_info(None, info_query) + self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(disco_info.get_identities()[0].get_name(), self.comp.name) self.assertTrue(disco_info.has_feature("jabber:iq:version")) @@ -533,9 +531,8 @@ class JCLComponent_TestCase(unittest.TestCase): info_query = Iq(stanza_type="get", from_jid="user1@test.com", to_jid="node_test@jcl.test.com") - disco_infos = self.comp.disco_get_info("node_test", info_query) - self.assertEquals(len(disco_infos), 1) - disco_info = disco_infos[0] + disco_info = self.comp.disco_get_info("node_test", info_query) + self.assertEquals(len(self.comp.stream.sent), 0) self.assertTrue(disco_info.has_feature("jabber:iq:register")) def test_disco_get_info_long_node(self): @@ -545,10 +542,9 @@ class JCLComponent_TestCase(unittest.TestCase): info_query = Iq(stanza_type="get", from_jid="user1@test.com", to_jid="node_test@jcl.test.com/node_type") - disco_infos = self.comp.disco_get_info("node_type/node_test", - info_query) - self.assertEquals(len(disco_infos), 1) - disco_info = disco_infos[0] + disco_info = self.comp.disco_get_info("node_type/node_test", + info_query) + self.assertEquals(len(self.comp.stream.sent), 0) self.assertTrue(disco_info.has_feature("jabber:iq:register")) def test_disco_get_info_root_unknown_node(self): @@ -556,7 +552,7 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="jcl.test.com") disco_info = self.comp.disco_get_info("unknown", info_query) - self.assertEquals(disco_info, []) + self.assertEquals(disco_info, None) def test_disco_get_info_command_list(self): self.comp.stream = MockStream() @@ -564,9 +560,8 @@ class JCLComponent_TestCase(unittest.TestCase): info_query = Iq(stanza_type="get", from_jid="user1@test.com", to_jid="jcl.test.com") - disco_infos = self.comp.disco_get_info("list", info_query) - self.assertEquals(len(disco_infos), 1) - disco_info = disco_infos[0] + disco_info = self.comp.disco_get_info("list", info_query) + self.assertEquals(len(self.comp.stream.sent), 0) self.assertTrue(disco_info.has_feature("http://jabber.org/protocol/commands")) self.assertEquals(len(disco_info.get_identities()), 1) self.assertEquals(disco_info.get_identities()[0].get_category(), @@ -592,8 +587,8 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid = "user1@test.com", \ to_jid = "jcl.test.com") disco_items = self.comp.disco_get_items(None, info_query) - self.assertEquals(len(disco_items[0].get_items()), 1) - disco_item = disco_items[0].get_items()[0] + self.assertEquals(len(disco_items.get_items()), 1) + disco_item = disco_items.get_items()[0] self.assertEquals(disco_item.get_jid(), account1.jid) self.assertEquals(disco_item.get_node(), account1.name) self.assertEquals(disco_item.get_name(), account1.long_name) @@ -609,7 +604,7 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="jcl.test.com") disco_items = self.comp.disco_get_items("unknown", info_query) - self.assertEquals(disco_items, []) + self.assertEquals(disco_items, None) def test_disco_get_items_unknown_node_multiple_account_types(self): self.comp.account_manager.account_classes = (ExampleAccount, Example2Account) @@ -626,7 +621,7 @@ class JCLComponent_TestCase(unittest.TestCase): to_jid="jcl.test.com") self.comp.account_manager.has_multiple_account_type = True disco_items = self.comp.disco_get_items("unknown", info_query) - self.assertEquals(disco_items, []) + self.assertEquals(disco_items, None) def test_disco_get_items_1type_with_node(self): """get_items on an account. Must return nothing""" @@ -639,7 +634,7 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="account1@jcl.test.com") disco_items = self.comp.disco_get_items("account1", info_query) - self.assertEquals(disco_items, []) + self.assertEquals(disco_items, None) def test_disco_get_items_2types_no_node(self): """get_items on main entity. Must account types""" @@ -659,14 +654,14 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="jcl.test.com") disco_items = self.comp.disco_get_items(None, info_query) - self.assertEquals(len(disco_items[0].get_items()), 2) - disco_item = disco_items[0].get_items()[0] + self.assertEquals(len(disco_items.get_items()), 2) + disco_item = disco_items.get_items()[0] self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example") self.assertEquals(disco_item.get_node(), "Example") self.assertEquals(disco_item.get_name(), LangExample.en.type_example_name) - disco_item = disco_items[0].get_items()[1] + disco_item = disco_items.get_items()[1] self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example2") self.assertEquals(disco_item.get_node(), "Example2") @@ -699,8 +694,8 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="jcl.test.com/Example") disco_items = self.comp.disco_get_items("Example", info_query) - self.assertEquals(len(disco_items[0].get_items()), 1) - disco_item = disco_items[0].get_items()[0] + self.assertEquals(len(disco_items.get_items()), 1) + disco_item = disco_items.get_items()[0] self.assertEquals(unicode(disco_item.get_jid()), unicode(account11.jid) + "/Example") self.assertEquals(disco_item.get_node(), "Example/" + account11.name) self.assertEquals(disco_item.get_name(), account11.long_name) @@ -729,8 +724,8 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user2@test.com", to_jid="jcl.test.com/Example2") disco_items = self.comp.disco_get_items("Example2", info_query) - self.assertEquals(len(disco_items[0].get_items()), 1) - disco_item = disco_items[0].get_items()[0] + self.assertEquals(len(disco_items.get_items()), 1) + disco_item = disco_items.get_items()[0] self.assertEquals(unicode(disco_item.get_jid()), unicode(account22.jid) + "/Example2") self.assertEquals(disco_item.get_node(), "Example2/" + account22.name) self.assertEquals(disco_item.get_name(), account22.long_name) @@ -747,7 +742,7 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="account1@jcl.test.com/Example") disco_items = self.comp.disco_get_items("Example/account1", info_query) - self.assertEquals(disco_items, []) + self.assertEquals(disco_items, None) def test_disco_get_items_2types_with_long_node2(self): """get_items on a second type account. Must return nothing""" @@ -761,7 +756,7 @@ class JCLComponent_TestCase(unittest.TestCase): from_jid="user1@test.com", to_jid="account1@jcl.test.com/Example2") disco_items = self.comp.disco_get_items("Example2/account1", info_query) - self.assertEquals(disco_items, []) + self.assertEquals(disco_items, None) def test_disco_get_items_list_commands(self): self.comp.stream = MockStream() @@ -771,8 +766,8 @@ class JCLComponent_TestCase(unittest.TestCase): to_jid="jcl.test.com") disco_items = self.comp.disco_get_items("http://jabber.org/protocol/commands", info_query) - self.assertEquals(len(disco_items[0].get_items()), 35) - item = disco_items[0].get_items()[0] + self.assertEquals(len(disco_items.get_items()), 35) + item = disco_items.get_items()[0] self.assertEquals(item.get_node(), "list") self.assertEquals(item.get_name(), Lang.en.command_list)