Esempio n. 1
0
def workout_weights(user_id, period_id, workout_id):
    access_user(user_id)
    p = models.TrainingPeriod
    period = p.query.filter(p.id == period_id).first()
    program = period.program
    predictors_ = {}
    estimates = {}

    for w in program.workouts:
        if w["id"] == workout_id:
            workout = w
            break
    else:
        return abort(404)

    day = period.start_date + timedelta(days=workout["day"] - 1)

    for s in workout["sets"]:
        exercise = s["exercise"].strip().title()
        if s["exercise"] not in estimates:
            if exercise not in predictors_:
                predictors_[exercise] = predictors.create_1rm_predictor(
                    exercise, user_id)
            if predictors_[exercise]:
                (means, stds, days) = predictors_[exercise]([day])
                estimates[s["exercise"]] = norm.ppf(period.difficulty,
                                                    means[0], stds[0])
            else:
                estimates[s["exercise"]] = 0
    return jsonify(estimates=estimates)
Esempio n. 2
0
def create(user_id, class_, extra_data=None):
    def fix_value(k, v):
        t = class_.__table__
        if isinstance(t.columns[k].type,
                      (models.db.Integer, models.db.Float)) and v == '':
            return None
        else:
            return v

    access_user(user_id)
    data = request.get_json()
    valid_fields = {
        c.name.lower()
        for c in class_.__table__.c if c.info.get("changeable")
    }
    valid_data = {
        k.lower(): fix_value(k, v)
        for k, v in data.items() if k.lower() in valid_fields
    }
    valid_data["user_id"] = user_id
    if extra_data:
        valid_data.update(**extra_data)
    if "id" in data and data["id"]:
        result = class_.query.filter((class_.id == data["id"])
                                     & user_or_trainer_condition()).first()
        if not result:
            raise NotAuthorizedError
        valid_data["id"] = data["id"]
    result = models.db.engine.execute(models.insert(class_,
                                                    valid_data)).fetchone()
    return dict(result)
Esempio n. 3
0
def weight_curve(user_id):
    access_user(user_id)
    predict = predictors.create_weight_predictor(user_id)
    if predict:
        (means, stds, days) = predict()
        return jsonify(means=means, stds=stds, days=days)
    else:
        return jsonify(means=[], stds=[], days=[])
Esempio n. 4
0
def bodyfat_curve(user_id):
    access_user(user_id)
    m = models.BodyfatMeasurement
    bodyfats = m.query.filter(m.user_id == user_id).all()
    predict = predictors.create_bodyfat_predictor(bodyfats)
    if predict:
        (means, stds, days) = predict()
        return jsonify(means=means, stds=stds, days=days)
    else:
        return jsonify(means=[], stds=[], days=[])
Esempio n. 5
0
def girth_curve(user_id, location):
    access_user(user_id)
    m = models.GirthMeasurement
    girths = m.query.filter((m.user_id == user_id)
                            & (m.location == location)).all()
    predict = predictors.create_girth_predictor(girths)
    if predict:
        (means, stds, days) = predict()
        return jsonify(means=means, stds=stds, days=days)
    else:
        return jsonify(means=[], stds=[], days=[])
Esempio n. 6
0
def endurance_curve(user_id, exercise, fixed="distance", value=None):
    if value:
        value = float(value)
    access_user(user_id)
    m = models.EnduranceAchievement
    endurances = m.query.filter((m.user_id == user_id)
                                & (m.exercise == exercise)).all()
    predict = predictors.create_endurance_predictor(endurances, fixed, value)
    if predict:
        (means, stds, days) = predict()
        return jsonify(means=means, stds=stds, days=days)
    else:
        return jsonify(means=[], stds=[], days=[])
Esempio n. 7
0
def tdee_curve(user_id):
    user = access_user(user_id)
    predict = predictors.create_tdee_predictor(user)
    if predict:
        (means, stds, days) = predict()
        return jsonify(means=means, stds=stds, days=days)
    else:
        return jsonify(means=[], stds=[], days=[])
Esempio n. 8
0
def training_periods(user_id):
    user = access_user(user_id)
    training_periods_ = []
    for tp in user.training_periods:
        tp_dict = tp.transform.dict
        if tp.program:
            p_dict = tp.program.transform.dict
            tp_dict["program"] = p_dict
        training_periods_.append(tp_dict)
    return jsonify(training_periods=training_periods_)
