Ejemplo n.º 1
0
def get_student_list(request):
    from quizzo.serializers.limit_offset_search import LimitOffsetSearchSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(LimitOffsetSearchSerializer, request.data)

    from quizzo.models.student import Student
    if request_data.filter_by == "all":
        student_query_set = Student.objects.all().values(
            'id', 'username', 'year')
    else:
        student_query_set = Student.objects.filter(
            username__icontains=request_data.search).values(
                'id', 'username', 'year')
    total = student_query_set.count()
    students_obj = {
        "total":
        total,
        "students":
        student_query_set[request_data.offset:request_data.limit +
                          request_data.offset]
    }
    from quizzo.serializers.teacher_list_response import StudentListResponseType
    students_type_obj = StudentListResponseType(**students_obj)
    from quizzo.serializers.teacher_list_response import StudentListResponseSerializer
    result = StudentListResponseSerializer(students_type_obj)
    return Response(result.data)
Ejemplo n.º 2
0
def get_student_quiz_list(request, username):
    from quizzo.serializers.limit_offset import LimitOffsetSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(LimitOffsetSerializer, request.data)

    from quizzo.models.student import Student
    student_obj = Student.get_student_obj(username)

    from quizzo.models.student_quiz import StudentQuiz
    student_query_set = StudentQuiz.objects.filter(student=student_obj)[
                        request_data.offset:request_data.limit + request_data.offset]

    students_list = []
    for obj in student_query_set:
        temp = {
            "title": obj.quiz.title,
            "marks": obj.marks_obtained,
            "grade": obj.grade
        }
        students_list.append(temp)
    total = student_query_set.count()
    students_obj = {
        "total": total,
        "quizzes": students_list
    }
    from quizzo.serializers.student_quiz_list import StudentQuizListType
    students_type_obj = StudentQuizListType(**students_obj)
    from quizzo.serializers.student_quiz_list import StudentQuizListResponseSerializer
    result = StudentQuizListResponseSerializer(students_type_obj)
    return Response(result.data)
Ejemplo n.º 3
0
    def create(self, validated_data):
        from quizzo.serializers.student_quiz import StudentQuizSerializer
        quizzes_val = []
        quizzes_list_val = validated_data.pop("quizzes", [])
        for each_data in quizzes_list_val:
            each_obj = deserialize(StudentQuizSerializer, each_data, many=False, partial=True)
            quizzes_val.append(each_obj)

        return StudentQuizListType(quizzes=quizzes_val, **validated_data)
Ejemplo n.º 4
0
    def create(self, validated_data):
        from quizzo.serializers.quiz_attempt import QuizAttemptResponseSerializer
        quiz_questions_val = []
        quiz_questions_list_val = validated_data.pop("quiz_questions", [])
        for each_data in quiz_questions_list_val:
            each_obj = deserialize(QuizAttemptResponseSerializer, each_data, many=False, partial=True)
            quiz_questions_val.append(each_obj)

        return QuizAttemptListType(quiz_questions=quiz_questions_val, **validated_data)
Ejemplo n.º 5
0
    def create(self, validated_data):
        from quizzo.serializers.option import OptionSerializer
        options_val = []
        options_list_val = validated_data.pop("options", [])
        for each_data in options_list_val:
            each_obj = deserialize(OptionSerializer,
                                   each_data,
                                   many=False,
                                   partial=True)
            options_val.append(each_obj)

        return QuestionOptionType(options=options_val, **validated_data)
Ejemplo n.º 6
0
    def create(self, validated_data):
        from quizzo.serializers.teacher_student_details import StudentDetailsResponseSerializer
        students_val = []
        students_list_val = validated_data.pop("students", [])
        for each_data in students_list_val:
            each_obj = deserialize(StudentDetailsResponseSerializer,
                                   each_data,
                                   many=False,
                                   partial=True)
            students_val.append(each_obj)

        return StudentListResponseType(students=students_val, **validated_data)
    def create(self, validated_data):
        from quizzo.serializers.leaderboard_response import LeaderboardResponseSerializer
        students_val = []
        students_list_val = validated_data.pop("students", [])
        for each_data in students_list_val:
            each_obj = deserialize(LeaderboardResponseSerializer,
                                   each_data,
                                   many=False,
                                   partial=True)
            students_val.append(each_obj)

        return LeaderboardResponseListType(students=students_val,
                                           **validated_data)
Ejemplo n.º 8
0
    def create(self, validated_data):
        print(validated_data)
        from quizzo.serializers.question_options import QuestionOptionSerializer
        quiz_questions_val = []
        quiz_questions_list_val = validated_data.pop("quiz_questions", [])
        for each_data in quiz_questions_list_val:
            each_obj = deserialize(QuestionOptionSerializer,
                                   each_data,
                                   many=False,
                                   partial=True)
            quiz_questions_val.append(each_obj)

        return QuizResponseType(quiz_questions=quiz_questions_val,
                                **validated_data)
