def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(WorkoutLogDetailView, self).get_context_data(**kwargs) # Prepare the entries for rendering and the D3 chart workout_log = {} entry = WorkoutLog() for day in self.object.day_set.select_related(): workout_log[day] = {} for set in day.set_set.select_related(): exercise_log = {} for exercise in set.exercises.select_related(): exercise_log[exercise] = [] logs = exercise.workoutlog_set.filter(user=self.request.user) entry_log, chart_data = entry.process_log_entries(logs) if entry_log: exercise_log[exercise].append(entry_log) if exercise_log: workout_log[day][exercise] = {} workout_log[day][exercise]['log_by_date'] = entry_log workout_log[day][exercise]['div_uuid'] = str(uuid.uuid4()) workout_log[day][exercise]['chart_data'] = chart_data context['workout_log'] = workout_log context['reps'] = _("Reps") return context
def view(request, id, slug=None): ''' Detail view for an exercise ''' template_data = {} template_data['comment_edit'] = False # Load the exercise itself exercise = get_object_or_404(Exercise, pk=id) template_data['exercise'] = exercise # Create the backgrounds that show what muscles the exercise works on backgrounds_back = [] backgrounds_front = [] for muscle in exercise.muscles.all(): if muscle.is_front: backgrounds_front.append('images/muscles/main/muscle-%s.svg' % muscle.id) else: backgrounds_back.append('images/muscles/main/muscle-%s.svg' % muscle.id) for muscle in exercise.muscles_secondary.all(): if muscle.is_front: backgrounds_front.append('images/muscles/secondary/muscle-%s.svg' % muscle.id) else: backgrounds_back.append('images/muscles/secondary/muscle-%s.svg' % muscle.id) # Append the "main" background, with the silhouette of the human body # This has to happen as the last step, so it is rendered behind the muscles. backgrounds_front.append('images/muscles/muscular_system_front.svg') backgrounds_back.append('images/muscles/muscular_system_back.svg') template_data['muscle_backgrounds_front'] = backgrounds_front template_data['muscle_backgrounds_back'] = backgrounds_back # If the user is logged in, load the log and prepare the entries for # rendering in the D3 chart entry_log = [] chart_data = [] if request.user.is_authenticated(): entry = WorkoutLog() logs = WorkoutLog.objects.filter(user=request.user, exercise=exercise) entry_log, chart_data = entry.process_log_entries(logs) template_data['logs'] = entry_log template_data['json'] = chart_data template_data['svg_uuid'] = str(uuid.uuid4()) template_data['reps'] = _("Reps") # Render return render_to_response('view.html', template_data, context_instance=RequestContext(request))
def test_get_workout_session(self): ''' Test the get_workout_session method ''' user1 = User.objects.get(pk=1) user2 = User.objects.get(pk=2) workout1 = Workout.objects.get(pk=2) workout2 = Workout.objects.get(pk=2) WorkoutLog.objects.all().delete() l = WorkoutLog() l.user = user1 l.date = datetime.date(2014, 1, 5) l.exercise = Exercise.objects.get(pk=1) l.workout = workout1 l.weight = 10 l.reps = 10 l.save() session1 = WorkoutSession() session1.user = user1 session1.workout = workout1 session1.notes = 'Something here' session1.impression = '3' session1.date = datetime.date(2014, 1, 5) session1.save() session2 = WorkoutSession() session2.user = user1 session2.workout = workout1 session2.notes = 'Something else here' session2.impression = '1' session2.date = datetime.date(2014, 1, 1) session2.save() session3 = WorkoutSession() session3.user = user2 session3.workout = workout2 session3.notes = 'The notes here' session3.impression = '2' session3.date = datetime.date(2014, 1, 5) session3.save() self.assertEqual(l.get_workout_session(), session1)
for user in User.objects.all(): weight_log = [] print(' - generating for {0}'.format(user.username)) for workout in Workout.objects.filter(user=user): for day in workout.day_set.all(): for set in day.set_set.all(): for setting in set.setting_set.all(): for reps in (8, 10, 12): for i in range(1, args.number_logs): date = datetime.date.today( ) - datetime.timedelta(weeks=i) log = WorkoutLog(user=user, exercise=setting.exercise, workout=workout, reps=reps, weight=50 - reps + random.randint(1, 10), date=date) weight_log.append(log) # Bulk-create the logs WorkoutLog.objects.bulk_create(weight_log) # # Session generator # if hasattr(args, 'impression_sessions'): print("** Generating workout sessions") for user in User.objects.all():
def create_demo_entries(user): """ Creates some demo data for temporary users """ # (this is a bit ugly and long...) language = load_language() # # Workout and exercises # setting_list = [] weight_log = [] workout = Workout(user=user, name=_('Sample workout')) workout.save() monday = DaysOfWeek.objects.get(pk=1) wednesday = DaysOfWeek.objects.get(pk=3) day = Day(training=workout, description=_('Sample day')) day.save() day.day.add(monday) day2 = Day(training=workout, description=_('Another sample day')) day2.save() day2.day.add(wednesday) # Biceps curls with dumbbell if language.short_name == 'de': exercise = Exercise.objects.get(pk=26) else: exercise = Exercise.objects.get(pk=81) day_set = Set(exerciseday=day, sets=4, order=2) day_set.save() setting = Setting(set=day_set, exercise=exercise, reps=8, order=1) setting.save() # Weight log entries for reps in (8, 10, 12): for i in range(1, 8): log = WorkoutLog(user=user, exercise=exercise, workout=workout, reps=reps, weight=18 - reps + random.randint(1, 4), date=datetime.date.today() - datetime.timedelta(weeks=i)) weight_log.append(log) # French press if language.short_name == 'de': exercise = Exercise.objects.get(pk=25) else: exercise = Exercise.objects.get(pk=84) day_set = Set(exerciseday=day, sets=4, order=2) day_set.save() setting_list.append( Setting(set=day_set, exercise=exercise, reps=8, order=1)) # Weight log entries for reps in (7, 10): for i in range(1, 8): log = WorkoutLog(user=user, exercise=exercise, workout=workout, reps=reps, weight=30 - reps + random.randint(1, 4), date=datetime.date.today() - datetime.timedelta(weeks=i)) weight_log.append(log) # Squats if language.short_name == 'de': exercise = Exercise.objects.get(pk=6) else: exercise = Exercise.objects.get(pk=111) day_set = Set(exerciseday=day, sets=4, order=3) day_set.save() setting_list.append( Setting(set=day_set, exercise=exercise, reps=10, order=1)) # Weight log entries for reps in (5, 10, 12): for i in range(1, 8): log = WorkoutLog(user=user, exercise=exercise, workout=workout, reps=reps, weight=110 - reps + random.randint(1, 10), date=datetime.date.today() - datetime.timedelta(weeks=i)) weight_log.append(log) # Crunches if language.short_name == 'de': exercise = Exercise.objects.get(pk=4) else: exercise = Exercise.objects.get(pk=91) day_set = Set(exerciseday=day, sets=4, order=4) day_set.save() setting_list.append( Setting(set=day_set, exercise=exercise, reps=30, order=1)) setting_list.append( Setting(set=day_set, exercise=exercise, reps=99, order=2)) setting_list.append( Setting(set=day_set, exercise=exercise, reps=35, order=3)) # Leg raises, supersets with crunches if language.short_name == 'de': exercise = Exercise.objects.get(pk=35) else: exercise = Exercise.objects.get(pk=126) setting_list.append( Setting(set=day_set, exercise=exercise, reps=30, order=1)) setting_list.append( Setting(set=day_set, exercise=exercise, reps=40, order=2)) setting_list.append( Setting(set=day_set, exercise=exercise, reps=99, order=3)) Setting.objects.bulk_create(setting_list) # Save all the log entries WorkoutLog.objects.bulk_create(weight_log) # # (Body) weight entries # temp = [] existing_entries = [i.date for i in WeightEntry.objects.filter(user=user)] for i in range(1, 20): creation_date = datetime.date.today() - datetime.timedelta(days=i) if creation_date not in existing_entries: entry = WeightEntry(user=user, weight=80 + 0.5 * i + random.randint(1, 3), date=creation_date) temp.append(entry) WeightEntry.objects.bulk_create(temp) # # Nutritional plan # plan = NutritionPlan() plan.user = user plan.language = language plan.description = _('Sample nutrional plan') plan.save() # Breakfast meal = Meal() meal.plan = plan meal.order = 1 meal.time = datetime.time(7, 30) meal.save() # Oatmeal if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8197) else: ingredient = Ingredient.objects.get(pk=2126) mealitem = MealItem() mealitem.meal = meal mealitem.ingredient = ingredient mealitem.order = 1 mealitem.amount = 100 mealitem.save() # Milk if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8198) else: ingredient = Ingredient.objects.get(pk=154) mealitem = MealItem() mealitem.meal = meal mealitem.ingredient = ingredient mealitem.order = 2 mealitem.amount = 100 mealitem.save() # Protein powder if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8244) else: ingredient = Ingredient.objects.get(pk=196) mealitem = MealItem() mealitem.meal = meal mealitem.ingredient = ingredient mealitem.order = 3 mealitem.amount = 30 mealitem.save() # # 11 o'clock meal meal = Meal() meal.plan = plan meal.order = 2 meal.time = datetime.time(11, 0) meal.save() # Bread, in slices if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8225) unit = None amount = 80 else: ingredient = Ingredient.objects.get(pk=5370) unit = IngredientWeightUnit.objects.get(pk=9874) amount = 2 mealitem = MealItem() mealitem.meal = meal mealitem.ingredient = ingredient mealitem.weight_unit = unit mealitem.order = 1 mealitem.amount = amount mealitem.save() # Turkey if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8201) else: ingredient = Ingredient.objects.get(pk=1643) mealitem = MealItem() mealitem.meal = meal mealitem.order = 2 mealitem.ingredient = ingredient mealitem.amount = 100 mealitem.save() # Cottage cheese if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8222) # TODO: check this! else: ingredient = Ingredient.objects.get(pk=17) mealitem = MealItem() mealitem.meal = meal mealitem.ingredient = ingredient mealitem.order = 3 mealitem.amount = 50 mealitem.save() # Tomato, one if language.short_name == 'de': ingredient = Ingredient.objects.get(pk=8217) unit = None amount = 120 else: ingredient = Ingredient.objects.get(pk=3208) unit = IngredientWeightUnit.objects.get(pk=5950) amount = 1 mealitem = MealItem() mealitem.meal = meal mealitem.weight_unit = unit mealitem.ingredient = ingredient mealitem.order = 4 mealitem.amount = amount mealitem.save() # # Lunch (leave empty so users can add their own ingredients) meal = Meal() meal.plan = plan meal.order = 3 meal.time = datetime.time(13, 0) meal.save() # # Workout schedules # # create some empty workouts to fill the list workout2 = Workout( user=user, name=_('Placeholder workout nr {0} for schedule').format(1)) workout2.save() workout3 = Workout( user=user, name=_('Placeholder workout nr {0} for schedule').format(2)) workout3.save() workout4 = Workout( user=user, name=_('Placeholder workout nr {0} for schedule').format(3)) workout4.save() schedule = Schedule() schedule.user = user schedule.name = _('My cool workout schedule') schedule.start_date = datetime.date.today() - datetime.timedelta(weeks=4) schedule.is_active = True schedule.is_loop = True schedule.save() # Add the workouts step = ScheduleStep() step.schedule = schedule step.workout = workout2 step.duration = 2 step.order = 1 step.save() step = ScheduleStep() step.schedule = schedule step.workout = workout step.duration = 4 step.order = 2 step.save() step = ScheduleStep() step.schedule = schedule step.workout = workout3 step.duration = 1 step.order = 3 step.save() step = ScheduleStep() step.schedule = schedule step.workout = workout4 step.duration = 6 step.order = 4 step.save() # # Add two more schedules, to make the overview more interesting schedule = Schedule() schedule.user = user schedule.name = _('Empty placeholder schedule') schedule.start_date = datetime.date.today() - datetime.timedelta(weeks=15) schedule.is_active = False schedule.is_loop = False schedule.save() step = ScheduleStep() step.schedule = schedule step.workout = workout2 step.duration = 2 step.order = 1 step.save() schedule = Schedule() schedule.user = user schedule.name = _('Empty placeholder schedule') schedule.start_date = datetime.date.today() - datetime.timedelta(weeks=30) schedule.is_active = False schedule.is_loop = False schedule.save() step = ScheduleStep() step.schedule = schedule step.workout = workout4 step.duration = 2 step.order = 1 step.save()