def get_access_role_by_role_name(role_name): """ Get the concrete child class of the AccessRole abstract class associated with the string role_name by looking in REGISTERED_ACCESS_ROLES. If there is no class associated with this name, return None. Note that this will only return classes that are registered in _REGISTERED_ACCESS_ROLES. Arguments: role_name: the name of the role """ return _REGISTERED_ACCESS_ROLES.get(role_name, None)
class CourseAccessRoleForm(forms.ModelForm): """Form for adding new Course Access Roles view the Django Admin Panel.""" class Meta(object): model = CourseAccessRole fields = '__all__' email = forms.EmailField(required=True) COURSE_ACCESS_ROLES = [(role_name, role_name) for role_name in REGISTERED_ACCESS_ROLES.keys()] # lint-amnesty, pylint: disable=consider-iterating-dictionary role = forms.ChoiceField(choices=COURSE_ACCESS_ROLES) def clean_course_id(self): """ Validate the course id """ if self.cleaned_data['course_id']: return clean_course_id(self) def clean_org(self): """If org and course-id exists then Check organization name against the given course. """ if self.cleaned_data.get('course_id') and self.cleaned_data['org']: org = self.cleaned_data['org'] org_name = self.cleaned_data.get('course_id').org if org.lower() != org_name.lower(): raise forms.ValidationError( u"Org name {} is not valid. Valid name is {}.".format( org, org_name)) return self.cleaned_data['org'] def clean_email(self): """ Checking user object against given email id. """ email = self.cleaned_data['email'] try: user = User.objects.get(email=email) except Exception: raise forms.ValidationError( # lint-amnesty, pylint: disable=raise-missing-from u"Email does not exist. Could not find {email}. Please re-enter email address" .format(email=email)) return user def clean(self): """ Checking the course already exists in db. """ cleaned_data = super(CourseAccessRoleForm, self).clean() # lint-amnesty, pylint: disable=super-with-arguments if not self.errors: if CourseAccessRole.objects.filter( user=cleaned_data.get("email"), org=cleaned_data.get("org"), course_id=cleaned_data.get("course_id"), role=cleaned_data.get("role")).exists(): raise forms.ValidationError("Duplicate Record.") return cleaned_data def __init__(self, *args, **kwargs): super(CourseAccessRoleForm, self).__init__(*args, **kwargs) # lint-amnesty, pylint: disable=super-with-arguments if self.instance.user_id: self.fields['email'].initial = self.instance.user.email