diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 6ca9884..017743b 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -408,17 +408,16 @@ class Mailbox(models.Model): new_mail = [] connection = self.get_connection() if not connection: - return new_mail + return for message in connection.get_message(condition): msg = self.process_incoming_message(message) if not msg is None: - new_mail.append(msg) + yield msg self.last_polling = now() if django.VERSION >= (1, 5): # Django 1.5 introduces update_fields self.save(update_fields=['last_polling']) else: self.save() - return new_mail def __str__(self): return self.name diff --git a/django_mailbox/tests/base.py b/django_mailbox/tests/base.py index 5553aa1..4884765 100644 --- a/django_mailbox/tests/base.py +++ b/django_mailbox/tests/base.py @@ -60,14 +60,24 @@ class EmailMessageTestCase(TestCase): super(EmailMessageTestCase, self).setUp() def _get_new_messages(self, mailbox, condition=None): - maximum_wait = time.time() + self.maximum_wait_seconds - while True: - if time.time() > maximum_wait: - raise EmailIntegrationTimeout() + start_time = time.time() + # wait until there is at least one message + while time.time() - start_time < self.maximum_wait_seconds: + messages = self.mailbox.get_new_mail(condition) - if messages: - return messages - time.sleep(5) + + try: + # check if generator contains at least one element + message = next(messages) + yield message + for message in messages: + yield message + return + + except StopIteration: + time.sleep(5) + + raise EmailIntegrationTimeout() def _get_email_as_text(self, name): with open( diff --git a/django_mailbox/tests/test_integration_imap.py b/django_mailbox/tests/test_integration_imap.py index 96c3a6e..1110f69 100644 --- a/django_mailbox/tests/test_integration_imap.py +++ b/django_mailbox/tests/test_integration_imap.py @@ -64,7 +64,8 @@ class TestImap(EmailMessageTestCase): self.mailbox, condition=lambda m: m['subject'] == self.arbitrary_identifier ) + message = next(messages) - self.assertEqual(1, len(messages)) - self.assertEqual(messages[0].subject, self.arbitrary_identifier) - self.assertEqual(messages[0].text, text_content) + self.assertEqual(message.subject, self.arbitrary_identifier) + self.assertEqual(message.text, text_content) + self.assertEqual(0, len(list(messages))) diff --git a/django_mailbox/tests/test_mailbox.py b/django_mailbox/tests/test_mailbox.py index 10fa904..b55e70c 100644 --- a/django_mailbox/tests/test_mailbox.py +++ b/django_mailbox/tests/test_mailbox.py @@ -32,5 +32,5 @@ class TestMailbox(TestCase): 'generic_message.eml', )) self.assertEqual(mailbox.last_polling, None) - mailbox.get_new_mail() + list(mailbox.get_new_mail()) self.assertNotEqual(mailbox.last_polling, None)