def readable_state(exam_type: int): for et in ExamType.__members__.values(): if exam_type is et.value[0]: return et.value[1] else: raise IllegalArgumentError( message='Unknown question type {}.'.format(exam_type))
def readable_question_type(question_type: int): for q in QuestionType.__members__.values(): if question_type is q.value[0]: return q.value[1] else: raise IllegalArgumentError( message='Unknown question type {}.'.format(question_type))
def readable_user_type(privilege): if type(privilege) is str: for u_type in UserType.__members__.values(): if u_type.name == privilege: return u_type.value[1] elif type(privilege) is int: for u_type in UserType.__members__.values(): if u_type is UserType.Admin: if privilege is UserType.SystemManager.value[0]: return UserType.SystemManager.value[1] elif (privilege & u_type.value[0]) > 0: return u_type.value[1] else: raise IllegalArgumentError(message='Unknown user type {}.'.format(privilege)) else: raise IllegalArgumentError(message='Unknown user type argument which type is {}'.format(type(privilege)))
def readable_user_type(privilege): """ check whether user_type is readable user_type(int or str) """ if isinstance(privilege, str): for u_type in UserType.__members__.values(): if u_type.name == privilege: return u_type.value[1] elif isinstance(privilege, int): for u_type in UserType.__members__.values(): if u_type is UserType.Admin: if privilege is UserType.SystemManager.value[0]: return UserType.SystemManager.value[1] elif (privilege & u_type.value[0]) > 0: return u_type.value[1] else: raise IllegalArgumentError( message='Unknown user type {}.'.format(privilege)) else: raise IllegalArgumentError( message='Unknown user type argument which type is {}'.format( type(privilege)))
def user_multiCreate(request): if request.method == 'POST': if request.POST.get('reg_ids'): new_accounts = [] for account in request.POST.get('reg_ids').split(','): account = account.strip().lower() if not re.match('[a-z0-9]+', account): raise IllegalArgumentError('Account can only contain letters and numbers.') new_accounts.append(account) elif request.FILES.get('users_file',): wb = xlrd.open_workbook(filename=None, file_contents=request.FILES['users_file'].read()) table = wb.sheets()[0] new_accounts = [] for i in range(table.nrows): for j in range(table.ncols): if isinstance(table.cell_value(i, j), float): new_accounts.append(int(table.cell_value(i, j))) else: messages.warning(request, 'Must enter textarea or load a file.') return redirect('user_multiCreate') privilege_value = 0 if request.user.has_perm(UserType.SystemManager): i = 0 for privilege in UserType.__members__.values(): if privilege and request.POST.get('privilege_{}'.format(i)): privilege_value |= privilege.value[0] i += 1 else: privilege_value = UserType.Testee.value[0] new_users = systemmanager.create_users(reg_ids=new_accounts, privilege=privilege_value,) if privilege_value & UserType.Testee.value[0]: Student.objects.bulk_create([Student(stu_id=new_user.reg_id, user=new_user) for new_user in new_users]) messages.success(request, 'Create user "{}" successful.'.format(len(new_users))) return redirect('user_list') else: privileges = UserType.__members__ return render(request, 'user/multi_create_user.html', locals())
def create_users(reg_ids: list, privilege: int): queries = Q() for reg_id in reg_ids: queries |= Q(reg_id=reg_id) existed_users = User.objects.filter(queries) if existed_users: raise IllegalArgumentError("Existed user: {}".format(', '.join([user.reg_id for user in existed_users]))) # bulk_create an object manager method which takes as input an array of objects created using the class constructor User.objects.bulk_create([User(reg_id=reg_id, privilege=privilege, password=make_password(reg_id)) for reg_id in reg_ids]) return User.objects.filter(queries)