Return correct presence type when handling presence "available"
darcs-hash:20070616203704-86b55-a350a840d998323a9e793223a68a414adfd79888.gz
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user