Esempio n. 9
0
def strength_curve(user_id, exercise):
    user = access_user(user_id)
    name = unquote(exercise)
    condition = (models.StrengthAchievement.user_id == user_id) & \
                (models.StrengthAchievement.exercise == name)
    if user.is_premium or user.trainer_id is not None:
        predict = predictors.create_1rm_predictor(exercise, user_id)
    else:
        achievements = models.StrengthAchievement.query.filter(condition).all()
        predict = predictors.create_ridge_1rm_predictor(achievements)
    if predict:
        (means, stds, days) = predict()
        return jsonify(means=means, stds=stds, days=days)
    else:
        return jsonify(means=[], stds=[], days=[])
Esempio n. 10
0
def get_user(user_id):
    user = access_user(user_id, read_only=True)
    if not user:
        return abort(404)
    user_dict = user.transform.dict
    user_dict["gravatar"] = gravatar(user_dict.get("email"), size=200)
    if not (current_user.id == user.id or current_user.id == user.trainer_id):
        user_dict.pop("email", None)
        birthday = user_dict.pop("birthday", None)
        if birthday:
            user_dict["age"] = int((date.today() - birthday).days / 365)
        if user.trainer_id:
            user_dict["trainer_name"] = "{} {}".format(user.trainer.first_name,
                                                       user.trainer.last_name)
    return jsonify(user=user_dict)
Esempio n. 11
0
def get_all_user_data(user_id):
    user = access_user(user_id)

    return jsonify(
        strength_achievements=[
            a.transform.dict for a in user.strength_achievements
        ],
        endurance_achievements=[
            a.transform.dict for a in user.endurance_achievements
        ],
        calorie_intakes=[c.transform.dict for c in user.calorie_intakes],
        calorie_expenditures=[
            c.transform.dict for c in user.calorie_expenditures
        ],
        weight_measurements=[
            m.transform.dict for m in user.weight_measurements
        ],
        bodyfat_measurements=[
            m.transform.dict for m in user.bodyfat_measurements
        ],
        girth_measurements=[m.transform.dict for m in user.girth_measurements],
        diet_periods=[p.transform.dict for p in user.diet_periods],
        training_periods=get_user_training_periods(user),
        goals=[p.transform.dict for p in user.goals])
Esempio n. 12
0
def girth_measurements(user_id):
    user = access_user(user_id, read_only=True)
    return jsonify(girth_measurements=[
        gm.transform.dict for gm in user.girth_measurements
    ])
Esempio n. 13
0
def intakes(user_id):
    user = access_user(user_id)
    return jsonify(
        calorie_intakes=[i.transform.dict for i in user.calorie_intakes])
Esempio n. 14
0
def goals(user_id):
    user = access_user(user_id)
    return jsonify(goals=[g.transform.dict for g in user.goals])
Esempio n. 15
0
def expenditures(user_id):
    user = access_user(user_id)
    return jsonify(calorie_expenditures=[
        e.transform.dict for e in user.calorie_expenditures
    ])
Esempio n. 16
0
def diet_periods(user_id):
    user = access_user(user_id)
    return jsonify(
        diet_periods=[dp.transform.dict for dp in user.diet_periods])
Esempio n. 17
0
def weight_measurements(user_id):
    user = access_user(user_id, read_only=True)
    return jsonify(weight_measurements=[
        wm.transform.dict for wm in user.weight_measurements
    ])
Esempio n. 18
0
def bodyfat_measurements(user_id):
    user = access_user(user_id, read_only=True)
    return jsonify(bodyfat_measurements=[
        bf.transform.dict for bf in user.bodyfat_measurements
    ])
Esempio n. 19
0
def programs(user_id):
    user = access_user(user_id)
    return jsonify(programs=[p.transform.dict for p in user.programs])
Esempio n. 20
0
def strength_achievements(user_id):
    user = access_user(user_id, read_only=True)
    return jsonify(strength_achievements=[
        sa.transform.dict for sa in user.strength_achievements
    ])
Esempio n. 21
0
def endurance_achievements(user_id):
    user = access_user(user_id, read_only=True)
    return jsonify(endurance_achievements=[
        ea.transform.dict for ea in user.endurance_achievements
    ])