Add person graphs endpoint for workouts per week & PRs per week, consumed via dashboard, person overview and notes
This commit is contained in:
23
app.py
23
app.py
@@ -2,12 +2,11 @@ from datetime import datetime, date, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
import os
|
||||
from flask import Flask, abort, render_template, redirect, request, url_for
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||
import jinja_partials
|
||||
from jinja2_fragments import render_block
|
||||
from decorators import validate_person, validate_topset, validate_workout
|
||||
from db import DataBase
|
||||
from utils import count_prs_over_time, get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets, first_and_last_visible_days_in_month, get_weekly_pr_graph_model, get_workout_counts, generate_plot
|
||||
from utils import get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets, first_and_last_visible_days_in_month, generate_plot
|
||||
from flask_htmx import HTMX
|
||||
import minify_html
|
||||
from urllib.parse import quote
|
||||
@@ -66,13 +65,9 @@ def dashboard():
|
||||
people_and_exercise_rep_maxes = get_people_and_exercise_rep_maxes(
|
||||
all_topsets, selected_person_ids, selected_exercise_ids, min_date, max_date)
|
||||
|
||||
weekly_counts = get_workout_counts(all_topsets, 'week')
|
||||
weekly_pr_counts = count_prs_over_time(all_topsets, 'week')
|
||||
dashboard_graphs = [get_weekly_pr_graph_model('Workouts per week', weekly_counts), get_weekly_pr_graph_model('PRs per week', weekly_pr_counts)]
|
||||
|
||||
if htmx:
|
||||
return render_block(app.jinja_env, 'dashboard.html', 'content', model=people_and_exercise_rep_maxes, people=people, exercises=exercises, min_date=min_date, max_date=max_date, selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids, tags=tags, dashboard_graphs=dashboard_graphs)
|
||||
return render_template('dashboard.html', model=people_and_exercise_rep_maxes, people=people, exercises=exercises, min_date=min_date, max_date=max_date, selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids, tags=tags, dashboard_graphs=dashboard_graphs)
|
||||
return render_block(app.jinja_env, 'dashboard.html', 'content', model=people_and_exercise_rep_maxes, people=people, exercises=exercises, min_date=min_date, max_date=max_date, selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids, tags=tags)
|
||||
return render_template('dashboard.html', model=people_and_exercise_rep_maxes, people=people, exercises=exercises, min_date=min_date, max_date=max_date, selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids, tags=tags)
|
||||
|
||||
|
||||
@ app.route("/person/list", methods=['GET'])
|
||||
@@ -457,6 +452,18 @@ def get_stats():
|
||||
stats = db.stats.fetch_stats(selected_people_ids, min_date, max_date, selected_exercise_ids)
|
||||
return render_template('partials/stats.html', stats=stats, refresh_url=request.full_path)
|
||||
|
||||
@app.route("/graphs", methods=['GET'])
|
||||
def get_people_graphs():
|
||||
selected_people_ids = request.args.getlist('person_id', type=int)
|
||||
min_date = request.args.get('min_date', type=convert_str_to_date)
|
||||
max_date = request.args.get('max_date', type=convert_str_to_date)
|
||||
selected_exercise_ids = request.args.getlist('exercise_id', type=int)
|
||||
|
||||
graphs = db.people_graphs.get(selected_people_ids, min_date, max_date, selected_exercise_ids)
|
||||
|
||||
return render_template('partials/people_graphs.html', graphs=graphs, refresh_url=request.full_path)
|
||||
|
||||
|
||||
@ app.route("/person/<int:person_id>/workout/<int:workout_id>", methods=['GET'])
|
||||
def show_workout(person_id, workout_id):
|
||||
view_model = db.workout.get(person_id, workout_id)
|
||||
|
||||
Reference in New Issue
Block a user