Refactor feeder result

Do not send stanza directly through component but return stanza to send as feed() result

darcs-hash:20070408175847-86b55-3fa7480d5ebca98748e7d27b778b6ef8c92b6a88.gz
This commit is contained in:
David Rousselie
2007-04-08 19:58:47 +02:00
parent 5be198dabb
commit d49da8d555
2 changed files with 42 additions and 31 deletions

View File

@@ -54,7 +54,7 @@ class MailComponent(FeederComponent):
self.name = "Jabber Mail Component"
self.feeder = MailFeeder(self)
self.sender = MailSender(self)
self.account_classes = [IMAPAccount, POP3Account]
self.account_manager.account_classes = (IMAPAccount, POP3Account)
class MailFeeder(Feeder):
"""Email check"""
@@ -68,18 +68,19 @@ class MailFeeder(Feeder):
"""For live email checking account, mark emails received while
offline as read.
Return a boolean to continue mail checking or not (if waiting for password)"""
result = []
if _account.password is None:
if not _account.waiting_password_reply:
self.component.ask_password(_account,
_account.default_lang_class)
return False
result.extend(self.component.account_manager.ask_password(_account, \
_account.default_lang_class))
return (False, result)
try:
_account.connect()
_account.mark_all_as_read()
_account.disconnect()
_account.first_check = False
_account.in_error = False
return True
return (True, result)
except Exception, e:
if _account.connected:
try:
@@ -87,8 +88,8 @@ class MailFeeder(Feeder):
except:
# We have done everything we could
_account.connected = False
self.component.send_error(_account, e)
return False
result.extend(self.component.account_manager.send_error(_account, e))
return (False, result)
def feed(self, _account):
"""Check for new emails for given MailAccount and return a list of
@@ -96,9 +97,10 @@ class MailFeeder(Feeder):
self.__logger.debug("MailFeeder.feed")
result = []
if _account.first_check and _account.live_email_only:
continue_checking = self.initialize_live_email(_account)
(continue_checking, to_send) = self.initialize_live_email(_account)
result.extend(to_send)
if not continue_checking:
return []
return result
_account.lastcheck += 1
if _account.lastcheck == _account.interval:
_account.lastcheck = 0
@@ -106,9 +108,9 @@ class MailFeeder(Feeder):
if action != PresenceAccount.DO_NOTHING:
try:
if _account.password is None:
self.component.ask_password(_account,
_account.default_lang_class)
return []
result.extend(self.component.account_manager.ask_password(_account, \
_account.default_lang_class))
return result
self.__logger.debug("Checking " + _account.name)
self.__logger.debug("\t" + _account.login \
+ "@" + _account.host)
@@ -153,7 +155,7 @@ class MailFeeder(Feeder):
except:
# We have done everything we could
_account.connected = False
self.component.send_error(_account, e)
result.extend(self.component.account_manager.send_error(_account, e))
return result
class MailSender(Sender):

View File

@@ -178,14 +178,15 @@ class MailComponent_TestCase(unittest.TestCase):
account11.live_email_only = True
account11.password = None
result = self.comp.feeder.feed(account11)
self.assertEquals(result, [])
self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
self.assertTrue(account11.first_check)
self.assertTrue(account11.waiting_password_reply)
self.assertFalse(account11.in_error)
self.assertFalse(account11.connected)
self.assertFalse(account11.has_connected)
self.assertFalse(account11.marked_all_as_read)
self.assertEquals(len(self.comp.stream.sent), 1)
del account.hub.threadConnection
def test_feed_live_email_init_no_password2(self):
@@ -252,11 +253,12 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.waiting_password_reply)
result = self.comp.feeder.feed(account11)
self.assertFalse(account11.in_error)
self.assertEquals(result, [])
self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
self.assertEquals(account11.lastcheck, 0)
self.assertFalse(account11.connected)
self.assertFalse(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 1)
del account.hub.threadConnection
def test_feed_unknown_action(self):
@@ -273,11 +275,12 @@ class MailComponent_TestCase(unittest.TestCase):
account11.get_mail_list = lambda: []
result = self.comp.feeder.feed(account11)
self.assertTrue(account11.in_error)
self.assertEquals(result, [])
self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
self.assertEquals(account11.lastcheck, 0)
self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 1)
del account.hub.threadConnection
def test_feed_retrieve_no_mail(self):
@@ -407,15 +410,15 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error)
account11.live_email_only = True
account11.password = "password"
result = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(result, True)
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(continue_checking, True)
self.assertEquals(result, [])
self.assertFalse(account11.first_check)
self.assertFalse(account11.waiting_password_reply)
self.assertFalse(account11.in_error)
self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected)
self.assertTrue(account11.marked_all_as_read)
self.assertEquals(len(self.comp.stream.sent), 0)
del account.hub.threadConnection
def test_initialize_live_email_connection_error(self):
@@ -431,15 +434,17 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error)
account11.live_email_only = True
account11.password = "password"
result = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(result, False)
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(continue_checking, False)
self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
self.assertTrue(account11.first_check)
self.assertFalse(account11.waiting_password_reply)
self.assertTrue(account11.in_error)
self.assertFalse(account11.connected)
self.assertFalse(account11.has_connected)
self.assertFalse(account11.marked_all_as_read)
self.assertEquals(len(self.comp.stream.sent), 1)
del account.hub.threadConnection
def test_initialize_live_email_mark_as_read_error(self):
@@ -455,15 +460,17 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error)
account11.live_email_only = True
account11.password = "password"
result = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(result, False)
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(continue_checking, False)
self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
self.assertTrue(account11.first_check)
self.assertFalse(account11.waiting_password_reply)
self.assertTrue(account11.in_error)
self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected)
self.assertFalse(account11.marked_all_as_read)
self.assertEquals(len(self.comp.stream.sent), 1)
del account.hub.threadConnection
def test_initialize_live_email_disconnection_error(self):
@@ -479,14 +486,16 @@ class MailComponent_TestCase(unittest.TestCase):
self.assertFalse(account11.in_error)
account11.live_email_only = True
account11.password = "password"
result = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(result, False)
(continue_checking, result) = self.comp.feeder.initialize_live_email(account11)
self.assertEquals(len(result), 1)
self.assertEquals(result[0].get_to(), "test1@test.com")
self.assertEquals(result[0].get_from(), "account11@jmc.test.com")
self.assertEquals(continue_checking, False)
self.assertTrue(account11.first_check)
self.assertFalse(account11.waiting_password_reply)
self.assertTrue(account11.in_error)
self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected)
self.assertTrue(account11.marked_all_as_read)
self.assertEquals(len(self.comp.stream.sent), 1)
del account.hub.threadConnection