Support for multiple feeder handlers

darcs-hash:20081104072233-86b55-e6450860c2c462f5007bdd173d493eef00f2dddc.gz
This commit is contained in:
David Rousselie
2008-11-04 08:22:33 +01:00
parent 1a56293d15
commit 5fd76ef497
5 changed files with 62 additions and 34 deletions

View File

@@ -27,20 +27,16 @@ JCL base component
__revision__ = "$Id: component.py,v 1.3 2005/09/18 20:24:07 dax Exp $"
import sys
import threading
import logging
import signal
import re
import traceback
import string
import time
import socket
import string
from Queue import Queue
import pyxmpp.error as error
from pyxmpp.jid import JID
from pyxmpp.jabberd.component import Component
from pyxmpp.message import Message

View File

@@ -31,8 +31,6 @@ import logging
from jcl.jabber import Handler
from jcl.jabber.component import JCLComponent, AccountManager
from jcl.lang import Lang
import jcl.model as model
from jcl.model import account
from jcl.jabber.command import JCLCommandManager
from pyxmpp.message import Message
@@ -66,14 +64,15 @@ class FeederComponent(JCLComponent):
account_manager_class=account_manager_class,
command_manager_class=command_manager_class)
# Define default feeder and sender, can be override
self.handler = FeederHandler(Feeder(self), Sender(self))
self.tick_handlers = [FeederHandler(Feeder(self), Sender(self))]
self.__logger = logging.getLogger("jcl.jabber.FeederComponent")
def handle_tick(self):
"""Implement main feed/send behavior"""
self.handler.handle(\
for handler in self.tick_handlers:
handler.handle(\
None, self.lang.get_default_lang_class(),
self.handler.filter(None,
handler.filter(None,
self.lang.get_default_lang_class()))
class Feeder(object):
@@ -136,14 +135,6 @@ class FeederHandler(Handler):
self.feeder = feeder
self.sender = sender
def filter(self, stanza, lang_class):
"""
Filter account to be processed by the handler
return all accounts.
"""
accounts = account.get_all_accounts()
return accounts
def handle(self, stanza, lang_class, data):
"""
Apply actions to do on given accounts

View File

@@ -152,7 +152,7 @@ class AccountPresenceSubscribeHandler(Handler):
filter = jabber.get_account_filter
def handle(self, stanza, lang_class, data):
"""Handle \"subscribe\" iq sent to an account JID"""
"""Handle 'subscribe' iq sent to an account JID"""
return [stanza.make_accept_response()]
class RootPresenceSubscribeHandler(AccountPresenceSubscribeHandler):
@@ -161,7 +161,7 @@ class RootPresenceSubscribeHandler(AccountPresenceSubscribeHandler):
filter = jabber.get_accounts_root_filter
def handle(self, stanza, lang_class, data):
"""Handle \"subscribe\" iq sent to component JID"""
"""Handle 'subscribe' iq sent to component JID"""
if list(data) != []:
return AccountPresenceSubscribeHandler.handle(self, stanza,
lang_class, None)
@@ -174,7 +174,7 @@ class AccountPresenceUnsubscribeHandler(Handler):
filter = jabber.get_account_filter
def handle(self, stanza, lang_class, data):
"""Handle \"unsubscribe\" iq sent to account JID"""
"""Handle 'unsubscribe' iq sent to account JID"""
from_jid = stanza.get_from()
_account = data
return self.component.account_manager.remove_account(_account, from_jid)
@@ -185,7 +185,7 @@ class RootPresenceUnsubscribeHandler(Handler):
filter = jabber.get_accounts_root_filter
def handle(self, stanza, lang_class, data):
"""Handle \"unsubscribe\" iq sent to account JID"""
"""Handle 'unsubscribe' iq sent to account JID"""
from_jid = stanza.get_from()
_account = data
return self.component.account_manager.remove_all_accounts(from_jid)

View File

@@ -107,12 +107,14 @@ class FeederComponent_TestCase(JCLComponent_TestCase):
account2 = Account(user=User(jid="user2@test.com"),
name="account2",
jid="account2@jcl.test.com")
self.comp.handler.feeder = AccountFeeder(self.comp)
self.comp.handler.sender = MessageSender(self.comp)
self.comp.tick_handlers = [FeederHandler(AccountFeeder(self.comp),
MessageSender(self.comp)),
FeederHandler(AccountFeeder(self.comp),
MessageSender(self.comp))]
self.comp.handle_tick()
messages_sent = self.comp.stream.sent
self.assertEquals(len(messages_sent), 6)
self.assertEquals(len(messages_sent), 12)
self.assertEquals(messages_sent[0].get_from(), "account11@jcl.test.com")
self.assertEquals(messages_sent[0].get_to(), "user1@test.com")
self.assertEquals(messages_sent[0].get_subject(),
@@ -152,6 +154,45 @@ class FeederComponent_TestCase(JCLComponent_TestCase):
self.assertEquals(messages_sent[5].get_body(),
"jid: account2@jcl.test.com")
self.assertEquals(messages_sent[6].get_from(), "account11@jcl.test.com")
self.assertEquals(messages_sent[6].get_to(), "user1@test.com")
self.assertEquals(messages_sent[6].get_subject(),
"Simple Message for account account11")
self.assertEquals(messages_sent[6].get_body(),
"user_jid: user1@test.com")
self.assertEquals(messages_sent[7].get_from(), "account11@jcl.test.com")
self.assertEquals(messages_sent[7].get_to(), "user1@test.com")
self.assertEquals(messages_sent[7].get_subject(),
"Simple Message for account account11")
self.assertEquals(messages_sent[7].get_body(),
"jid: account11@jcl.test.com")
self.assertEquals(messages_sent[8].get_from(), "account12@jcl.test.com")
self.assertEquals(messages_sent[8].get_to(), "user1@test.com")
self.assertEquals(messages_sent[8].get_subject(),
"Simple Message for account account12")
self.assertEquals(messages_sent[8].get_body(),
"user_jid: user1@test.com")
self.assertEquals(messages_sent[9].get_from(), "account12@jcl.test.com")
self.assertEquals(messages_sent[9].get_to(), "user1@test.com")
self.assertEquals(messages_sent[9].get_subject(),
"Simple Message for account account12")
self.assertEquals(messages_sent[9].get_body(),
"jid: account12@jcl.test.com")
self.assertEquals(messages_sent[10].get_from(), "account2@jcl.test.com")
self.assertEquals(messages_sent[10].get_to(), "user2@test.com")
self.assertEquals(messages_sent[10].get_subject(),
"Simple Message for account account2")
self.assertEquals(messages_sent[10].get_body(),
"user_jid: user2@test.com")
self.assertEquals(messages_sent[11].get_from(), "account2@jcl.test.com")
self.assertEquals(messages_sent[11].get_to(), "user2@test.com")
self.assertEquals(messages_sent[11].get_subject(),
"Simple Message for account account2")
self.assertEquals(messages_sent[11].get_body(),
"jid: account2@jcl.test.com")
class Feeder_TestCase(unittest.TestCase):
def test_feed_exist(self):
feeder = Feeder()
@@ -208,7 +249,7 @@ class HeadlineSender_TestCase(MessageSender_TestCase):
class FeederHandler_TestCase(JCLTestCase):
def setUp(self):
JCLTestCase.setUp(self, tables=[Account, ExampleAccount, User])
self.handler = FeederHandler(FeederMock(), SenderMock())
self.tick_handlers = [FeederHandler(FeederMock(), SenderMock())]
def test_filter(self):
model.db_connect()
@@ -218,7 +259,7 @@ class FeederHandler_TestCase(JCLTestCase):
account11 = ExampleAccount(user=User(jid="user1@test.com"),
name="account11",
jid="account11@jcl.test.com")
accounts = self.handler.filter(None, None)
accounts = self.tick_handlers[0].filter(None, None)
i = 0
for _account in accounts:
i += 1
@@ -237,8 +278,8 @@ class FeederHandler_TestCase(JCLTestCase):
account12 = ExampleAccount(user=User(jid="user2@test.com"),
name="account12",
jid="account12@jcl.test.com")
accounts = self.handler.handle(None, None, [account11, account12])
sent = self.handler.sender.sent
accounts = self.tick_handlers[0].handle(None, None, [account11, account12])
sent = self.tick_handlers[0].sender.sent
self.assertEquals(len(sent), 2)
self.assertEquals(sent[0], (account11, ("subject", "body")))
self.assertEquals(sent[1], (account12, ("subject", "body")))
@@ -253,8 +294,8 @@ class FeederHandler_TestCase(JCLTestCase):
account12 = ExampleAccount(user=User(jid="user2@test.com"),
name="account12",
jid="account12@jcl.test.com")
accounts = self.handler.handle(None, None, [account11, account12])
sent = self.handler.sender.sent
accounts = self.tick_handlers[0].handle(None, None, [account11, account12])
sent = self.tick_handlers[0].sender.sent
self.assertEquals(len(sent), 1)
self.assertEquals(sent[0], (account12, ("subject", "body")))
model.db_disconnect()