""" This file contains celery tasks for notifications. """ from celery import shared_task from celery.utils.log import get_task_logger from django.db import transaction from edx_django_utils.monitoring import set_code_owner_attribute from common.djangoapps.student.models import CourseEnrollment from openedx.core.djangoapps.notifications.models import CourseNotificationPreference logger = get_task_logger(__name__) @shared_task(bind=True, ignore_result=True) @set_code_owner_attribute @transaction.atomic def create_course_notification_preferences_for_courses(self, course_ids): """ This task creates Course Notification Preferences for users in courses. """ logger.info('Running task create_course_notification_preferences') newly_created = 0 for course_id in course_ids: enrollments = CourseEnrollment.objects.filter(course_id=course_id, is_active=True) logger.info(f'Found {enrollments.count()} enrollments for course {course_id}') logger.info(f'Creating Course Notification Preferences for course {course_id}') for enrollment in enrollments: _, created = CourseNotificationPreference.objects.get_or_create( user=enrollment.user, course_id=course_id ) if created: newly_created += 1 logger.info( f'CourseNotificationPreference back-fill completed for course {course_id}.\n' f'Newly created course preferences: {newly_created}.\n' ) logger.info('Completed task create_course_notification_preferences')