Accounts presence reflect its status (ie. disabled, in error, ...)
darcs-hash:20071008062636-86b55-3e3745c1f162a7de630beb913a8aec38b677436b.gz
This commit is contained in:
@@ -82,8 +82,13 @@ class AccountPresenceHandler(Handler):
|
|||||||
|
|
||||||
class AccountPresenceAvailableHandler(AccountPresenceHandler):
|
class AccountPresenceAvailableHandler(AccountPresenceHandler):
|
||||||
def get_account_presence(self, stanza, lang_class, _account):
|
def get_account_presence(self, stanza, lang_class, _account):
|
||||||
|
show_status = account.ONLINE
|
||||||
|
if _account.in_error:
|
||||||
|
show_status = account.DND
|
||||||
|
elif not _account.enabled:
|
||||||
|
show_status = account.XA
|
||||||
return self.component.account_manager.send_presence_available(_account,
|
return self.component.account_manager.send_presence_available(_account,
|
||||||
stanza.get_show(),
|
show_status,
|
||||||
lang_class)
|
lang_class)
|
||||||
|
|
||||||
class RootPresenceHandler(AccountPresenceHandler):
|
class RootPresenceHandler(AccountPresenceHandler):
|
||||||
@@ -109,7 +114,7 @@ class RootPresenceAvailableHandler(RootPresenceHandler, AccountPresenceAvailable
|
|||||||
from_jid = stanza.get_from()
|
from_jid = stanza.get_from()
|
||||||
result = self.component.account_manager.send_root_presence(from_jid,
|
result = self.component.account_manager.send_root_presence(from_jid,
|
||||||
"available",
|
"available",
|
||||||
stanza.get_show(),
|
"online",
|
||||||
str(nb_accounts) +
|
str(nb_accounts) +
|
||||||
lang_class.message_status)
|
lang_class.message_status)
|
||||||
user = account.get_user(unicode(from_jid.bare()))
|
user = account.get_user(unicode(from_jid.bare()))
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from pyxmpp.message import Message
|
|||||||
from jcl.jabber.component import JCLComponent
|
from jcl.jabber.component import JCLComponent
|
||||||
from jcl.jabber.presence import DefaultSubscribeHandler, \
|
from jcl.jabber.presence import DefaultSubscribeHandler, \
|
||||||
DefaultUnsubscribeHandler, DefaultPresenceHandler, \
|
DefaultUnsubscribeHandler, DefaultPresenceHandler, \
|
||||||
RootPresenceAvailableHandler
|
RootPresenceAvailableHandler, AccountPresenceAvailableHandler
|
||||||
from jcl.model.account import User, LegacyJID, Account
|
from jcl.model.account import User, LegacyJID, Account
|
||||||
from jcl.lang import Lang
|
from jcl.lang import Lang
|
||||||
|
|
||||||
@@ -179,6 +179,87 @@ class RootPresenceAvailableHandler_TestCase(JCLTestCase):
|
|||||||
self.assertTrue(isinstance(result[0], Presence))
|
self.assertTrue(isinstance(result[0], Presence))
|
||||||
self.assertEquals(result[0].get_to(), "user1@test.com")
|
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||||
self.assertEquals(result[0].get_from(), "jcl.test.com")
|
self.assertEquals(result[0].get_from(), "jcl.test.com")
|
||||||
|
self.assertEquals(result[0].get_show(), "online")
|
||||||
|
self.assertEquals(result[0].get_status(), "2" + Lang.en.message_status)
|
||||||
|
|
||||||
|
class AccountPresenceAvailableHandler_TestCase(JCLTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
JCLTestCase.setUp(self, tables=[User, LegacyJID, Account])
|
||||||
|
self.config = ConfigParser()
|
||||||
|
self.config_file = tempfile.mktemp(".conf", "jcltest", "/tmp")
|
||||||
|
self.config.read(self.config_file)
|
||||||
|
self.config.add_section("component")
|
||||||
|
self.config.set("component", "motd", "Message Of The Day")
|
||||||
|
self.comp = JCLComponent("jcl.test.com",
|
||||||
|
"password",
|
||||||
|
"localhost",
|
||||||
|
"5347",
|
||||||
|
self.config)
|
||||||
|
self.handler = AccountPresenceAvailableHandler(self.comp)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
JCLTestCase.tearDown(self)
|
||||||
|
if os.path.exists(self.config_file):
|
||||||
|
os.unlink(self.config_file)
|
||||||
|
|
||||||
|
def test_get_account_presence(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = Account(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account12 = Account(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
presence = Presence(stanza_type="available",
|
||||||
|
from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com")
|
||||||
|
result = self.handler.get_account_presence(presence, Lang.en, account11)
|
||||||
|
self.assertEquals(len(result), 1)
|
||||||
|
self.assertTrue(isinstance(result[0], Presence))
|
||||||
|
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||||
|
self.assertEquals(result[0].get_from(), "account11@jcl.test.com")
|
||||||
|
self.assertEquals(result[0].get_show(), "online")
|
||||||
|
self.assertEquals(result[0].get_status(), "account11")
|
||||||
|
|
||||||
|
def test_get_disabled_account_presence(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = Account(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account11.enabled = False
|
||||||
|
account12 = Account(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
presence = Presence(stanza_type="available",
|
||||||
|
from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com")
|
||||||
|
result = self.handler.get_account_presence(presence, Lang.en, account11)
|
||||||
|
self.assertEquals(len(result), 1)
|
||||||
|
self.assertTrue(isinstance(result[0], Presence))
|
||||||
|
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||||
|
self.assertEquals(result[0].get_from(), "account11@jcl.test.com")
|
||||||
|
self.assertEquals(result[0].get_show(), "xa")
|
||||||
|
self.assertEquals(result[0].get_status(), Lang.en.account_disabled)
|
||||||
|
|
||||||
|
def test_get_inerror_account_presence(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = Account(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account11.in_error = True
|
||||||
|
account12 = Account(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
presence = Presence(stanza_type="available",
|
||||||
|
from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com")
|
||||||
|
result = self.handler.get_account_presence(presence, Lang.en, account11)
|
||||||
|
self.assertEquals(len(result), 1)
|
||||||
|
self.assertTrue(isinstance(result[0], Presence))
|
||||||
|
self.assertEquals(result[0].get_to(), "user1@test.com")
|
||||||
|
self.assertEquals(result[0].get_from(), "account11@jcl.test.com")
|
||||||
|
self.assertEquals(result[0].get_show(), "dnd")
|
||||||
|
self.assertEquals(result[0].get_status(), Lang.en.account_error)
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
test_suite = unittest.TestSuite()
|
test_suite = unittest.TestSuite()
|
||||||
@@ -186,6 +267,7 @@ def suite():
|
|||||||
test_suite.addTest(unittest.makeSuite(DefaultUnsubscribeHandler_TestCase, 'test'))
|
test_suite.addTest(unittest.makeSuite(DefaultUnsubscribeHandler_TestCase, 'test'))
|
||||||
test_suite.addTest(unittest.makeSuite(DefaultPresenceHandler_TestCase, 'test'))
|
test_suite.addTest(unittest.makeSuite(DefaultPresenceHandler_TestCase, 'test'))
|
||||||
test_suite.addTest(unittest.makeSuite(RootPresenceAvailableHandler_TestCase, 'test'))
|
test_suite.addTest(unittest.makeSuite(RootPresenceAvailableHandler_TestCase, 'test'))
|
||||||
|
test_suite.addTest(unittest.makeSuite(AccountPresenceAvailableHandler_TestCase, 'test'))
|
||||||
return test_suite
|
return test_suite
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@@ -234,6 +234,9 @@ class Lang:
|
|||||||
|
|
||||||
welcome_message_subject = u"Welcome"
|
welcome_message_subject = u"Welcome"
|
||||||
|
|
||||||
|
account_disabled = u"This account is disabled"
|
||||||
|
account_error = u"This account has an error"
|
||||||
|
|
||||||
class fr:
|
class fr:
|
||||||
component_name = u"composant générique Jabber Component Library"
|
component_name = u"composant générique Jabber Component Library"
|
||||||
register_title = u"Enregistrement d'un nouveau compte"
|
register_title = u"Enregistrement d'un nouveau compte"
|
||||||
@@ -413,6 +416,9 @@ class Lang:
|
|||||||
|
|
||||||
welcome_message_subject = u"Bienvenue"
|
welcome_message_subject = u"Bienvenue"
|
||||||
|
|
||||||
|
account_disabled = u"Ce compte est désactivé"
|
||||||
|
account_error = u"Ce compte est en erreur"
|
||||||
|
|
||||||
class nl:
|
class nl:
|
||||||
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
|
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
|
||||||
register_title = u"Registratie van verbindingen voor Jabber Mail"
|
register_title = u"Registratie van verbindingen voor Jabber Mail"
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ import jcl.model as model
|
|||||||
|
|
||||||
OFFLINE = "offline"
|
OFFLINE = "offline"
|
||||||
ONLINE = "online"
|
ONLINE = "online"
|
||||||
|
DND = "dnd"
|
||||||
|
XA = "xa"
|
||||||
|
|
||||||
def default_post_func(field_value, default_func, bare_from_jid):
|
def default_post_func(field_value, default_func, bare_from_jid):
|
||||||
"""Default post process function: do nothing"""
|
"""Default post process function: do nothing"""
|
||||||
@@ -109,12 +111,36 @@ class Account(InheritableSQLObject):
|
|||||||
|
|
||||||
long_name = property(get_long_name)
|
long_name = property(get_long_name)
|
||||||
|
|
||||||
def get_status_msg(self):
|
def get_status_msg(self, lang_class=Lang.en):
|
||||||
"""Return current status"""
|
"""Return current status"""
|
||||||
|
mapping = {"online": self.get_online_status_msg,
|
||||||
|
"chat": self.get_chat_status_msg,
|
||||||
|
"away": self.get_away_status_msg,
|
||||||
|
"xa": self.get_xa_status_msg,
|
||||||
|
"dnd": self.get_dnd_status_msg,
|
||||||
|
"offline": self.get_offline_status_msg}
|
||||||
|
if mapping.has_key(self.status):
|
||||||
|
return mapping[self.status](lang_class)
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
status_msg = property(get_status_msg)
|
status_msg = property(get_status_msg)
|
||||||
|
|
||||||
|
def get_default_status_msg(self, lang_class):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
def get_disabled_status_msg(self, lang_class):
|
||||||
|
return lang_class.account_disabled
|
||||||
|
|
||||||
|
def get_error_status_msg(self, lang_class):
|
||||||
|
return lang_class.account_error
|
||||||
|
|
||||||
|
get_online_status_msg = get_default_status_msg
|
||||||
|
get_chat_status_msg = get_default_status_msg
|
||||||
|
get_away_status_msg = get_default_status_msg
|
||||||
|
get_xa_status_msg = get_disabled_status_msg
|
||||||
|
get_dnd_status_msg = get_error_status_msg
|
||||||
|
get_offline_status_msg = get_default_status_msg
|
||||||
|
|
||||||
def get_status(self):
|
def get_status(self):
|
||||||
"""Return current Jabber status"""
|
"""Return current Jabber status"""
|
||||||
return self._status
|
return self._status
|
||||||
|
|||||||
@@ -236,6 +236,9 @@ class Language_TestCase(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertNotEquals(self.lang_class.welcome_message_subject, None)
|
self.assertNotEquals(self.lang_class.welcome_message_subject, None)
|
||||||
|
|
||||||
|
self.assertNotEquals(self.lang_class.account_disabled, None)
|
||||||
|
self.assertNotEquals(self.lang_class.account_error, None)
|
||||||
|
|
||||||
class Language_fr_TestCase(Language_TestCase):
|
class Language_fr_TestCase(Language_TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.lang_class = Lang.fr
|
self.lang_class = Lang.fr
|
||||||
|
|||||||
Reference in New Issue
Block a user