Exemple #1
0
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