From f264596fcf2b32755e80e6600500cda7be75a0e4 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Sun, 27 Nov 2022 13:42:59 +1100 Subject: [PATCH] Add fix for error thrown when fetching /person/id for a person without any workouts --- app.py | 15 ++++++--------- utils.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index f61c40f..3e4fc9e 100644 --- a/app.py +++ b/app.py @@ -4,7 +4,7 @@ from flask import Flask, render_template, redirect, request, url_for import jinja_partials from decorators import validate_person, validate_topset, validate_workout from db import DataBase -from utils import get_people_and_exercise_rep_maxes, convert_str_to_date +from utils import get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets from flask_htmx import HTMX app = Flask(__name__) @@ -36,19 +36,16 @@ def get_person_list(): def get_person(person_id): person = db.get_person(person_id) - max_date = convert_str_to_date(request.args.get( - 'max_date'), '%Y-%m-%d') or max(person['Workouts'], key=lambda x: x['StartDate'])['StartDate'] + (min_date, max_date) = get_earliest_and_latest_workout_date(person) + min_date = convert_str_to_date(request.args.get( - 'min_date'), '%Y-%m-%d') or min(person['Workouts'], key=lambda x: x['StartDate'])['StartDate'] + 'min_date'), '%Y-%m-%d') or min_date + max_date = convert_str_to_date(request.args.get( + 'max_date'), '%Y-%m-%d') or max_date selected_exercise_ids = [int(i) for i in request.args.getlist('exercise_id')] or [e['ExerciseId'] for e in person['Exercises']] - def filter_workout_topsets(workout, selected_exercise_ids): - workout['TopSets'] = [topset for topset in workout['TopSets'] - if topset['ExerciseId'] in selected_exercise_ids] - return workout - person['Workouts'] = [filter_workout_topsets(workout, selected_exercise_ids) for workout in person['Workouts'] if workout['StartDate'] <= max_date and workout['StartDate'] >= min_date] diff --git a/utils.py b/utils.py index 7c0e883..97488bf 100644 --- a/utils.py +++ b/utils.py @@ -126,3 +126,15 @@ def convert_str_to_date(date_str, format='%Y-%m-%d'): return None except TypeError: return None + + +def get_earliest_and_latest_workout_date(person): + if len(person['Workouts']) > 0: + return (min(person['Workouts'], key=lambda x: x['StartDate'])['StartDate'], max(person['Workouts'], key=lambda x: x['StartDate'])['StartDate']) + return (datetime.now().date(), datetime.now().date()) + + +def filter_workout_topsets(workout, selected_exercise_ids): + workout['TopSets'] = [topset for topset in workout['TopSets'] + if topset['ExerciseId'] in selected_exercise_ids] + return workout