Skip to content

Commit 225da21

Browse files
authored
Merge pull request #228 from SyaOS/fix-admin-action
Fix get_new_mail admin action.
2 parents c8751f0 + b3c38be commit 225da21

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

django_mailbox/admin.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020

2121

2222
def get_new_mail(mailbox_admin, request, queryset):
23-
for mailbox in queryset.all():
24-
logger.debug('Receiving mail for %s' % mailbox)
25-
mailbox.get_new_mail()
23+
queryset.get_new_mail()
2624

2725

2826
get_new_mail.short_description = _('Get new mail')

django_mailbox/models.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,21 @@
3636
logger = logging.getLogger(__name__)
3737

3838

39-
class ActiveMailboxManager(models.Manager):
39+
class MailboxQuerySet(models.QuerySet):
40+
def get_new_mail(self):
41+
count = 0
42+
for mailbox in self.all():
43+
logger.debug('Receiving mail for %s' % mailbox)
44+
count += sum(1 for i in mailbox.get_new_mail())
45+
logger.debug('Received %d %s.', count, 'mails' if count != 1 else 'mail')
46+
47+
48+
class MailboxManager(models.Manager):
49+
def get_queryset(self):
50+
return MailboxQuerySet(self.model, using=self._db)
51+
52+
53+
class ActiveMailboxManager(MailboxManager):
4054
def get_queryset(self):
4155
return super().get_queryset().filter(
4256
active=True,
@@ -106,7 +120,7 @@ class Mailbox(models.Model):
106120
null=True
107121
)
108122

109-
objects = models.Manager()
123+
objects = MailboxManager()
110124
active_mailboxes = ActiveMailboxManager()
111125

112126
@property

django_mailbox/tests/test_mailbox.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,13 @@ def test_get_new_mail_update_last_polling(self):
3434
self.assertEqual(mailbox.last_polling, None)
3535
list(mailbox.get_new_mail())
3636
self.assertNotEqual(mailbox.last_polling, None)
37+
38+
def test_queryset_get_new_mail(self):
39+
mailbox = Mailbox.objects.create(uri="mbox://" + os.path.join(
40+
os.path.dirname(__file__),
41+
'messages',
42+
'generic_message.eml',
43+
))
44+
Mailbox.objects.filter(pk=mailbox.pk).get_new_mail()
45+
mailbox.refresh_from_db()
46+
self.assertNotEqual(mailbox.last_polling, None)

0 commit comments

Comments
 (0)