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")
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")
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")
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)
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)