Return correct presence type when handling presence "available"

darcs-hash:20070616203704-86b55-a350a840d998323a9e793223a68a414adfd79888.gz
This commit is contained in:
David Rousselie
2007-06-16 22:37:04 +02:00
parent 0f62599951
commit a15d5d2e67
2 changed files with 61 additions and 29 deletions

View File

@@ -270,8 +270,10 @@ class JCLComponent(Component, object):
lang = self.lang.get_lang_class_from_node(stanza.get_node()) lang = self.lang.get_lang_class_from_node(stanza.get_node())
for handler in handlers: for handler in handlers:
try: try:
self.__logger.debug("Applying filter " + repr(handler))
accounts = handler.filter(stanza, lang) accounts = handler.filter(stanza, lang)
if accounts is not None: if accounts is not None:
self.__logger.debug("Applying handler " + repr(handler))
result += handler.handle(stanza, lang, accounts) result += handler.handle(stanza, lang, accounts)
if not apply_all: if not apply_all:
break break
@@ -906,6 +908,7 @@ class AccountManager(object):
###### presence_available handlers ###### ###### presence_available handlers ######
def account_handle_presence_available(self, name, from_jid, lang_class, show): def account_handle_presence_available(self, name, from_jid, lang_class, show):
"""Handle presence \"available\" sent to an account JID""" """Handle presence \"available\" sent to an account JID"""
self.__logger.debug("Account handle presence available")
return self.account_handle_presence(\ return self.account_handle_presence(\
name, from_jid, name, from_jid,
lambda _account: \ lambda _account: \
@@ -915,6 +918,7 @@ class AccountManager(object):
def root_handle_presence_available(self, from_jid, lang_class, show): def root_handle_presence_available(self, from_jid, lang_class, show):
"""Handle presence \"available\" sent to component JID""" """Handle presence \"available\" sent to component JID"""
self.__logger.debug("Root handle presence available")
return self.root_handle_presence(\ return self.root_handle_presence(\
from_jid, from_jid,
lambda _account: \ lambda _account: \
@@ -922,13 +926,14 @@ class AccountManager(object):
show, show,
lang_class), lang_class),
lambda nb_accounts: \ lambda nb_accounts: \
self._send_root_presence(from_jid, show, self._send_root_presence(from_jid, "available", show,
str(nb_accounts) + str(nb_accounts) +
lang_class.message_status)) lang_class.message_status))
###### presence_unavailable handlers ###### ###### presence_unavailable handlers ######
def account_handle_presence_unavailable(self, name, from_jid): def account_handle_presence_unavailable(self, name, from_jid):
"""Handle presence \"unavailable\" sent to an account JID""" """Handle presence \"unavailable\" sent to an account JID"""
self.__logger.debug("Account handle presence available")
return self.account_handle_presence(\ return self.account_handle_presence(\
name, from_jid, name, from_jid,
lambda _account: \ lambda _account: \
@@ -936,12 +941,13 @@ class AccountManager(object):
def root_handle_presence_unavailable(self, from_jid): def root_handle_presence_unavailable(self, from_jid):
"""Handle presence \"unavailable\" sent to component JID""" """Handle presence \"unavailable\" sent to component JID"""
self.__logger.debug("Root handle presence available")
return self.root_handle_presence(\ return self.root_handle_presence(\
from_jid, from_jid,
lambda _account: \ lambda _account: \
self._send_presence_unavailable(_account), self._send_presence_unavailable(_account),
lambda nb_accounts: \ lambda nb_accounts: \
self._send_root_presence(from_jid)) self._send_root_presence(from_jid, "unavailable"))
###### presence_subscribe handlers ###### ###### presence_subscribe handlers ######
def account_handle_presence_subscribe(self, name, from_jid, stanza): def account_handle_presence_subscribe(self, name, from_jid, stanza):
@@ -1124,12 +1130,13 @@ class AccountManager(object):
to_jid=_account.user_jid, to_jid=_account.user_jid,
stanza_type="unavailable")] stanza_type="unavailable")]
def _send_root_presence(self, to_jid, show=None, status=None): def _send_root_presence(self, to_jid, presence_type,
show=None, status=None):
result = self._send_presence(self.component.jid, to_jid, result = self._send_presence(self.component.jid, to_jid,
"unavailable", show=show, presence_type, show=show,
status=status) status=status)
result.extend(self._send_root_presence_legacy(to_jid, result.extend(self._send_root_presence_legacy(to_jid,
"unavailable", presence_type,
show=show, show=show,
status=status)) status=status))
return result return result

