Coverage for src/expo_notifications/managers/message_manager.py: 100%
27 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-10 02:00 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-10 02:00 +0000
1from typing import TYPE_CHECKING
3from django.db import models, transaction
5if TYPE_CHECKING:
6 from expo_notifications.models import Message # pragma: no cover
9class MessageQueryset(models.QuerySet):
10 def send(self) -> None:
11 from expo_notifications.tasks import send_messages
13 message_pks = list(self.values_list("pk", flat=True))
15 if message_pks:
16 send_messages.delay_on_commit(message_pks)
19class MessageManager(models.Manager):
20 def get_queryset(self) -> MessageQueryset:
21 return MessageQueryset(self.model, using=self._db)
23 @transaction.atomic
24 def send(self, **kwargs) -> "Message":
25 from expo_notifications.tasks import send_messages
27 message = self.create(**kwargs)
28 message_pks = [message.pk]
30 send_messages.delay_on_commit(message_pks)
32 return message
34 @transaction.atomic
35 def bulk_send(self, *args, **kwargs) -> list["Message"]:
36 from expo_notifications.tasks import send_messages
38 messages = self.bulk_create(*args, **kwargs)
39 message_pks = [message.pk for message in messages]
41 if message_pks:
42 send_messages.delay_on_commit(message_pks)
44 return messages