def on_user_updated(sender, instance, **kwargs): """ Check for retired usernames. """ # Check only at User creation time and when not raw. if not instance.id and not kwargs['raw']: prefix_to_check = getattr(settings, 'RETIRED_USERNAME_PREFIX', None) if prefix_to_check: # Check for username that's too close to retired username format. if instance.username.startswith(prefix_to_check): raise AccountValidationError( USERNAME_EXISTS_MSG_FMT.format(username=instance.username), field="username") # Check for a retired username. if is_username_retired(instance.username): raise AccountValidationError( USERNAME_EXISTS_MSG_FMT.format(username=instance.username), field="username") # Check for a retired email. if is_email_retired(instance.email): raise AccountValidationError( EMAIL_EXISTS_MSG_FMT.format(email=instance.email), field="email")
def enroll_email(course_id, student_email, auto_enroll=False, email_students=False, email_params=None, language=None): """ Enroll a student by email. `student_email` is student's emails e.g. "*****@*****.**" `auto_enroll` determines what is put in CourseEnrollmentAllowed.auto_enroll if auto_enroll is set, then when the email registers, they will be enrolled in the course automatically. `email_students` determines if student should be notified of action by email. `email_params` parameters used while parsing email templates (a `dict`). `language` is the language used to render the email. returns two EmailEnrollmentState's representing state before and after the action. """ previous_state = EmailEnrollmentState(course_id, student_email) enrollment_obj = None if previous_state.user and User.objects.get(email=student_email).is_active: # if the student is currently unenrolled, don't enroll them in their # previous mode # for now, White Labels use the # "honor" course_mode. Given the change to use "audit" as the default # course_mode in Open edX, we need to be backwards compatible with # how White Labels approach enrollment modes. if CourseMode.is_white_label(course_id): course_mode = CourseMode.HONOR else: course_mode = None if previous_state.enrollment: course_mode = previous_state.mode enrollment_obj = CourseEnrollment.enroll_by_email(student_email, course_id, course_mode) if email_students: email_params['message_type'] = 'enrolled_enroll' email_params['email_address'] = student_email email_params['full_name'] = previous_state.full_name if is_testing_environment(): send_mail_to_student(student_email, email_params, language=language) else: compose_and_send_adg_course_enrollment_invitation_email(student_email, email_params) elif not is_email_retired(student_email): cea, _ = CourseEnrollmentAllowed.objects.get_or_create(course_id=course_id, email=student_email) cea.auto_enroll = auto_enroll cea.save() if email_students: email_params['message_type'] = 'allowed_enroll' email_params['email_address'] = student_email if is_testing_environment(): send_mail_to_student(student_email, email_params, language=language) else: compose_and_send_adg_course_enrollment_invitation_email(student_email, email_params) after_state = EmailEnrollmentState(course_id, student_email) return previous_state, after_state, enrollment_obj
def test_is_email_retired_is_retired(retirement_user): """ Check functionality of is_email_retired when email is retired """ original_email = retirement_user.email retired_email = get_retired_email_by_email(retirement_user.email) # Fake email retirement. retirement_user.email = retired_email retirement_user.save() assert is_email_retired(original_email)
def test_is_email_retired_is_retired(retirement_user): # lint-amnesty, pylint: disable=redefined-outer-name """ Check functionality of is_email_retired when email is retired """ original_email = retirement_user.email retired_email = get_retired_email_by_email(retirement_user.email) # Fake email retirement. retirement_user.email = retired_email retirement_user.save() assert is_email_retired(original_email)
def test_is_email_retired_not_retired(retirement_user): """ Check functionality of is_email_retired when email is not retired """ assert not is_email_retired(retirement_user.email)
def test_is_email_retired_not_retired(retirement_user): # lint-amnesty, pylint: disable=redefined-outer-name """ Check functionality of is_email_retired when email is not retired """ assert not is_email_retired(retirement_user.email)