Use MailFeederHandler to filter IMAP and POP3 accounts to check mails from
darcs-hash:20070605193822-86b55-6232d00b6ade33147b0b13234a651edb7520f05f.gz
This commit is contained in:
@@ -33,7 +33,7 @@ from jcl.model.account import Account, PresenceAccount
|
|||||||
from jcl.jabber.component import Handler, DefaultSubscribeHandler, \
|
from jcl.jabber.component import Handler, DefaultSubscribeHandler, \
|
||||||
DefaultUnsubscribeHandler, DefaultPresenceHandler
|
DefaultUnsubscribeHandler, DefaultPresenceHandler
|
||||||
from jcl.jabber.feeder import FeederComponent, Feeder, MessageSender, \
|
from jcl.jabber.feeder import FeederComponent, Feeder, MessageSender, \
|
||||||
HeadlineSender
|
HeadlineSender, FeederHandler
|
||||||
|
|
||||||
from jmc.model.account import MailAccount, IMAPAccount, POP3Account, \
|
from jmc.model.account import MailAccount, IMAPAccount, POP3Account, \
|
||||||
SMTPAccount
|
SMTPAccount
|
||||||
@@ -63,8 +63,7 @@ class MailComponent(FeederComponent):
|
|||||||
port,
|
port,
|
||||||
db_connection_str,
|
db_connection_str,
|
||||||
lang=lang)
|
lang=lang)
|
||||||
self.feeder = MailFeeder(self)
|
self.handler = MailFeederHandler(MailFeeder(self), MailSender(self))
|
||||||
self.sender = MailSender(self)
|
|
||||||
self.account_manager.account_classes = (IMAPAccount,
|
self.account_manager.account_classes = (IMAPAccount,
|
||||||
POP3Account,
|
POP3Account,
|
||||||
SMTPAccount)
|
SMTPAccount)
|
||||||
@@ -299,5 +298,12 @@ class MailUnsubscribeHandler(DefaultUnsubscribeHandler, MailHandler):
|
|||||||
def filter(self, stanza, lang_class):
|
def filter(self, stanza, lang_class):
|
||||||
return MailHandler.filter(self, stanza, lang_class)
|
return MailHandler.filter(self, stanza, lang_class)
|
||||||
|
|
||||||
def handle(self, stanza, lang, accounts):
|
def handle(self, stanza, lang_class, accounts):
|
||||||
return DefaultUnsubscribeHandler.handle(self, stanza, lang, accounts)
|
return DefaultUnsubscribeHandler.handle(self, stanza, lang_class, accounts)
|
||||||
|
|
||||||
|
class MailFeederHandler(FeederHandler):
|
||||||
|
def filter(self, stanza, lang_class):
|
||||||
|
"""Return only email account type to check mail from
|
||||||
|
"""
|
||||||
|
accounts = MailAccount.select(orderBy="user_jid")
|
||||||
|
return accounts
|
||||||
|
|||||||
@@ -35,12 +35,13 @@ from jcl.model import account
|
|||||||
from jcl.model.account import Account, PresenceAccount
|
from jcl.model.account import Account, PresenceAccount
|
||||||
from jcl.jabber.tests.component import DefaultSubscribeHandler_TestCase, \
|
from jcl.jabber.tests.component import DefaultSubscribeHandler_TestCase, \
|
||||||
DefaultUnsubscribeHandler_TestCase
|
DefaultUnsubscribeHandler_TestCase
|
||||||
|
from jcl.jabber.tests.feeder import FeederMock, SenderMock
|
||||||
|
|
||||||
from jmc.model.account import MailAccount, IMAPAccount, POP3Account, \
|
from jmc.model.account import MailAccount, IMAPAccount, POP3Account, \
|
||||||
SMTPAccount
|
SMTPAccount
|
||||||
from jmc.jabber.component import MailComponent, SendMailMessageHandler, \
|
from jmc.jabber.component import MailComponent, SendMailMessageHandler, \
|
||||||
RootSendMailMessageHandler, MailHandler, MailSubscribeHandler, \
|
RootSendMailMessageHandler, MailHandler, MailSubscribeHandler, \
|
||||||
MailUnsubscribeHandler, NoAccountError
|
MailUnsubscribeHandler, NoAccountError, MailFeederHandler
|
||||||
from jmc.lang import Lang
|
from jmc.lang import Lang
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
@@ -192,7 +193,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
self.assertFalse(account11.waiting_password_reply)
|
self.assertFalse(account11.waiting_password_reply)
|
||||||
account11.live_email_only = True
|
account11.live_email_only = True
|
||||||
account11.password = None
|
account11.password = None
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertEquals(len(result), 0)
|
self.assertEquals(len(result), 0)
|
||||||
sent = self.comp.stream.sent
|
sent = self.comp.stream.sent
|
||||||
self.assertEquals(len(sent), 1)
|
self.assertEquals(len(sent), 1)
|
||||||
@@ -217,7 +218,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.waiting_password_reply = True
|
account11.waiting_password_reply = True
|
||||||
account11.live_email_only = True
|
account11.live_email_only = True
|
||||||
account11.password = None
|
account11.password = None
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertEquals(result, [])
|
self.assertEquals(result, [])
|
||||||
self.assertTrue(account11.first_check)
|
self.assertTrue(account11.first_check)
|
||||||
self.assertTrue(account11.waiting_password_reply)
|
self.assertTrue(account11.waiting_password_reply)
|
||||||
@@ -237,7 +238,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.first_check = False
|
account11.first_check = False
|
||||||
self.assertEquals(account11.lastcheck, 0)
|
self.assertEquals(account11.lastcheck, 0)
|
||||||
account11.interval = 2
|
account11.interval = 2
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertEquals(result, [])
|
self.assertEquals(result, [])
|
||||||
self.assertEquals(account11.lastcheck, 1)
|
self.assertEquals(account11.lastcheck, 1)
|
||||||
del account.hub.threadConnection
|
del account.hub.threadConnection
|
||||||
@@ -251,7 +252,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.first_check = False
|
account11.first_check = False
|
||||||
account11.lastcheck = 1
|
account11.lastcheck = 1
|
||||||
account11.interval = 2
|
account11.interval = 2
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertEquals(result, [])
|
self.assertEquals(result, [])
|
||||||
self.assertEquals(account11.lastcheck, 0)
|
self.assertEquals(account11.lastcheck, 0)
|
||||||
del account.hub.threadConnection
|
del account.hub.threadConnection
|
||||||
@@ -268,7 +269,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.interval = 2
|
account11.interval = 2
|
||||||
account11.password = None
|
account11.password = None
|
||||||
self.assertFalse(account11.waiting_password_reply)
|
self.assertFalse(account11.waiting_password_reply)
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
self.assertEquals(len(result), 0)
|
self.assertEquals(len(result), 0)
|
||||||
sent = self.comp.stream.sent
|
sent = self.comp.stream.sent
|
||||||
@@ -292,7 +293,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.interval = 2
|
account11.interval = 2
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
account11.get_mail_list = lambda: []
|
account11.get_mail_list = lambda: []
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertTrue(account11.in_error)
|
self.assertTrue(account11.in_error)
|
||||||
self.assertEquals(len(result), 0)
|
self.assertEquals(len(result), 0)
|
||||||
sent = self.comp.stream.sent
|
sent = self.comp.stream.sent
|
||||||
@@ -316,7 +317,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.interval = 2
|
account11.interval = 2
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
account11.get_mail_list = lambda: []
|
account11.get_mail_list = lambda: []
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
self.assertEquals(result, [])
|
self.assertEquals(result, [])
|
||||||
self.assertEquals(account11.lastcheck, 0)
|
self.assertEquals(account11.lastcheck, 0)
|
||||||
@@ -341,7 +342,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
account11.get_mail_list = lambda: [0, 1]
|
account11.get_mail_list = lambda: [0, 1]
|
||||||
account11.get_mail = mock_get_mail
|
account11.get_mail = mock_get_mail
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
self.assertEquals(account11.lastcheck, 0)
|
self.assertEquals(account11.lastcheck, 0)
|
||||||
self.assertFalse(account11.connected)
|
self.assertFalse(account11.connected)
|
||||||
@@ -370,7 +371,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.interval = 2
|
account11.interval = 2
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
account11.get_mail_list = lambda: []
|
account11.get_mail_list = lambda: []
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
self.assertEquals(result, [])
|
self.assertEquals(result, [])
|
||||||
self.assertEquals(account11.lastcheck, 0)
|
self.assertEquals(account11.lastcheck, 0)
|
||||||
@@ -395,7 +396,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
account11.get_mail_list = lambda: [0, 1]
|
account11.get_mail_list = lambda: [0, 1]
|
||||||
account11.get_mail_summary = mock_get_mail_summary
|
account11.get_mail_summary = mock_get_mail_summary
|
||||||
result = self.comp.feeder.feed(account11)
|
result = self.comp.handler.feeder.feed(account11)
|
||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
self.assertEquals(account11.lastcheck, 0)
|
self.assertEquals(account11.lastcheck, 0)
|
||||||
self.assertFalse(account11.connected)
|
self.assertFalse(account11.connected)
|
||||||
@@ -422,7 +423,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
account11.live_email_only = True
|
account11.live_email_only = True
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
continue_checking = self.comp.feeder.initialize_live_email(account11)
|
continue_checking = self.comp.handler.feeder.initialize_live_email(account11)
|
||||||
self.assertEquals(continue_checking, True)
|
self.assertEquals(continue_checking, True)
|
||||||
self.assertFalse(account11.first_check)
|
self.assertFalse(account11.first_check)
|
||||||
self.assertFalse(account11.waiting_password_reply)
|
self.assertFalse(account11.waiting_password_reply)
|
||||||
@@ -445,7 +446,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
account11.live_email_only = True
|
account11.live_email_only = True
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
continue_checking = self.comp.feeder.initialize_live_email(account11)
|
continue_checking = self.comp.handler.feeder.initialize_live_email(account11)
|
||||||
self.assertEquals(continue_checking, False)
|
self.assertEquals(continue_checking, False)
|
||||||
sent = self.comp.stream.sent
|
sent = self.comp.stream.sent
|
||||||
self.assertEquals(len(sent), 1)
|
self.assertEquals(len(sent), 1)
|
||||||
@@ -472,7 +473,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
account11.live_email_only = True
|
account11.live_email_only = True
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
continue_checking = self.comp.feeder.initialize_live_email(account11)
|
continue_checking = self.comp.handler.feeder.initialize_live_email(account11)
|
||||||
self.assertEquals(continue_checking, False)
|
self.assertEquals(continue_checking, False)
|
||||||
sent = self.comp.stream.sent
|
sent = self.comp.stream.sent
|
||||||
self.assertEquals(len(sent), 1)
|
self.assertEquals(len(sent), 1)
|
||||||
@@ -499,7 +500,7 @@ class MailComponent_TestCase(unittest.TestCase):
|
|||||||
self.assertFalse(account11.in_error)
|
self.assertFalse(account11.in_error)
|
||||||
account11.live_email_only = True
|
account11.live_email_only = True
|
||||||
account11.password = "password"
|
account11.password = "password"
|
||||||
continue_checking = self.comp.feeder.initialize_live_email(account11)
|
continue_checking = self.comp.handler.feeder.initialize_live_email(account11)
|
||||||
self.assertFalse(continue_checking)
|
self.assertFalse(continue_checking)
|
||||||
sent = self.comp.stream.sent
|
sent = self.comp.stream.sent
|
||||||
self.assertEquals(len(sent), 1)
|
self.assertEquals(len(sent), 1)
|
||||||
@@ -753,6 +754,53 @@ class MailUnsubscribeHandler_TestCase(DefaultUnsubscribeHandler_TestCase, MailHa
|
|||||||
MailHandler_TestCase.setUp(self)
|
MailHandler_TestCase.setUp(self)
|
||||||
self.handler = MailUnsubscribeHandler()
|
self.handler = MailUnsubscribeHandler()
|
||||||
|
|
||||||
|
class MailFeederHandler_TestCase(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.handler = MailFeederHandler(FeederMock(), SenderMock())
|
||||||
|
if os.path.exists(DB_PATH):
|
||||||
|
os.unlink(DB_PATH)
|
||||||
|
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
|
||||||
|
Account.createTable(ifNotExists=True)
|
||||||
|
PresenceAccount.createTable(ifNotExists=True)
|
||||||
|
MailAccount.createTable(ifNotExists=True)
|
||||||
|
IMAPAccount.createTable(ifNotExists=True)
|
||||||
|
POP3Account.createTable(ifNotExists=True)
|
||||||
|
SMTPAccount.createTable(ifNotExists=True)
|
||||||
|
del account.hub.threadConnection
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.handler = None
|
||||||
|
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
|
||||||
|
SMTPAccount.dropTable(ifExists=True)
|
||||||
|
IMAPAccount.dropTable(ifExists=True)
|
||||||
|
POP3Account.dropTable(ifExists=True)
|
||||||
|
MailAccount.dropTable(ifExists=True)
|
||||||
|
PresenceAccount.dropTable(ifExists=True)
|
||||||
|
Account.dropTable(ifExists=True)
|
||||||
|
del TheURIOpener.cachedURIs['sqlite://' + DB_URL]
|
||||||
|
account.hub.threadConnection.close()
|
||||||
|
del account.hub.threadConnection
|
||||||
|
if os.path.exists(DB_PATH):
|
||||||
|
os.unlink(DB_PATH)
|
||||||
|
|
||||||
|
def test_filter(self):
|
||||||
|
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
|
||||||
|
account11 = SMTPAccount(user_jid="user1@test.com",
|
||||||
|
name="account11",
|
||||||
|
jid="account11@jcl.test.com")
|
||||||
|
account13 = IMAPAccount(user_jid="user3@test.com",
|
||||||
|
name="account13",
|
||||||
|
jid="account13@jcl.test.com")
|
||||||
|
account12 = POP3Account(user_jid="user2@test.com",
|
||||||
|
name="account12",
|
||||||
|
jid="account12@jcl.test.com")
|
||||||
|
accounts = self.handler.filter(None, None)
|
||||||
|
# SQLObject > 0.8 is needed
|
||||||
|
self.assertEquals(accounts.count(), 2)
|
||||||
|
self.assertEquals(accounts[0].name, "account12")
|
||||||
|
self.assertEquals(accounts[1].name, "account13")
|
||||||
|
del account.hub.threadConnection
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
suite = unittest.TestSuite()
|
suite = unittest.TestSuite()
|
||||||
suite.addTest(unittest.makeSuite(MailComponent_TestCase, 'test'))
|
suite.addTest(unittest.makeSuite(MailComponent_TestCase, 'test'))
|
||||||
@@ -761,6 +809,7 @@ def suite():
|
|||||||
suite.addTest(unittest.makeSuite(MailHandler_TestCase, 'test'))
|
suite.addTest(unittest.makeSuite(MailHandler_TestCase, 'test'))
|
||||||
suite.addTest(unittest.makeSuite(MailUnsubscribeHandler_TestCase, 'test'))
|
suite.addTest(unittest.makeSuite(MailUnsubscribeHandler_TestCase, 'test'))
|
||||||
suite.addTest(unittest.makeSuite(MailSubscribeHandler_TestCase, 'test'))
|
suite.addTest(unittest.makeSuite(MailSubscribeHandler_TestCase, 'test'))
|
||||||
|
suite.addTest(unittest.makeSuite(MailFeederHandler_TestCase, 'test'))
|
||||||
return suite
|
return suite
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
Reference in New Issue
Block a user