Coverage for src/expo_notifications/models/ticket.py: 100%
17 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 django.db import models
2from exponent_server_sdk import PushTicket
4from expo_notifications.managers import TicketManager
7class Ticket(models.Model):
8 objects = TicketManager()
10 message = models.ForeignKey(
11 to="expo_notifications.Message",
12 on_delete=models.CASCADE,
13 related_name="tickets",
14 )
16 is_success = models.BooleanField()
18 external_id = models.CharField(
19 max_length=64,
20 blank=True,
21 )
23 error_message = models.TextField(
24 blank=True,
25 )
27 date_received = models.DateTimeField()
29 def __str__(self) -> str:
30 return f"Ticket #{self.pk}"
32 def to_push_ticket(self) -> PushTicket:
33 return PushTicket(
34 push_message=self.message.to_push_message(),
35 status=(
36 PushTicket.SUCCESS_STATUS
37 if self.is_success
38 else PushTicket.ERROR_STATUS
39 ),
40 message=self.error_message or None,
41 details=None,
42 id=self.external_id,
43 )
45 def check_receipt(self) -> None:
46 from expo_notifications.tasks import check_receipts
48 check_receipts.delay_on_commit([self.pk])