From d49da8d55520347dce1e8d311eac943bfa170e28 Mon Sep 17 00:00:00 2001 From: David Rousselie Date: Sun, 8 Apr 2007 19:58:47 +0200 Subject: [PATCH] Refactor feeder result Do not send stanza directly through component but return stanza to send as feed() result darcs-hash:20070408175847-86b55-3fa7480d5ebca98748e7d27b778b6ef8c92b6a88.gz --- src/jmc/jabber/component.py | 28 ++++++++++--------- tests/jmc/jabber/test_component.py | 45 ++++++++++++++++++------------ 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/src/jmc/jabber/component.py b/src/jmc/jabber/component.py index 3229987..27c8a24 100644 --- a/src/jmc/jabber/component.py +++ b/src/jmc/jabber/component.py @@ -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): diff --git a/tests/jmc/jabber/test_component.py b/tests/jmc/jabber/test_component.py index fee32e6..f3a5239 100644 --- a/tests/jmc/jabber/test_component.py +++ b/tests/jmc/jabber/test_component.py @@ -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