View File

@@ -1455,25 +1455,29 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEqual(len(presence_sent), 3) self.assertEqual(len(presence_sent), 3)
self.assertEqual(len([presence \ self.assertEqual(len([presence \
for presence in presence_sent \ for presence in presence_sent \
if presence.get_to_jid() == "user1@test.com"]), \ if presence.get_to_jid() == "user1@test.com" \
and presence.get_type() is None]), \
3) 3)
self.assertEqual(len([presence \ self.assertEqual(len([presence \
for presence in presence_sent \ for presence in presence_sent \
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"jcl.test.com" \ "jcl.test.com" \
and isinstance(presence, Presence)]), \ and isinstance(presence, Presence) \
and presence.get_type() is None]), \
1) 1)
self.assertEqual(len([presence \ self.assertEqual(len([presence \
for presence in presence_sent \ for presence in presence_sent \
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"account11@jcl.test.com" \ "account11@jcl.test.com" \
and isinstance(presence, Presence)]), \ and isinstance(presence, Presence) \
and presence.get_type() is None]), \
1) 1)
self.assertEqual(len([presence \ self.assertEqual(len([presence \
for presence in presence_sent \ for presence in presence_sent \
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"account12@jcl.test.com" \ "account12@jcl.test.com" \
and isinstance(presence, Presence)]), \ and isinstance(presence, Presence) \
and presence.get_type() is None]), \
1) 1)
def test_handle_presence_available_to_component_legacy_users(self): def test_handle_presence_available_to_component_legacy_users(self):
@@ -1513,49 +1517,57 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEqual(len(presence_sent), 7) self.assertEqual(len(presence_sent), 7)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_to_jid() == "user1@test.com"]), if presence.get_to_jid() == "user1@test.com" \
and presence.get_type() is None]),
7) 7)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"jcl.test.com" "jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"account11@jcl.test.com" "account11@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"account12@jcl.test.com" "account12@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u111%test.com@jcl.test.com" "u111%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u112%test.com@jcl.test.com" "u112%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u121%test.com@jcl.test.com" "u121%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u122%test.com@jcl.test.com" "u122%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() is None]),
1) 1)
def test_handle_presence_available_to_component_unknown_user(self): def test_handle_presence_available_to_component_unknown_user(self):
@@ -1602,6 +1614,7 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEqual(presence_sent[0].get_to(), "user1@test.com") self.assertEqual(presence_sent[0].get_to(), "user1@test.com")
self.assertEqual(presence_sent[0].get_from(), "account11@jcl.test.com") self.assertEqual(presence_sent[0].get_from(), "account11@jcl.test.com")
self.assertTrue(isinstance(presence_sent[0], Presence)) self.assertTrue(isinstance(presence_sent[0], Presence))
self.assertEqual(presence_sent[0].get_type(), None)
def test_handle_presence_available_to_registered_handlers(self): def test_handle_presence_available_to_registered_handlers(self):
self.comp.stream = MockStream() self.comp.stream = MockStream()
@@ -1627,6 +1640,7 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEqual(presence_sent[0].get_to(), "user1@test.com") self.assertEqual(presence_sent[0].get_to(), "user1@test.com")
self.assertEqual(presence_sent[0].get_from(), "user1%test.com@jcl.test.com") self.assertEqual(presence_sent[0].get_from(), "user1%test.com@jcl.test.com")
self.assertTrue(isinstance(presence_sent[0], Presence)) self.assertTrue(isinstance(presence_sent[0], Presence))
self.assertEqual(presence_sent[0].get_type(), None)
def test_handle_presence_available_to_account_unknown_user(self): def test_handle_presence_available_to_account_unknown_user(self):
self.comp.stream = MockStream() self.comp.stream = MockStream()
@@ -1696,6 +1710,7 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertTrue(isinstance(presence, Presence)) self.assertTrue(isinstance(presence, Presence))
self.assertEqual(presence.get_from_jid(), "account11@jcl.test.com") self.assertEqual(presence.get_from_jid(), "account11@jcl.test.com")
self.assertEqual(presence.get_to_jid(), "user1@test.com") self.assertEqual(presence.get_to_jid(), "user1@test.com")
self.assertEqual(presence.get_type(), None)
def test_handle_presence_available_to_account_live_password_complex(self): def test_handle_presence_available_to_account_live_password_complex(self):
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL) account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
@@ -1730,6 +1745,7 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertTrue(isinstance(presence, Presence)) self.assertTrue(isinstance(presence, Presence))
self.assertEqual(presence.get_from_jid(), "account11@jcl.test.com") self.assertEqual(presence.get_from_jid(), "account11@jcl.test.com")
self.assertEqual(presence.get_to_jid(), "user1@test.com") self.assertEqual(presence.get_to_jid(), "user1@test.com")
self.assertEqual(presence.get_type(), None)
self.assertEqual(unicode(password_message.get_from_jid()), \ self.assertEqual(unicode(password_message.get_from_jid()), \
"account11@jcl.test.com") "account11@jcl.test.com")
@@ -1762,7 +1778,8 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEqual(len(presence_sent), 3) self.assertEqual(len(presence_sent), 3)
self.assertEqual(len([presence \ self.assertEqual(len([presence \
for presence in presence_sent \ for presence in presence_sent \
if presence.get_to_jid() == "user1@test.com"]), \ if presence.get_to_jid() == "user1@test.com" \
and presence.get_type() == "unavailable"]), \
3) 3)
self.assertEqual(\ self.assertEqual(\
len([presence \ len([presence \
@@ -1826,49 +1843,57 @@ class JCLComponent_TestCase(unittest.TestCase):
self.assertEqual(len(presence_sent), 7) self.assertEqual(len(presence_sent), 7)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_to_jid() == "user1@test.com"]), if presence.get_to_jid() == "user1@test.com" \
and presence.get_type() == "unavailable"]),
7) 7)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"jcl.test.com" "jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"account11@jcl.test.com" "account11@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"account12@jcl.test.com" "account12@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u111%test.com@jcl.test.com" "u111%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u112%test.com@jcl.test.com" "u112%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u121%test.com@jcl.test.com" "u121%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
self.assertEqual(len([presence self.assertEqual(len([presence
for presence in presence_sent for presence in presence_sent
if presence.get_from_jid() == \ if presence.get_from_jid() == \
"u122%test.com@jcl.test.com" "u122%test.com@jcl.test.com"
and isinstance(presence, Presence)]), and isinstance(presence, Presence) \
and presence.get_type() == "unavailable"]),
1) 1)
def test_handle_presence_unavailable_to_component_unknown_user(self): def test_handle_presence_unavailable_to_component_unknown_user(self):
@@ -2432,8 +2457,8 @@ class DefaultSubscribeHandler_TestCase(unittest.TestCase):
self.handler = DefaultSubscribeHandler() self.handler = DefaultSubscribeHandler()
def test_handle(self): def test_handle(self):
presence = Presence(from_jid = "user1@test.com", \ presence = Presence(from_jid="user1@test.com",
to_jid = "user1%test.com@jcl.test.com", \ to_jid="user1%test.com@jcl.test.com",
stanza_type="subscribe") stanza_type="subscribe")
result = self.handler.handle(presence, None, []) result = self.handler.handle(presence, None, [])
self.assertEquals(len(result), 2) self.assertEquals(len(result), 2)