""" Signal handlers for the bulk_email app """ from django.dispatch import receiver from common.djangoapps.student.models import CourseEnrollment from openedx.core.djangoapps.user_api.accounts.signals import USER_RETIRE_MAILINGS from .models import Optout @receiver(USER_RETIRE_MAILINGS) def force_optout_all(sender, **kwargs): # lint-amnesty, pylint: disable=unused-argument """ When a user is retired from all mailings this method will create an Optout row for any courses they may be enrolled in. """ user = kwargs.get('user', None) if not user: raise TypeError('Expected a User type, but received None.') for enrollment in CourseEnrollment.objects.filter(user=user): Optout.objects.get_or_create(user=user, course_id=enrollment.course.id)