Example #1
0
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))
Example #2
0
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))
Example #3
0
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)))
Example #4
0
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)))
Example #5
0
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())
Example #6
0
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)