Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 26 additions & 8 deletions osf/models/notification_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from website import settings
from enum import Enum
from osf.utils.caching import ttl_cached_property
from framework import sentry


def get_default_frequency_choices():
Expand Down Expand Up @@ -222,14 +223,31 @@ def emit(
_is_digest=is_digest,
)
else:
subscription, created = NotificationSubscription.objects.get_or_create(
notification_type=self,
user=user,
content_type=content_type,
object_id=subscribed_object.pk if subscribed_object else None,
defaults={'message_frequency': message_frequency},
_is_digest=is_digest,
)
try:
subscription, created = NotificationSubscription.objects.get_or_create(
notification_type=self,
user=user,
content_type=content_type,
object_id=subscribed_object.pk if subscribed_object else None,
defaults={'message_frequency': message_frequency},
_is_digest=is_digest,
)
except NotificationSubscription.MultipleObjectsReturned as e:
# Temporary fix before we deduplicate and add constraints: use the last created one if duplicates found
subscriptions_qs = NotificationSubscription.objects.filter(
notification_type=self,
user=user,
content_type=content_type,
object_id=subscribed_object.pk if subscribed_object else None,
defaults={'message_frequency': message_frequency},
_is_digest=is_digest,
).order_by('id')
sentry.log_exception(e)
count = subscriptions_qs.count()
subscription = subscriptions_qs.last()
sentry.log_message(f'Multiple notification subscriptions found, using the last created one: '
f'[count={count}, user={user._id}, type={self.name}, last={subscription.id}]')

subscription.emit(
destination_address=destination_address,
event_context=event_context,
Expand Down
Loading