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, \
|
||||
AccountTypeDiscoGetInfoHandler, RootDiscoGetItemsHandler, \
|
||||
AccountTypeDiscoGetItemsHandler
|
||||
from jcl.jabber.message import PasswordMessageHandler
|
||||
from jcl.jabber.message import PasswordMessageHandler, HelpMessageHandler
|
||||
import jcl.jabber.command as command
|
||||
from jcl.jabber.command import CommandDiscoGetItemsHandler, \
|
||||
CommandDiscoGetInfoHandler, JCLCommandManager, \
|
||||
@@ -753,7 +753,8 @@ class JCLComponent(Component, object):
|
||||
self.handle_message)
|
||||
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):
|
||||
"""Stop method handler
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
|
||||
import re
|
||||
|
||||
from pyxmpp.message import Message
|
||||
|
||||
from jcl.jabber import Handler
|
||||
import jcl.model.account as 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(),
|
||||
stanza.get_body(),
|
||||
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.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 as model
|
||||
from jcl.model.account import Account, User
|
||||
@@ -133,9 +133,99 @@ class PasswordMessageHandler_TestCase(JCLTestCase):
|
||||
self.assertEquals(account11.password, "secret")
|
||||
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():
|
||||
test_suite = unittest.TestSuite()
|
||||
test_suite.addTest(unittest.makeSuite(PasswordMessageHandler_TestCase, 'test'))
|
||||
test_suite.addTest(unittest.makeSuite(HelpMessageHandler_TestCase, 'test'))
|
||||
return test_suite
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -237,6 +237,9 @@ class Lang:
|
||||
account_disabled = u"This account is disabled"
|
||||
account_error = u"This account has an error"
|
||||
|
||||
help_message_subject = u"Help"
|
||||
help_message_body = u"No help"
|
||||
|
||||
class fr:
|
||||
component_name = u"composant générique Jabber Component Library"
|
||||
register_title = u"Enregistrement d'un nouveau compte"
|
||||
@@ -419,6 +422,9 @@ class Lang:
|
||||
account_disabled = u"Ce compte est désactivé"
|
||||
account_error = u"Ce compte est en erreur"
|
||||
|
||||
help_message_subject = u"Aide"
|
||||
help_message_body = u"Pas d'aide !"
|
||||
|
||||
class nl:
|
||||
# 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"
|
||||
|
||||
@@ -239,6 +239,9 @@ class Language_TestCase(unittest.TestCase):
|
||||
self.assertNotEquals(self.lang_class.account_disabled, 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):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.fr
|
||||
|
||||
Reference in New Issue
Block a user