Exemplo n.º 1
0
    def post(self, request, quiz_id, format=None):
        user, user_key = get_user_and_user_key(request)
        data = request.data

        try:
            quiz = Quiz.objects.get(pk=quiz_id)
        except Quiz.DoesNotExist:
            return({"quiz_does_not_exist": True}, status.HTTP_400_BAD_REQUEST)

        #Not using a serializer because POST and GET return different attributes
        #and using a serializer does not reduce the amount of code
        #And the only validation I need is checking if the quiz exists. 
        #Other fields can be blank. 
        attrs = {
            "quiz_id": quiz.id,
            "result": data['result'],
            "answer": data['answer'] or "",
            "choices": ','.join((str(choice_id) for choice_id in data['choices'])),
            "user": user,
            "user_key": user_key,
            "created_at": timezone.now()
        }
        attempt = QuizAttempt.objects.create(**attrs)
        data['id'] = attempt.id
        return Response(request.data, status.HTTP_201_CREATED)
Exemplo n.º 2
0
 def get(self, request, quiz_id, format=None):
     user, user_key = get_user_and_user_key(request)
     attempts = QuizAttempt.objects.get_user_attempts_by_quiz_id(user_key=user_key, quiz_id=quiz_id)
     serialized_attempts = []
     for a in attempts:
         serializer = serializers.QuizAttemptSerializer(a)
         serialized_attempts.append(serializer.data)
     return Response(serialized_attempts)
Exemplo n.º 3
0
Arquivo: views.py Projeto: pixyj/feel
def get_quizattempts(request, concept):
    _, user_key = get_user_and_user_key(request)
    attempts = concept.get_user_quizattempts(user_key)
    serializer = QuizAttemptSerializer(attempts, many=True)
    serialized_attempts = serializer.data
    for attempt in serialized_attempts:
        attempt['quizId'] = attempt['quiz']
        del attempt['quiz']
    return serialized_attempts
Exemplo n.º 4
0
Arquivo: views.py Projeto: pixyj/feel
def get_quizattempts(request, concept):
    _, user_key = get_user_and_user_key(request)
    attempts = concept.get_user_quizattempts(user_key)
    serializer = QuizAttemptSerializer(attempts, many=True)
    serialized_attempts = serializer.data
    for attempt in serialized_attempts:
        attempt['quizId'] = attempt['quiz']
        del attempt['quiz']
    return serialized_attempts
Exemplo n.º 5
0
Arquivo: views.py Projeto: pixyj/feel
    def post(self, request, format=None):
        """
        Get course by course_id
        """
        user, _ = get_user_and_user_key(request)
        serializer = CodeQuizSerializer(data=request.data)
        if not serializer.is_valid():
            return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)

        attrs = get_audit_attrs(request.user)
        attrs.update(serializer.data)
        attrs['test_cases'] = request.data['test_cases']
        codequiz = serializer.create(attrs)
        response_data = dict(serializer.data)
        response_data['id'] = codequiz.id
        return Response(response_data, status.HTTP_201_CREATED)
Exemplo n.º 6
0
Arquivo: views.py Projeto: pixyj/feel
    def put(self, request, pk):
        codequiz = get_object_or_404(CodeQuiz, id=pk)

        user, _ = get_user_and_user_key(request)
        if user.id != codequiz.created_by.id:
            return Response({"nice": "try"}, status.HTTP_403_FORBIDDEN)

        serializer = CodeQuizSerializer(data=request.data)
        if not serializer.is_valid():
            return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)

        attrs = get_audit_attrs(request.user)
        attrs.update(serializer.data)
        attrs['test_cases'] = request.data['test_cases']

        serializer.update(codequiz, attrs)
        return Response(request.data)
Exemplo n.º 7
0
Arquivo: views.py Projeto: pixyj/feel
    def get(self, request):
        """
        Get all attempts by user
        """
        user, _ = get_user_and_user_key(request)
        codequizzes = CodeQuiz.objects.filter(created_by=user)

        # Um, django-rest-framework is unable to serialize for me.
        # todo -> debug later
        data = [
            {
                "problem_statement": cq.problem_statement,
                "id": str(cq.id),
                "created_at": cq.created_at
            }
            for cq in codequizzes
        ]
        return Response(data)
Exemplo n.º 8
0
Arquivo: views.py Projeto: pixyj/feel
    def post(self, request, pk):
        codequiz = get_object_or_404(CodeQuiz, id=pk)
        user, user_key = get_user_and_user_key(request)
        code = request.data['code']
        attrs = {
            'code': code,
            'user': user,
            'user_key': user_key,
            'codequiz': codequiz
        }
        try:
            identical_attempt = CodeQuizAttempt.objects.filter(codequiz=codequiz, code=code, state=2).first()
            if identical_attempt is not None:
                if identical_attempt.user_key == user_key:
                    attempt = identical_attempt
                    outputs = attempt.outputs
                    state = attempt.state
                else:
                    attrs['result'] = identical_attempt.result
                    attrs['response'] = identical_attempt.response
                    attrs['state'] = 3
                    attempt = CodeQuizAttempt.objects.create(**attrs)
                    outputs = None
                    state = attempt.state

            else:
                attempt = CodeQuizAttempt.objects.create(**attrs)
                outputs = None
                state = 1
                attempt.async_submit()
        except IntegrityError:
            attempt = identical_attempt

        json_response = {
            'result': attempt.result,
            'id': attempt.id,
            'outputs': outputs,
            'state': state
        }
        return Response(json_response, status.HTTP_201_CREATED)
Exemplo n.º 9
0
Arquivo: views.py Projeto: pixyj/feel
 def _get_codequizattempts(self, request, concept):
     _, user_key = get_user_and_user_key(request)
     attempts = concept.get_user_codequizattempts(user_key)
     serializer = CodeQuizAttemptSerializer(attempts, many=True)
     return serializer.data
Exemplo n.º 10
0
Arquivo: views.py Projeto: pixyj/feel
    def get(self, request, course_slug):
        course = get_course_or_404(course_slug)
        _, user_key = get_user_and_user_key(request)

        progress = course.get_student_progress(user_key)
        return Response(progress)
Exemplo n.º 11
0
    def get(self, request, course_slug):
        course = get_course_or_404(course_slug)
        _, user_key = get_user_and_user_key(request)

        progress = course.get_student_progress(user_key)
        return Response(progress)
Exemplo n.º 12
0
Arquivo: views.py Projeto: pixyj/feel
 def _get_codequizattempts(self, request, concept):
     _, user_key = get_user_and_user_key(request)
     attempts = concept.get_user_codequizattempts(user_key)
     serializer = CodeQuizAttemptSerializer(attempts, many=True)
     return serializer.data