Пример #1
0
def execute_queue(request):
    if request.method == "POST":
        rpc = json.loads(request.body)
        print rpc

        code = rpc["params"][0]
        activity_uri = rpc["method"]
        program_test = Activity.get(activity_uri)
        unit_test = program_test["unit_test"]
        server = Cola(program_test["lang"])

        task = {"id": None, "method": "exec", "params": {"code": code, "test": unit_test}}
        task_id = server.enqueue(**task)

        if request.user.is_authenticated() and "id" in rpc:
            ula = None
            try:
                ula = UserLearningActivity.objects.get(learning_activity__id=rpc["id"], user=request.user)

                s = SimpleSequencing()
                s.update(ula)
                ## Mouse Dynamics
                event = ULA_Event.objects.create(ULA=ula, context=rpc)
                event.save()
            except ObjectDoesNotExist:
                # Assume is a non assigned program

                pass

        rpc["task_id"] = task_id

        result = {"result": "added", "error": None, "id": task_id}
        return HttpResponse(json.dumps(result), content_type="application/javascript")
Пример #2
0
def javascript_result(request):
    if request.method == "POST":
        rpc = json.loads(request.body)

        code = rpc["params"][0]
        activity_uri = rpc["method"]
        program_test = Activity.get(activity_uri)

        if request.user.is_authenticated() and "id" in rpc:
            ula = None
            try:
                ula = UserLearningActivity.objects.get(learning_activity__id=rpc["id"], user=request.user)

                s = SimpleSequencing()
                if rpc["result"] == "Success":
                    s.update(
                        ula,
                        progress_status="completed",
                        objective_status="satisfied",
                        objective_measure=30,
                        attempt=True,
                    )
                else:
                    s.update(ula, attempt=True)
                # s.update(ula)
                ## Mouse Dynamics
                event = ULA_Event.objects.create(ULA=ula, context=rpc)
                event.save()
            except ObjectDoesNotExist:
                # Assume is a non assigned program
                pass

        return HttpResponse(json.dumps({}), content_type="application/javascript")
Пример #3
0
def get_result(request):
    if request.method == "POST":
        rpc = json.loads(request.body)
        # We only need the Task identifier
        # TO DO:
        # No ID, Task Not Found
        task_id = rpc["id"]
        t = Task(id=task_id)

        # outcome:
        # -1 No result found
        # 0 Sub-process Success
        # 1 Sub-process Failure
        if t.get_result(task_id.split(":")[0]):

            if t.result:
                print t.result
                string_json = ""
                try:
                    string_json = json.loads(t.result[0])
                except Exception, e:
                    print e

                if request.user.is_authenticated():
                    try:
                        ula = UserLearningActivity.objects.get(
                            learning_activity__uri=rpc["params"][0], user=request.user
                        )
                        s = SimpleSequencing()

                        if string_json["result"] == "Success":
                            s.update(
                                ula,
                                progress_status="completed",
                                objective_status="satisfied",
                                objective_measure=30,
                                attempt=True,
                            )

                        else:
                            s.update(ula, attempt=True)
                    except Exception, e:
                        print e

                result = json.dumps({"result": string_json, "outcome": t.result[1]})
                return HttpResponse(result, content_type="application/javascript")

            else:
                return HttpResponse(json.dumps({"outcome": -1}), content_type="application/javascript")
Пример #4
0
def test(request, uri, objective_status = None):
    if request.user.is_authenticated():
        s = SimpleSequencing()
        # First, the requested_activity  exists??
        # Gets the Learning Activity object from uri
        requested_activity = _get_ula(request, s)

        if not requested_activity:
            return HttpResponseNotFound('<h1>Activity not found</h1>')

        # Gets the root of the User Learning Activity
        root = UserLearningActivity.objects.filter(learning_activity = requested_activity.learning_activity.get_root() ,user = request.user )[0]

        feedback = None

        if request.method == 'GET':
            # Exits last activity, and sets requested activity as current
            # if choice_exit consider complete
            _set_current(request,requested_activity, root, s, objective_status=None, progress_status=None)

        elif request.method == 'POST':
            if 'check' in request.POST:
                feedback = _check_quiz(request.POST, activities[requested_activity.learning_activity.uri])
                # Exits the current Learning Activity
                objective_measure = feedback['total_correct']
                if objective_measure >= activities[requested_activity.learning_activity.uri]['satisfied_at_least']:
                    objective_status='satisfied'
                else:
                    objective_status='notSatisfied'
                print requested_activity.learning_activity.uri, objective_measure,objective_status

                s.update(requested_activity, progress_status = None, objective_status = objective_status, objective_measure = objective_measure)


            elif 'nav_event' in request.POST:
                next_uri = None

                if request.POST['nav_event'] == 'next' :
                    # Go TO NEXT ACTIVITY
                    next_uri = s.get_next(root)
                    progress_status = 'complete'
                    pool_writting(next_uri,request.user)
                elif request.POST['nav_event'] == 'prev':
                    # Go TO PREV ACTIVITY
                    next_uri = s.get_prev(root)
                    pool_writting(next_uri)
                if next_uri is None:
                        #No more activities ?
                    return HttpResponseRedirect( root.learning_activity.uri)
                else:
                    next_activity = UserLearningActivity.objects.filter(learning_activity__uri = next_uri ,user = request.user )[0]
                    return HttpResponseRedirect(next_activity.learning_activity.uri)

       # Gets the current navegation tree as HTML

        nav = s.get_nav(root)
        navegation_tree = s.nav_to_html(nav)

        content = activities[requested_activity.learning_activity.uri]
        if feedback:
            for q in content['questions']:
                if q['id'] in feedback:
                    q['feedback'] = feedback[q['id']]
                    if q['interaction']  in ['choiceInteraction','simpleChoice']:
                        q['feedback_options'] = zip(q['options'], feedback[q['id']]['user_answer'], feedback[q['id']]['checked'])

        return render_to_response('activitytree/'+(requested_activity.learning_activity.uri).split('/')[1]+'.html',
                                  {'navegation': navegation_tree,
                                   'uri':requested_activity.learning_activity.uri,
                                   'content':content,
                                   'feedback':feedback},
                                    context_instance=RequestContext(request))
    else:      
        return HttpResponseRedirect('/login/?next=%s' % request.path)