Ejemplo n.º 9
0
def quiz_answers(request, username, quiz_id):
    from quizzo.serializers.quiz_attempt_list import QuizAttemptListSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(QuizAttemptListSerializer, request.data)

    from quizzo.models.option import Option
    from quizzo.models.quiz import Quiz
    quiz_obj = Quiz.objects.get(id=quiz_id)

    questions = quiz_obj.questions.all()
    marks_obtained = 0
    for req_obj in request_data.quiz_questions:
        for obj in questions:
            if req_obj.question_id == obj.id:
                if req_obj.type == "mcq":
                    if req_obj.option_id == obj.answer_id:
                        marks_obtained += obj.marks
                        break
                else:
                    if req_obj.option == Option.objects.get(
                            id=obj.answer_id).content:
                        marks_obtained += obj.marks

    total_question_marks = 0
    for obj in questions:
        total_question_marks += obj.marks

    from quizzo.utils.grade_calculator import grade_calculator
    grade = grade_calculator(total_question_marks, marks_obtained)

    from quizzo.models.student_quiz import StudentQuiz
    from quizzo.models.student import Student
    student_obj = Student.get_student_obj(username)
    studentquiz_obj = StudentQuiz.objects.create(student=student_obj,
                                                 quiz_id=quiz_id,
                                                 marks_obtained=marks_obtained,
                                                 grade=grade)
    from quizzo.models.question import Question
    from quizzo.models.student_quiz_attempt import StudentQuizAttempt
    for obj in request_data.quiz_questions:
        student_attempted_obj = StudentQuizAttempt.objects.create(
            question=Question.get_question_obj(obj.question_id),
            attempted_id=obj.option_id,
            attempted_answer=obj.option)
        studentquiz_obj.user_options.add(student_attempted_obj)
    result = {"grade": grade, "marks": marks_obtained}

    return Response(result)
Ejemplo n.º 10
0
def update_teacher_profile(request, username):
    from quizzo.serializers.teacher_profile import TeacherProfileSerializer
    from quizzo.utils.deserialize import deserialize
    student_obj = deserialize(TeacherProfileSerializer, request.data)
    from quizzo.models.teacher import Teacher
    teacher = Teacher.update_profile(student_obj, username)
    teacher_obj = {
        "id": teacher.id,
        "username": teacher.user,
        "user_type": "teacher"
    }
    from quizzo.serializers.id_name import IdNameType
    teacher_type_obj = IdNameType(**teacher_obj)
    from quizzo.serializers.id_name import IdNameSerializer
    teacher_serializer = IdNameSerializer(teacher_type_obj)
    return Response(teacher_serializer.data)
Ejemplo n.º 11
0
def student_signup(request):
    from quizzo.serializers.student_profile import StudentProfileSerializer
    from quizzo.utils.deserialize import deserialize
    student_obj = deserialize(StudentProfileSerializer, request.data)
    from quizzo.models.student import Student
    student = Student.sign_up(student_obj)
    student_obj = {
        "id": student.id,
        "username": student.user,
        "user_type": "student"
    }
    from quizzo.serializers.id_name import IdNameType
    student_type_obj = IdNameType(**student_obj)
    from quizzo.serializers.id_name import IdNameSerializer
    student_serializer = IdNameSerializer(student_type_obj)
    return Response(student_serializer.data)
Ejemplo n.º 12
0
def quiz_statistics(request, username):
    from quizzo.serializers.quiz_title import QuizTitleSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(QuizTitleSerializer, request.data)

    from quizzo.models.option import Option
    from quizzo.models.student_quiz import StudentQuiz
    from quizzo.models.student import Student
    from quizzo.models.quiz import Quiz
    quiz_obj = StudentQuiz.objects.get(
        student=Student.objects.get(username=username),
        quiz_id=Quiz.objects.get(title=request_data.title).id)

    user_questions = quiz_obj.user_options.all()
    questions_list = []
    for obj in user_questions:

        question_id = obj.question.id
        question_content = obj.question.question_content
        user_answer = obj.attempted_answer
        user_answer_id = obj.attempted_id
        question_type = obj.question.type
        correct_answer_id = obj.question.answer_id
        correct_answer = Option.objects.get(id=obj.question.answer_id).content
        options_list = []
        for each_obj in obj.question.options.all():
            temp = {"option_id": each_obj.id, "option": each_obj.content}
            options_list.append(temp)
        question_temp = {
            "question": question_content,
            "question_id": question_id,
            "user_answer_id": user_answer_id,
            "user_answer": user_answer,
            "question_type": question_type,
            "options": options_list,
            "correct_answer": correct_answer,
            "correct_answer_id": correct_answer_id
        }
        questions_list.append((question_temp))

    total = len(questions_list)
    result = {"total": total, "questions_list": questions_list}
    from quizzo.serializers.quiz_reference_list import QuizReferenceListType
    result_obj = QuizReferenceListType(**result)
    from quizzo.serializers.quiz_reference_list import QuizReferenceListSerializer
    result = QuizReferenceListSerializer(result_obj)
    return Response(result.data)
