__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.db import models
from django.utils import timezone
from datetime import timedelta
[docs]class NotificationQuerySet(models.query.QuerySet):
"""Queryset for Notification model."""
[docs] def unsent(self):
"""Return all non-emailed Notications."""
return self.filter(emailed=False)
[docs] def sent(self):
"""Return all emailed Notications."""
return self.filter(emailed=True)
[docs] def unread(self):
"""Return only unread items in the current queryset."""
return self.filter(unread=True)
[docs] def unread_or_today(self):
"""Return only unread items and those created in the last 24 hours."""
now_min_24 = timezone.now() - timedelta(hours=24)
return self.filter(models.Q(unread=True) | models.Q(created__gt=now_min_24)).distinct()
[docs] def pseudo_unread(self):
"""Return only unread items in the current queryset."""
return self.filter(pseudo_unread=True)
[docs] def read(self):
"""Return only read items in the current queryset."""
return self.filter(unread=False)
[docs] def mark_all_as_read(self, recipient=None):
"""Mark as read any unread messages in the current queryset."""
# We want to filter out read ones, as later we will store
# the time they were marked as read.
qs = self.unread()
if recipient:
qs = qs.filter(recipient=recipient)
return qs.update(unread=False)
[docs] def mark_all_as_pseudo_read(self, recipient=None):
"""Mark as read any unread messages in the current queryset."""
# We want to filter out read ones, as later we will store
# the time they were marked as read.
qs = self.pseudo_unread()
if recipient:
qs = qs.filter(recipient=recipient)
return qs.update(pseudo_unread=False)
[docs] def mark_all_as_unread(self, recipient=None):
"""Mark as unread any read messages in the current queryset."""
qs = self.read()
if recipient:
qs = qs.filter(recipient=recipient)
return qs.update(unread=True)
[docs] def deleted(self):
"""Return only deleted items in the current queryset."""
raise DeprecationWarning
return self.filter(deleted=True)
[docs] def active(self):
"""Return only active(un-deleted) items in the current queryset."""
raise DeprecationWarning
return self.filter(deleted=False)
[docs] def mark_all_as_deleted(self, recipient=None):
"""Mark current queryset as deleted."""
raise DeprecationWarning
qs = self.active()
if recipient:
qs = qs.filter(recipient=recipient)
return qs.update(deleted=True)
[docs] def mark_all_as_active(self, recipient=None):
"""Mark current queryset as active(un-deleted)."""
raise DeprecationWarning
qs = self.deleted()
if recipient:
qs = qs.filter(recipient=recipient)
return qs.update(deleted=False)
[docs] def mark_as_unsent(self, recipient=None):
qs = self.sent()
if recipient:
qs = self.filter(recipient=recipient)
return qs.update(emailed=False)
[docs] def mark_as_sent(self, recipient=None):
qs = self.unsent()
if recipient:
qs = self.filter(recipient=recipient)
return qs.update(emailed=True)