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)
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)
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=[])
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=[])
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=[])
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=[])
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=[])
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_)
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=[])
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)
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])
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 ])
def intakes(user_id): user = access_user(user_id) return jsonify( calorie_intakes=[i.transform.dict for i in user.calorie_intakes])
def goals(user_id): user = access_user(user_id) return jsonify(goals=[g.transform.dict for g in user.goals])
def expenditures(user_id): user = access_user(user_id) return jsonify(calorie_expenditures=[ e.transform.dict for e in user.calorie_expenditures ])
def diet_periods(user_id): user = access_user(user_id) return jsonify( diet_periods=[dp.transform.dict for dp in user.diet_periods])
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 ])
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 ])
def programs(user_id): user = access_user(user_id) return jsonify(programs=[p.transform.dict for p in user.programs])
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 ])
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 ])