44
55from asgiref .sync import async_to_sync
66from channels .layers import get_channel_layer
7+ from django .conf import settings
8+ from django .contrib .auth .models import User
9+ from django .core .mail import send_mail
710from django .db import models
811from django .db .models .signals import post_save
912from django .dispatch import receiver
13+ from django .template .loader import render_to_string
1014from django .utils import timezone
1115
1216from .project import Project
@@ -25,6 +29,7 @@ class TaskResult(models.Model):
2529 error = models .TextField (blank = True , default = "" )
2630 created = models .DateTimeField (auto_now_add = True , editable = False )
2731 completed = models .DateTimeField (null = True )
32+ subscribers = models .ManyToManyField (User , related_name = "task_subscriptions" , blank = True )
2833
2934 project_filter_path = "project"
3035 project_filter_allow_null = True
@@ -53,6 +58,19 @@ def complete(self):
5358 self .status = f"Completed in { seconds :.2f} seconds."
5459 self .save ()
5560
61+ for subscriber in self .subscribers .all ():
62+ subject = "GeoDatalytics Task Completed"
63+ message = render_to_string (
64+ "uvdat/email_task_complete.txt" ,
65+ {"task_name" : self .name , "link" : settings .UVDAT_WEB_URL },
66+ )
67+ send_mail (
68+ subject = subject ,
69+ message = message ,
70+ from_email = None ,
71+ recipient_list = [subscriber ],
72+ )
73+
5674
5775@receiver (post_save , sender = TaskResult )
5876def result_post_save (sender , instance , ** kwargs ):
0 commit comments