Source code for notifications.managers

__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)