Commit fac4e387 by Calen Pennington

Convert RecurringNudge emails to multiple tasks

parent f340f49a
...@@ -2,6 +2,7 @@ from __future__ import print_function ...@@ -2,6 +2,7 @@ from __future__ import print_function
import datetime import datetime
from celery import task
from dateutil.tz import tzutc, gettz from dateutil.tz import tzutc, gettz
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.test.utils import CaptureQueriesContext from django.test.utils import CaptureQueriesContext
...@@ -33,7 +34,26 @@ class ScheduleStartResolver(RecipientResolver): ...@@ -33,7 +34,26 @@ class ScheduleStartResolver(RecipientResolver):
self.target_start_date = target_start_date self.target_start_date = target_start_date
def send(self, msg_type): def send(self, msg_type):
for (user, language, context) in self.build_email_context(): schedule_day.delay(self.target_start_date)
def build_email_context(self):
@task
def schedule_day(target_date):
for hour in range(23):
schedule_hour.delay(target_date, hour)
@task
def schedule_hour(target_date, hour):
for minute in range(60):
schedule_minute.delay(target_date, hour, minute)
@task
def schedule_minute(target_date, hour, minute):
for (user, language, context) in schedules_for_minute(target_date, hour, minute):
msg = msg_type.personalize( msg = msg_type.personalize(
Recipient( Recipient(
user.username, user.username,
...@@ -42,9 +62,10 @@ class ScheduleStartResolver(RecipientResolver): ...@@ -42,9 +62,10 @@ class ScheduleStartResolver(RecipientResolver):
language, language,
context context
) )
ace.send(msg) ace.send.delay(msg)
def build_email_context(self):
def schedules_for_minute(target_date, hour, minute):
schedules = Schedule.objects.select_related( schedules = Schedule.objects.select_related(
'enrollment__user__profile', 'enrollment__user__profile',
'enrollment__course', 'enrollment__course',
...@@ -60,19 +81,17 @@ class ScheduleStartResolver(RecipientResolver): ...@@ -60,19 +81,17 @@ class ScheduleStartResolver(RecipientResolver):
to_attr='tzprefs' to_attr='tzprefs'
), ),
).filter( ).filter(
start__year=self.target_start_date.year, start__year=target_date.year,
start__month=self.target_start_date.month, start__month=target_date.month,
start__day=self.target_start_date.day, start__day=target_date.day,
start__hour=hour,
start__minute=minute,
) )
for schedule in schedules: for schedule in schedules:
enrollment = schedule.enrollment enrollment = schedule.enrollment
user = enrollment.user user = enrollment.user
user_time_zone = tzutc()
for preference in user.tzprefs:
user_time_zone = gettz(preference.value)
course_id_str = str(enrollment.course_id) course_id_str = str(enrollment.course_id)
course = enrollment.course course = enrollment.course
......
from celery import task
@task
def send_email_batch(email_batch):
email_batch.send()
return 'foo'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment