From 5423f8b8bbf57b8095ba73e7fa8532c9c9030937 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Fri, 20 Oct 2023 18:31:58 +1100 Subject: [PATCH] Fix bug introduced in last few commits where list of workouts wouldnt be shown in order --- app.py | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/app.py b/app.py index 301f7c1..5ff481e 100644 --- a/app.py +++ b/app.py @@ -1,3 +1,4 @@ +from sqlalchemy import desc from flask_basicauth import BasicAuth import matplotlib.dates as mdates import matplotlib.pyplot as plt @@ -42,7 +43,8 @@ class User(db.Model): name = db.Column(db.String(255), nullable=False) bike_id = db.Column(db.Integer, db.ForeignKey( 'bikes.id', ondelete='CASCADE'), nullable=False) - workouts = db.relationship('Workout', backref='user', lazy=True) + workouts = db.relationship( + 'Workout', backref='user', lazy=True, order_by='desc(Workout.created_at)') # 'Workout.created_at' bike = db.relationship('Bike', backref='user', lazy=True) @@ -145,7 +147,7 @@ def delete_user(user_id): def workouts(user_id): user = User.query.get(user_id) if request.method == 'GET': - workouts_data = get_workouts_for_user(user) + workouts_data = get_workouts_for_user_view_data(user) return render_template('workouts_list.html', workouts=workouts_data) elif request.method == 'POST': @@ -272,7 +274,7 @@ def delete_workout(user_id, workout_id): @app.route('/user//workouts', methods=['GET']) def workouts_for_user(user_id): user = User.query.get(user_id) - workouts_data = get_workouts_for_user(user) + workouts_data = get_workouts_for_user_view_data(user) return render_template('workouts_list.html', workouts=workouts_data) @@ -292,7 +294,7 @@ def update_users_bike(user_id): @ app.route('/user//calendar', methods=['GET']) def calendar_view(user_id): user = User.query.get(user_id) - workouts = get_workouts_for_user(user) + workouts = get_workouts_for_user_view_data(user) date = request.args.get('date', default=datetime.now().date(), type=toDate) calendar_month = generate_calendar_monthly_view(workouts, date) return render_template('partials/calendar.html', calendar_month=calendar_month, user_id=user_id) @@ -301,7 +303,7 @@ def calendar_view(user_id): @ app.route("/user//workout/list", methods=['GET']) def workout_list(user_id): user = User.query.get(user_id) - workouts = get_workouts_for_user(user) + workouts = get_workouts_for_user_view_data(user) return render_template('partials/workouts_list_fragment.html', workouts=workouts, user_id=user_id, workouts_all_loaded=True) @@ -344,14 +346,14 @@ def render_users_and_workouts(): """ users = User.query.all() - users_data = [generate_user_data(user, get_workouts_for_user( + users_data = [generate_user_data(user, get_workouts_for_user_view_data( user)) for user in users] template_name = 'users_and_workouts_wrapper.html' if htmx else 'users_and_workouts.html' return render_template(template_name, users=users_data, bikes=Bike.query.all()) -def get_workouts_for_user(user): +def get_workouts_for_user_view_data(user): """ Retrieve view data for all workouts of a user. @@ -445,16 +447,6 @@ def format_date_with_ordinal(d, format_string): return d.strftime(format_string).replace('{th}', ordinal) -def format_duration(duration): - hours, remainder = divmod(duration.seconds, 3600) - minutes, _ = divmod(remainder, 60) - - if duration >= timedelta(hours=1): - return f"{hours}h {minutes}m" - else: - return f"{minutes}m" - - def date_range(start_date, end_date): """ Generator for dates between two dates (inclusive).