Пример #5
0
def path_test(request, path_id, uri):

    if request.user.is_authenticated():
        s = SimpleSequencing()
        try:
            requested_activity = UserLearningActivity.objects.get(learning_activity__id=path_id, user=request.user)
        except ObjectDoesNotExist as e:
            return HttpResponseNotFound("<h1>Learning Activity not found</h1>")

        root = None

        try:
            root = UserLearningActivity.objects.get(
                learning_activity=requested_activity.learning_activity.get_root(), user=request.user
            )
        except (ObjectDoesNotExist, IndexError) as e:
            return HttpResponseNotFound("<h1>Path not found</h1>")

        feedback = None
        attempts_left = requested_activity.learning_activity.attempt_limit - requested_activity.num_attempts
        if request.method == "GET":
            # Exits last activity, and sets requested activity as current
            # if choice_exit consider complete
            _set_current(request, requested_activity, root, s, objective_status=None, progress_status=None)

        elif request.method == "POST":
            if "check" in request.POST and attempts_left:

                # quiz = activities[requested_activity.learning_activity.uri]
                quiz = Activity.get(requested_activity.learning_activity.uri)

                feedback = _check_quiz(request.POST, quiz)
                # Updates the current Learning Activity
                objective_measure = float(feedback["total_correct"]) / len(quiz["questions"]) * 100
                if feedback["total_correct"] >= quiz["satisfied_at_least"]:
                    objective_status = "satisfied"
                else:
                    objective_status = "notSatisfied"

                s.update(
                    requested_activity,
                    objective_status=objective_status,
                    objective_measure=objective_measure,
                    attempt=True,
                )
                attempts_left -= 1

        # Gets the current navegation tree as HTML

        _XML = get_nav(root)
        # Escape for javascript
        XML = ET.tostring(_XML, "utf-8").replace('"', r"\"")  # navegation_tree = s.nav_to_html(nav)
        rating_totals = LearningActivityRating.objects.filter(
            learning_activity__uri=requested_activity.learning_activity.uri
        ).aggregate(Count("rating"), Avg("rating"))

        breadcrumbs = s.get_current_path(requested_activity)

        test = Activity.get(requested_activity.learning_activity.uri)

        if feedback:
            for q in test["questions"]:
                if q["id"] in feedback:
                    q["feedback"] = feedback[q["id"]]
                    if q["interaction"] in ["choiceInteraction", "simpleChoice"]:
                        q["feedback_options"] = zip(
                            q["options"], feedback[q["id"]]["user_answer"], feedback[q["id"]]["checked"]
                        )

        return render_to_response(
            "activitytree/" + (requested_activity.learning_activity.uri).split("/")[1] + ".html",
            {
                "XML_NAV": XML,
                "uri": requested_activity.learning_activity.uri,
                "content": test,
                "feedback": feedback,
                "breadcrumbs": breadcrumbs,
                "uri_id": "/%s" % requested_activity.learning_activity.id,
                "attempt_limit": requested_activity.learning_activity.attempt_limit,
                "num_attempts": requested_activity.num_attempts,
                "attempts_left": attempts_left,
                "root_id": "/%s" % requested_activity.learning_activity.get_root().id,
                "root": requested_activity.learning_activity.get_root().uri,
            },
            context_instance=RequestContext(request),
        )
    else:

        return HttpResponseRedirect("/login/?next=%s" % request.path)