Use SEEN and FLAGGED to manage mail states (processing, processed)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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'])
|
||||
|
||||
@@ -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'])
|
||||
|
||||
Reference in New Issue
Block a user