vbv/server/vbv_lernwelt/notify/management/commands/send_email_reminders.py

57 lines
1.5 KiB
Python

from enum import Enum
import structlog
from vbv_lernwelt.core.base import LoggedCommand
from vbv_lernwelt.notify.email.reminders.assigment import (
send_assignment_reminder_notifications,
)
from vbv_lernwelt.notify.email.reminders.attendance import (
send_attendance_reminder_notifications,
)
logger = structlog.get_logger(__name__)
class ReminderType(Enum):
ASSIGNMENT = "assignment"
ATTENDANCE = "attendance"
ACTIONS = {
ReminderType.ASSIGNMENT: send_assignment_reminder_notifications,
ReminderType.ATTENDANCE: send_attendance_reminder_notifications,
}
class Command(LoggedCommand):
help = "Sends Email Reminder Notifications"
def add_arguments(self, parser):
parser.add_argument(
"--type",
choices=[t.value for t in ReminderType] + ["all"],
required=True,
help="Type of reminder",
)
def handle(self, *args, **options):
reminder_type = options["type"]
if reminder_type == "all":
types = [ReminderType.ASSIGNMENT, ReminderType.ATTENDANCE]
else:
types = [ReminderType(reminder_type)]
results = {t.value: None for t in types}
for reminder in types:
logger.info(f"Starting {reminder.name} reminder notification job")
results[reminder.value] = ACTIONS[reminder]()
logger.info(f"{reminder.name} reminder notification job finished")
self.job_log.json_data = results
self.job_log.save()
logger.info("Reminder notification job finished")