Ejemplo n.º 13
0
def student_login(request):
    from quizzo.serializers.login import LoginSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(LoginSerializer, request.data)

    from quizzo.models.student import Student
    student = Student.login(request_data)
    student_obj = {
        "id": student.id,
        "username": student.user,
        "user_type": "student"
    }
    from quizzo.serializers.id_name import IdNameType
    student_id = IdNameType(**student_obj)
    from quizzo.serializers.id_name import IdNameSerializer
    student_id_serializer = IdNameSerializer(student_id)
    return Response(student_id_serializer.data)
Ejemplo n.º 14
0
def get_user_info(request):
    from quizzo.serializers.id_name import IdNameSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(IdNameSerializer, request.data)

    from quizzo.models.student import Student
    from quizzo.models.teacher import Teacher
    if request_data.user_type == "student":
        obj = Student.get_student_details(id=request_data.id)
    else:
        obj = Teacher.get_teacher_details(id=request_data.id)

    from quizzo.serializers.profile import ProfileType
    students_type_obj = ProfileType(**obj)
    from quizzo.serializers.profile import ProfileSerializer
    result = ProfileSerializer(students_type_obj)
    return Response(result.data)
Ejemplo n.º 15
0
def get_leaderboard(request):
    from quizzo.serializers.limit_offset_search import LimitOffsetSearchSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(LimitOffsetSearchSerializer, request.data)
    from quizzo.utils.constants import LeaderBoardSearchTypes
    if request_data.filter_by == LeaderBoardSearchTypes.college.value:
        student_query_set = Student.objects.filter(
            college__icontains=request_data.search)
    elif request_data.filter_by == LeaderBoardSearchTypes.city.value:
        student_query_set = Student.objects.filter(
            city__icontains=request_data.search)
    else:
        student_query_set = Student.objects.all()
    final_result_list = list()
    print("after stundet")
    from django.db.models import Sum
    for obj in student_query_set:
        q = obj.studentquiz_set.aggregate(total_marks=Sum("marks_obtained"))
        temp = {
            "username": obj.username,
            "college": obj.college,
            "points": q['total_marks']
        }
        final_result_list.append(temp)
    final_result_list[:] = [
        d for d in final_result_list if d.get('points') is not None
    ]
    final_result_list = sorted(final_result_list,
                               key=lambda k: k['points'],
                               reverse=True)
    students_obj = {
        "total":
        len(final_result_list),
        "students":
        final_result_list[request_data.offset:request_data.offset +
                          request_data.limit]
    }

    from quizzo.serializers.leaderboard_list_response import LeaderboardResponseListType
    students_type_obj = LeaderboardResponseListType(**students_obj)
    from quizzo.serializers.leaderboard_list_response import LeaderboardListResponseSerializer
    result = LeaderboardListResponseSerializer(students_type_obj)
    return Response(result.data)
Ejemplo n.º 16
0
def teacher_signup(request):
    from quizzo.serializers.teacher_profile import TeacherProfileSerializer
    from quizzo.utils.deserialize import deserialize
    teacher_obj = deserialize(TeacherProfileSerializer, request.data)

    from quizzo.models.teacher import Teacher
    teacher = Teacher.sign_up(teacher_obj)
    teacher_obj = {
        "id": teacher.id,
        "username": teacher.user,
        "user_type": "teacher"
    }
    from quizzo.serializers.id_name import IdNameType
    teacher_type_obj = IdNameType(**teacher_obj)

    from quizzo.serializers.id_name import IdNameSerializer
    teacher_serializer = IdNameSerializer(teacher_type_obj)

    return Response(teacher_serializer.data)
Ejemplo n.º 17
0
def teacher_login(request):
    from quizzo.serializers.login import LoginSerializer
    from quizzo.utils.deserialize import deserialize
    request_data = deserialize(LoginSerializer, request.data)

    from quizzo.models.teacher import Teacher
    teacher = Teacher.login(request_data)
    teacher_obj = {
        "id": teacher.id,
        "username": teacher.user,
        "user_type": "teacher"
    }
    from quizzo.serializers.id_name import IdNameType
    teacher_id = IdNameType(**teacher_obj)

    from quizzo.serializers.id_name import IdNameSerializer
    teacher_id_serializer = IdNameSerializer(teacher_id)

    return Response(teacher_id_serializer.data)