Add fix for error thrown when fetching /person/id for a person without any workouts
This commit is contained in:
15
app.py
15
app.py
@@ -4,7 +4,7 @@ from flask import Flask, render_template, redirect, request, url_for
|
|||||||
import jinja_partials
|
import jinja_partials
|
||||||
from decorators import validate_person, validate_topset, validate_workout
|
from decorators import validate_person, validate_topset, validate_workout
|
||||||
from db import DataBase
|
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
|
from flask_htmx import HTMX
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
@@ -36,19 +36,16 @@ def get_person_list():
|
|||||||
def get_person(person_id):
|
def get_person(person_id):
|
||||||
person = db.get_person(person_id)
|
person = db.get_person(person_id)
|
||||||
|
|
||||||
max_date = convert_str_to_date(request.args.get(
|
(min_date, max_date) = get_earliest_and_latest_workout_date(person)
|
||||||
'max_date'), '%Y-%m-%d') or max(person['Workouts'], key=lambda x: x['StartDate'])['StartDate']
|
|
||||||
min_date = convert_str_to_date(request.args.get(
|
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)
|
selected_exercise_ids = [int(i)
|
||||||
for i in request.args.getlist('exercise_id')] or [e['ExerciseId'] for e in person['Exercises']]
|
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
|
person['Workouts'] = [filter_workout_topsets(workout, selected_exercise_ids) for workout in person['Workouts'] if
|
||||||
workout['StartDate'] <= max_date and workout['StartDate'] >= min_date]
|
workout['StartDate'] <= max_date and workout['StartDate'] >= min_date]
|
||||||
|
|
||||||
|
|||||||
12
utils.py
12
utils.py
@@ -126,3 +126,15 @@ def convert_str_to_date(date_str, format='%Y-%m-%d'):
|
|||||||
return None
|
return None
|
||||||
except TypeError:
|
except TypeError:
|
||||||
return None
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user