Пример #1
0
def activity_ajax(request):
    exercise = request.session.get('exercise', None)
    if not exercise:
        return HttpResponse("No exercise found in the session", status=409)

    exercise = PLInstance(exercise)
    status = json.loads(request.body.decode())

    if status['requested_action'] == 'save':
        feedback_type = "info"
        feedback = "Réponse enregistré avec succès"
        Answer(value=status['inputs']['answer'],
               user=request.user,
               pl=PL.objects.get(id=exercise.dic['pl_id__']),
               seed=exercise.dic['seed'],
               grade=-1).save()
        return HttpResponse(json.dumps({
            'feedback_type': feedback_type,
            'feedback': feedback
        }),
                            content_type='application/json')

    elif status['requested_action'] == 'submit':  # Validate
        success, feedback = exercise.evaluate(status['inputs'])
        if 'answer' in status['inputs']:
            value = status['inputs']['answer']
        else:
            value = ""
        if success == None:
            feedback_type = "info"
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(id=exercise.dic['pl_id__']),
                   seed=exercise.dic['seed'],
                   grade=-1).save()
        elif success:
            feedback_type = "success"
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(id=exercise.dic['pl_id__']),
                   seed=exercise.dic['seed'],
                   grade=100).save()
        else:
            feedback_type = "fail"
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(id=exercise.dic['pl_id__']),
                   seed=exercise.dic['seed'],
                   grade=0).save()
        return HttpResponse(json.dumps({
            'feedback_type': feedback_type,
            'feedback': feedback
        }),
                            content_type='application/json')
    return HttpResponseBadRequest("Missing action in status")
Пример #2
0
def activity_receiver(request):
    activity_id = request.session.get("current_activity", None)
    if activity_id == None:
        return HttpResponse("No activity found in the session", status=409)

    if request.method == "POST":  # Received ajax request
        return activity_ajax(request)

    if request.session.get("testing", False):
        activity = get_object_or_404(ActivityTest, id=activity_id)
    else:
        activity = get_object_or_404(Activity, id=activity_id)

    current_pl = request.session.get("current_pl", None)
    current_pl = None if current_pl == None else PL.objects.get(id=current_pl)
    exercise = ActivityInstance(request, activity, current_pl)

    if request.method == 'GET' and request.GET.get("action", None):
        action = request.GET.get("action", None)
        if action == "pl":
            request.session["current_pl"] = request.GET.get("pl_id", None)

        elif action == "pltp":
            request.session["current_pl"] = None

        elif current_pl and action == "reset":
            value = "" if 'code' not in exercise.dic else exercise.dic["code"]
            Answer(value=value,
                   user=request.user,
                   pl=current_pl,
                   seed=exercise.dic['seed'],
                   grade=-1).save()

        elif current_pl and action == "next":
            for current, next in zip(activity.pltp.pl.all(),
                                     list(activity.pltp.pl.all())[1:] +
                                     [None]):
                if current_pl.id == current.id:
                    request.session[
                        "current_pl"] = None if next == None else next.id
                    break
            else:
                request.session["current_pl"] = None
        request.method
        return redirect(reverse(activity_receiver))

    request.session['exercise'] = exercise.dic
    if current_pl:
        Answer(value='',
               user=request.user,
               pl=PL.objects.get(id=current_pl.id),
               seed=exercise.dic['seed'],
               grade=-1).save()
    return HttpResponse(exercise.render(request))
Пример #3
0
def ajax(request, exercise):
    status = json.loads(request.body.decode())
    if status['requested_action'] == 'submit':  # Validate
        success, feedback = exercise.evaluate(status['inputs'])
        if 'answer' in status['inputs']:
            value = status['inputs']['answer']
        else:
            value = ""
        if success == None:
            feedback_type = "info"
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(sha1=exercise.dic['pl_sha1']),
                   seed=exercise.dic['seed'],
                   state=Answer.STARTED).save()
        elif success:
            feedback_type = "success"
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(sha1=exercise.dic['pl_sha1']),
                   seed=exercise.dic['seed'],
                   state=Answer.SUCCEEDED).save()
        else:
            feedback_type = "fail"
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(sha1=exercise.dic['pl_sha1']),
                   seed=exercise.dic['seed'],
                   state=Answer.FAILED).save()
        return HttpResponse(json.dumps({
            'feedback_type': feedback_type,
            'feedback': feedback
        }),
                            content_type='application/json')

    elif status['requested_action'] == 'save':  # Save
        if 'answer' in status['inputs']:
            value = status['inputs']['answer']
        else:
            value = ""
        Answer(value=value,
               user=request.user,
               pl=PL.objects.get(sha1=exercise.dic['pl_sha1']),
               seed=exercise.dic['seed'],
               state=Answer.STARTED).save()
        return HttpResponse(json.dumps({
            'feedback_type':
            "info",
            'feedback':
            "Votre réponse à bien été enregistrée."
        }),
                            content_type='application/json')

    return None  # Not an AJAX request
Пример #4
0
    def evaluate(self, exercise, request):
        """ 
            Return the evaluation of the user's answer in the form of a tuple:
                - 'success'/'fail'/'info': The user succeeded / The user failed / Save or An error occured
                - Feedback
            
            Return None, None if the request doesn't contain any AJAX request.
            
            Calling this function will also save the user's answer in the database.
        """
        status = json.loads(request.body.decode())
        if status['requested_action'] == 'submit':  # Validate
            success, feedback = exercise.evaluate(status['inputs'])
            if 'answer' in status['inputs']:
                value = status['inputs']['answer']
            else:
                value = ""
            if success == None:
                feedback_type = "info"
                Answer(value=value,
                       user=request.user,
                       pl=PL.objects.get(id=exercise.dic['pl_id']),
                       seed=exercise.dic['seed'],
                       state=-1).save()
            elif success:
                feedback_type = "success"
                Answer(value=value,
                       user=request.user,
                       pl=PL.objects.get(id=exercise.dic['pl_id']),
                       seed=exercise.dic['seed'],
                       state=100).save()
            else:
                feedback_type = "fail"
                Answer(value=value,
                       user=request.user,
                       pl=PL.objects.get(id=exercise.dic['pl_id']),
                       seed=exercise.dic['seed'],
                       state=0).save()
            return feedback_type, feedback

        elif status['requested_action'] == 'save':  # Save
            if 'answer' in status['inputs']:
                value = status['inputs']['answer']
            else:
                value = ""
            Answer(value=value,
                   user=request.user,
                   pl=PL.objects.get(id=exercise.dic['pl_id']),
                   seed=exercise.dic['seed'],
                   state=-1).save()
            return 'info', "Votre réponse à bien été enregistrée."
        return None, None  # Not an AJAX request
Пример #5
0
 def reset_pl(self, exercise, request):
     """ Reset the PL to the default code """
     value = "" if 'code' not in exercise.dic else exercise.dic["code"]
     Answer(value=value,
            user=request.user,
            pl=PL.objects.get(id=exercise.dic['pl_id']),
            seed=exercise.dic['seed'],
            state=-1).save()
Пример #6
0
 def add_db_entry(self, exercise, request):
     Answer(value='', user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=Answer.STARTED).save()
Пример #7
0
 def add_db_entry(self, exercise, request):
     Answer(value='User clicked on the PL',
            user=request.user,
            pl=PL.objects.get(sha1=exercise.dic['pl_sha1']),
            seed=exercise.dic['seed'],
            state=Answer.STARTED).save()