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

View File

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