def get_progress(request, return_object=False): """get all relevant data concerning the user's progress""" user_id = long(request.matchdict["user_id"]) user = User.get_user(user_id) if not user: raise NotFound("user not found") def generate(): achievements = Achievement.get_achievements_by_user_for_today(user) def ea(achievement): try: #print "evaluating "+`achievement["id"]` return Achievement.evaluate(user, achievement["id"]) except FormularEvaluationException as e: return { "error": "Cannot evaluate formular: " + e.message, "id": achievement["id"] } except Exception as e: tb = traceback.format_exc() return {"error": tb, "id": achievement["id"]} check = lambda x: x != None and not x.has_key("error") and (x[ "hidden"] == False or x["level"] > 0) evaluatelist = [ea(achievement) for achievement in achievements] ret = { "achievements": {x["id"]: x for x in evaluatelist if check(x)}, "achievement_errors": { x["id"]: x for x in evaluatelist if x != None and x.has_key("error") } } if return_object: return render("json", ret), ret else: return render("json", ret) key = "/progress/" + str(user_id) if not return_object: request.response.content_type = 'application/json' return get_or_set(key, generate) else: ret_str, ret = generate() set_value(key, ret_str) return ret
def get_progress(request, return_object=False): """get all relevant data concerning the user's progress""" user_id = long(request.matchdict["user_id"]) user = User.get_user(user_id) if not user: raise NotFound("user not found") def generate(): achievements = Achievement.get_achievements_by_user_for_today(user) def ea(achievement): try: #print "evaluating "+`achievement["id"]` return Achievement.evaluate(user, achievement["id"]) except FormularEvaluationException as e: return { "error": "Cannot evaluate formular: " + e.message, "id" : achievement["id"] } except Exception as e: tb = traceback.format_exc() return { "error": tb, "id" : achievement["id"] } check = lambda x : x!=None and not x.has_key("error") and (x["hidden"]==False or x["level"]>0) evaluatelist = [ea(achievement) for achievement in achievements] ret = { "achievements" : { x["id"] : x for x in evaluatelist if check(x) }, "achievement_errors" : { x["id"] : x for x in evaluatelist if x!=None and x.has_key("error") } } if return_object: return render("json",ret),ret else: return render("json",ret) key = "/progress/"+str(user_id) if not return_object: request.response.content_type = 'application/json' return get_or_set(key,generate) else: ret_str, ret = generate() set_value(key,ret_str) return ret
def _get_progress(user, force_generation=False): def generate(): achievements = Achievement.get_achievements_by_user_for_today(user) def ea(achievement): try: #print "evaluating "+`achievement["id"]` return Achievement.evaluate(user, achievement["id"]) except FormularEvaluationException as e: return { "error": "Cannot evaluate formular: " + e.message, "id": achievement["id"] } except Exception as e: tb = traceback.format_exc() return {"error": tb, "id": achievement["id"]} check = lambda x: x != None and not "error" in x and (x[ "hidden"] == False or x["level"] > 0) evaluatelist = [ea(achievement) for achievement in achievements] ret = { "achievements": {x["id"]: x for x in evaluatelist if check(x)}, "achievement_errors": {x["id"]: x for x in evaluatelist if x != None and "error" in x} } return render("json", ret), ret key = "/progress/" + str(user.id) if not force_generation: #in this case, we do not return the decoded json object - the caller has to take of this if needed return get_or_set(key, lambda: generate()[0]), None else: ret_str, ret = generate() set_value(key, ret_str) return ret_str, ret
def _get_progress(user,force_generation=False): def generate(): achievements = Achievement.get_achievements_by_user_for_today(user) def ea(achievement): try: #print "evaluating "+`achievement["id"]` return Achievement.evaluate(user, achievement["id"]) except FormularEvaluationException as e: return { "error": "Cannot evaluate formular: " + e.message, "id" : achievement["id"] } except Exception as e: tb = traceback.format_exc() return { "error": tb, "id" : achievement["id"] } check = lambda x : x!=None and not "error" in x and (x["hidden"]==False or x["level"]>0) evaluatelist = [ea(achievement) for achievement in achievements] ret = { "achievements" : { x["id"] : x for x in evaluatelist if check(x) }, "achievement_errors" : { x["id"] : x for x in evaluatelist if x!=None and "error" in x } } return render("json",ret),ret key = "/progress/"+str(user.id) if not force_generation: #in this case, we do not return the decoded json object - the caller has to take of this if needed return get_or_set(key,lambda:generate()[0]), None else: ret_str, ret = generate() set_value(key,ret_str) return ret_str, ret