Implement help message handler
darcs-hash:20071030180959-86b55-e2c4c70a96a57d69d7f6a8b822f93031e27614f1.gz
This commit is contained in:
@@ -49,7 +49,7 @@ from jcl.error import FieldError
|
|||||||
from jcl.jabber.disco import AccountDiscoGetInfoHandler, \
|
from jcl.jabber.disco import AccountDiscoGetInfoHandler, \
|
||||||
AccountTypeDiscoGetInfoHandler, RootDiscoGetItemsHandler, \
|
AccountTypeDiscoGetInfoHandler, RootDiscoGetItemsHandler, \
|
||||||
AccountTypeDiscoGetItemsHandler
|
AccountTypeDiscoGetItemsHandler
|
||||||
from jcl.jabber.message import PasswordMessageHandler
|
from jcl.jabber.message import PasswordMessageHandler, HelpMessageHandler
|
||||||
import jcl.jabber.command as command
|
import jcl.jabber.command as command
|
||||||
from jcl.jabber.command import CommandDiscoGetItemsHandler, \
|
from jcl.jabber.command import CommandDiscoGetItemsHandler, \
|
||||||
CommandDiscoGetInfoHandler, JCLCommandManager, \
|
CommandDiscoGetInfoHandler, JCLCommandManager, \
|
||||||
@@ -753,7 +753,8 @@ class JCLComponent(Component, object):
|
|||||||
self.handle_message)
|
self.handle_message)
|
||||||
self.send_stanzas(self.account_manager.probe_all_accounts_presence())
|
self.send_stanzas(self.account_manager.probe_all_accounts_presence())
|
||||||
|
|
||||||
self.msg_handlers += [[PasswordMessageHandler(self)]]
|
self.msg_handlers += [[PasswordMessageHandler(self),
|
||||||
|
HelpMessageHandler(self)]]
|
||||||
|
|
||||||
def signal_handler(self, signum, frame):
|
def signal_handler(self, signum, frame):
|
||||||
"""Stop method handler
|
"""Stop method handler
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from pyxmpp.message import Message
|
||||||
|
|
||||||
from jcl.jabber import Handler
|
from jcl.jabber import Handler
|
||||||
import jcl.model.account as account
|
import jcl.model.account as account
|
||||||
from jcl.model.account import Account
|
from jcl.model.account import Account
|
||||||
@@ -57,3 +59,27 @@ class PasswordMessageHandler(Handler):
|
|||||||
return self.component.account_manager.set_password(data, stanza.get_from(),
|
return self.component.account_manager.set_password(data, stanza.get_from(),
|
||||||
stanza.get_body(),
|
stanza.get_body(),
|
||||||
lang_class)
|
lang_class)
|
||||||
|
|
||||||
|
class HelpMessageHandler(Handler):
|
||||||
|
"""Handle 'help' sent in a message"""
|
||||||
|
|
||||||
|
def __init__(self, component):
|
||||||
|
"""Handler constructor"""
|
||||||
|
Handler.__init__(self, component)
|
||||||
|
self.help_regexp = re.compile("^help.*")
|
||||||
|
|
||||||
|
def filter(self, stanza, lang_class):
|
||||||
|
"""
|
||||||
|
Test if stanza body match the help regexp.
|
||||||
|
"""
|
||||||
|
return self.help_regexp.search(stanza.get_body()) \
|
||||||
|
or self.help_regexp.search(stanza.get_subject())
|
||||||
|
|
||||||
|
def handle(self, stanza, lang_class, data):
|
||||||
|
"""
|
||||||
|
Return a help message.
|
||||||
|
"""
|
||||||
|
return [Message(to_jid=stanza.get_from(),
|
||||||
|
from_jid=stanza.get_to(),
|
||||||
|
subject=lang_class.help_message_subject,
|
||||||
|
body=lang_class.help_message_body)]
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from pyxmpp.message import Message
|
|||||||
|
|
||||||
from jcl.lang import Lang
|
from jcl.lang import Lang
|
||||||
from jcl.jabber.component import JCLComponent
|
from jcl.jabber.component import JCLComponent
|
||||||
from jcl.jabber.message import PasswordMessageHandler
|
from jcl.jabber.message import PasswordMessageHandler, HelpMessageHandler
|
||||||
import jcl.model.account as account
|
import jcl.model.account as account
|
||||||
import jcl.model as model
|
import jcl.model as model
|
||||||
from jcl.model.account import Account, User
|
from jcl.model.account import Account, User
|
||||||
@@ -133,9 +133,99 @@ class PasswordMessageHandler_TestCase(JCLTestCase):
|
|||||||
self.assertEquals(account11.password, "secret")
|
self.assertEquals(account11.password, "secret")
|
||||||
model.db_disconnect()
|
model.db_disconnect()
|
||||||
|
|
||||||
|
class HelpMessageHandler_TestCase(JCLTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
JCLTestCase.setUp(self, tables=[User, Account, ExampleAccount])
|
||||||
|
self.comp = JCLComponent("jcl.test.com",
|
||||||
|
"password",
|
||||||
|
"localhost",
|
||||||
|
"5347",
|
||||||
|
self.db_url)
|
||||||
|
self.handler = HelpMessageHandler(self.comp)
|
||||||
|
|
||||||
|
def test_filter(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = ExampleAccount(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account12 = ExampleAccount(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
message = Message(from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com",
|
||||||
|
subject="",
|
||||||
|
body="help")
|
||||||
|
result = self.handler.filter(message, None)
|
||||||
|
self.assertNotEquals(None, result)
|
||||||
|
|
||||||
|
def test_filter_long_help_message(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = ExampleAccount(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account12 = ExampleAccount(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
message = Message(from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com",
|
||||||
|
subject="",
|
||||||
|
body="help dalkjdjhbd")
|
||||||
|
result = self.handler.filter(message, None)
|
||||||
|
self.assertNotEquals(None, result)
|
||||||
|
|
||||||
|
def test_filter_in_subject(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = ExampleAccount(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account12 = ExampleAccount(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
message = Message(from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com",
|
||||||
|
subject="help dalkjdjhbd",
|
||||||
|
body="")
|
||||||
|
result = self.handler.filter(message, None)
|
||||||
|
self.assertNotEquals(None, result)
|
||||||
|
|
||||||
|
def test_filter_wrong_message(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = ExampleAccount(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account12 = ExampleAccount(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
message = Message(from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com",
|
||||||
|
subject="",
|
||||||
|
body="hepl")
|
||||||
|
result = self.handler.filter(message, None)
|
||||||
|
self.assertEquals(None, result)
|
||||||
|
|
||||||
|
def test_handle(self):
|
||||||
|
user1 = User(jid="user1@test.com")
|
||||||
|
account11 = ExampleAccount(user=user1,
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account12 = ExampleAccount(user=user1,
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
message = Message(from_jid="user1@test.com",
|
||||||
|
to_jid="account11@jcl.test.com",
|
||||||
|
subject="",
|
||||||
|
body="help")
|
||||||
|
messages = self.handler.handle(message, Lang.en, account11)
|
||||||
|
self.assertEquals(len(messages), 1)
|
||||||
|
self.assertEquals(messages[0].get_from(), "account11@jcl.test.com")
|
||||||
|
self.assertEquals(messages[0].get_to(), "user1@test.com")
|
||||||
|
self.assertEquals(messages[0].get_subject(), Lang.en.help_message_subject)
|
||||||
|
self.assertEquals(messages[0].get_body(), Lang.en.help_message_body)
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
test_suite = unittest.TestSuite()
|
test_suite = unittest.TestSuite()
|
||||||
test_suite.addTest(unittest.makeSuite(PasswordMessageHandler_TestCase, 'test'))
|
test_suite.addTest(unittest.makeSuite(PasswordMessageHandler_TestCase, 'test'))
|
||||||
|
test_suite.addTest(unittest.makeSuite(HelpMessageHandler_TestCase, 'test'))
|
||||||
return test_suite
|
return test_suite
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@@ -237,6 +237,9 @@ class Lang:
|
|||||||
account_disabled = u"This account is disabled"
|
account_disabled = u"This account is disabled"
|
||||||
account_error = u"This account has an error"
|
account_error = u"This account has an error"
|
||||||
|
|
||||||
|
help_message_subject = u"Help"
|
||||||
|
help_message_body = u"No help"
|
||||||
|
|
||||||
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"
|
||||||
@@ -419,6 +422,9 @@ class Lang:
|
|||||||
account_disabled = u"Ce compte est désactivé"
|
account_disabled = u"Ce compte est désactivé"
|
||||||
account_error = u"Ce compte est en erreur"
|
account_error = u"Ce compte est en erreur"
|
||||||
|
|
||||||
|
help_message_subject = u"Aide"
|
||||||
|
help_message_body = u"Pas d'aide !"
|
||||||
|
|
||||||
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"
|
||||||
|
|||||||
@@ -239,6 +239,9 @@ class Language_TestCase(unittest.TestCase):
|
|||||||
self.assertNotEquals(self.lang_class.account_disabled, None)
|
self.assertNotEquals(self.lang_class.account_disabled, None)
|
||||||
self.assertNotEquals(self.lang_class.account_error, None)
|
self.assertNotEquals(self.lang_class.account_error, None)
|
||||||
|
|
||||||
|
self.assertNotEquals(self.lang_class.help_message_subject, None)
|
||||||
|
self.assertNotEquals(self.lang_class.help_message_body, 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