diff --git a/docs/source/index.rst b/docs/source/index.rst index 773239e..d7a7da8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -149,10 +149,12 @@ triggered. Mails are flagged according to their state, in the ``process_messages`` method: -* unprocessed: MailBot hasn't started looking at this mail, it doesn't have the - ``PROCESSING`` nor the ``PROCESSED`` flags -* ``PROCESSING``: MailBot is checking callbacks, and triggering them if needed -* ``PROCESSED``: MailBot is done with this mail, and won't process it anymore +* unread (unseen): mail to be processed by MailBot +* read (seen): + - starred (flagged): MailBot is checking callbacks, and triggering them if + needed, the mail is being processed + - not starred (unflagged): MailBot is done with this mail, and won't process + it anymore Specifying rules diff --git a/mailbot/livetests/test_mail_received.py b/mailbot/livetests/test_mail_received.py index fd97fae..8ba0317 100644 --- a/mailbot/livetests/test_mail_received.py +++ b/mailbot/livetests/test_mail_received.py @@ -32,6 +32,13 @@ class MailReceivedTest(MailBotTestCase): def _delete_folder(self): """Delete an IMAP folder, if it exists.""" if self.mb.client.folder_exists(self.home_folder): + self.mb.client.select_folder(self.home_folder) + messages = self.mb.client.search('ALL') + if messages: + self.mb.client.remove_flags(messages, + ['\\Seen', '\\Flagged']) + self.mb.client.delete_messages(messages) + self.mb.client.expunge() self.mb.client.delete_folder(self.home_folder) def test_get_message_ids(self): @@ -58,38 +65,39 @@ class MailReceivedTest(MailBotTestCase): message_from_string('').as_string()) self.assertEqual( self.mb.get_messages(), - {1: {'SEQ': 1, 'RFC822': '\r\n'}, - 2: {'FLAGS': ('\\Seen',), 'SEQ': 2, 'RFC822': '\r\n'}}) + {2: {'FLAGS': ('\\Seen',), 'SEQ': 2, 'RFC822': '\r\n'}}) def test_mark_processing(self): self.mb.client.append(self.home_folder, message_from_string('').as_string()) - ids = self.mb.client.search(['NOT KEYWORD PROCESSING']) + ids = self.mb.client.search(['Unseen']) self.assertEqual(ids, [1]) self.mb.mark_processing(1) - self.assertEquals(self.mb.client.get_flags([1]), {1: ('PROCESSING',)}) - ids = self.mb.client.search(['KEYWORD PROCESSING']) + self.assertEquals(self.mb.client.get_flags([1]), + {1: ('\\Flagged', '\\Seen')}) + ids = self.mb.client.search(['Flagged', 'Seen']) self.assertEqual(ids, [1]) - ids = self.mb.client.search(['NOT KEYWORD PROCESSING']) + ids = self.mb.client.search(['Unseen']) + self.assertEqual(ids, []) + ids = self.mb.client.search(['Unflagged']) self.assertEqual(ids, []) def test_mark_processed(self): self.mb.client.append(self.home_folder, message_from_string('').as_string()) - ids = self.mb.client.search(['NOT KEYWORD PROCESSED']) + ids = self.mb.client.search(['Unseen']) self.assertEqual(ids, [1]) - self.mb.mark_processing(1) self.mb.mark_processed(1) - self.assertEquals(self.mb.client.get_flags([1]), {1: ('PROCESSED',)}) - ids = self.mb.client.search(['KEYWORD PROCESSED']) + self.assertEquals(self.mb.client.get_flags([1]), {1: ('\\Seen',)}) + ids = self.mb.client.search(['Seen']) self.assertEqual(ids, [1]) - ids = self.mb.client.search(['NOT KEYWORD PROCESSED']) + ids = self.mb.client.search(['Flagged']) self.assertEqual(ids, []) def test_process_messages(self): diff --git a/mailbot/mailbot.py b/mailbot/mailbot.py index fcd76f5..fed86d3 100644 --- a/mailbot/mailbot.py +++ b/mailbot/mailbot.py @@ -25,8 +25,7 @@ class MailBot(object): def get_message_ids(self): """Return the list of IDs of messages to process.""" - return self.client.search(['NOT KEYWORD PROCESSED', - 'NOT KEYWORD PROCESSING']) + return self.client.search(['Unseen', 'Unflagged']) def get_messages(self): """Return the list of messages to process.""" @@ -52,10 +51,10 @@ class MailBot(object): self.mark_processed(uid) def mark_processing(self, uid): - """Mark the message corresponding to uid as processed.""" - self.client.add_flags([uid], ['PROCESSING']) + """Mark the message corresponding to uid as being processed.""" + self.client.add_flags([uid], ['\\Flagged', '\\Seen']) def mark_processed(self, uid): """Mark the message corresponding to uid as processed.""" - self.client.remove_flags([uid], ['PROCESSING']) - self.client.add_flags([uid], ['PROCESSED']) + self.client.remove_flags([uid], ['\\Flagged']) + self.client.add_flags([uid], ['\\Seen']) diff --git a/mailbot/tests/test_mailbot.py b/mailbot/tests/test_mailbot.py index 1681d48..3c19bfb 100644 --- a/mailbot/tests/test_mailbot.py +++ b/mailbot/tests/test_mailbot.py @@ -42,7 +42,7 @@ class MailBotTest(MailBotClientTest): res = self.bot.get_message_ids() self.bot.client.search.assert_called_once_with( - ['NOT KEYWORD PROCESSED', 'NOT KEYWORD PROCESSING']) + ['Unseen', 'Unflagged']) self.assertEqual(res, sentinel.id_list) def test_get_messages(self): @@ -106,12 +106,12 @@ class MailBotTest(MailBotClientTest): def test_mark_processing(self): self.bot.mark_processing(sentinel.id) - self.bot.client.add_flags.assert_called_once_with([sentinel.id], - ['PROCESSING']) + self.bot.client.add_flags.assert_called_once_with( + [sentinel.id], ['\\Flagged', '\\Seen']) def test_mark_processed(self): self.bot.mark_processed(sentinel.id) self.bot.client.remove_flags.assert_called_once_with([sentinel.id], - ['PROCESSING']) + ['\\Flagged']) self.bot.client.add_flags.assert_called_once_with([sentinel.id], - ['PROCESSED']) + ['\\Seen'])