Add brotli complression, cache graph requests for 5mins and add pagination for person overview

This commit is contained in:
Peter Stockings
2026-02-04 09:28:18 +11:00
parent b4121eada7
commit 71a5ae590e
5 changed files with 96 additions and 44 deletions

33
app.py
View File

@@ -1,5 +1,11 @@
from datetime import date
import os
from dotenv import load_dotenv
# Load environment variables from .env file in non-production environments
if os.environ.get('FLASK_ENV') != 'production':
load_dotenv()
from datetime import date
from flask import Flask, abort, render_template, redirect, request, url_for
from flask_login import LoginManager, login_required, current_user
import jinja_partials
@@ -20,18 +26,17 @@ from extensions import db
from utils import convert_str_to_date
from flask_htmx import HTMX
import minify_html
import os
from dotenv import load_dotenv
from flask_compress import Compress
# Load environment variables from .env file in non-production environments
if os.environ.get('FLASK_ENV') != 'production':
load_dotenv()
from flask_caching import Cache
app = Flask(__name__)
app.config['COMPRESS_REGISTER'] = True
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 31536000 # 1 year
app.config['CACHE_TYPE'] = 'SimpleCache'
app.config['CACHE_DEFAULT_TIMEOUT'] = 300 # 5 minutes
Compress(app)
cache = Cache(app)
app.config.from_pyfile('config.py')
app.secret_key = os.environ.get('SECRET_KEY', '2a661781919643cb8a5a8bc57642d99f')
jinja_partials.register_extensions(app)
@@ -140,7 +145,10 @@ def person_overview(person_id):
if not selected_exercise_ids and htmx.trigger_name != 'exercise_id':
selected_exercise_ids = db.person_overview.list_of_performed_exercise_ids(person_id, min_date, max_date)
person = db.person_overview.get(person_id, min_date, max_date, selected_exercise_ids)
limit = request.args.get('limit', type=int, default=20)
offset = request.args.get('offset', type=int, default=0)
person = db.person_overview.get(person_id, min_date, max_date, selected_exercise_ids, limit=limit, offset=offset)
exercises = db.person_overview.get_exercises_with_selection(person_id, min_date, max_date, selected_exercise_ids)
tags = db.get_tags_for_person(person_id)
@@ -151,10 +159,15 @@ def person_overview(person_id):
"tags": tags,
"selected_exercise_ids": selected_exercise_ids,
"max_date": max_date,
"min_date": min_date
"min_date": min_date,
"limit": limit,
"offset": offset,
"next_offset": offset + limit
}
if htmx:
if htmx.target == 'load-more-row':
return render_template('partials/workout_rows.html', **render_args)
return render_block(app.jinja_env, 'person_overview.html', 'content', **render_args), 200, {"HX-Push-Url": url_for('person_overview', person_id=person_id, min_date=min_date, max_date=max_date, exercise_id=selected_exercise_ids), "HX-Trigger": "refreshStats"}
return render_template('person_overview.html', **render_args), 200, {"HX-Push-Url": url_for('person_overview', person_id=person_id, min_date=min_date, max_date=max_date, exercise_id=selected_exercise_ids), "HX-Trigger": "refreshStats"}
@@ -330,6 +343,7 @@ def get_exercise_progress_for_user(person_id, exercise_id):
return render_template('partials/sparkline.html', **exercise_progress)
@app.route("/stats", methods=['GET'])
@cache.cached(timeout=300, query_string=True)
def get_stats():
selected_people_ids = request.args.getlist('person_id', type=int)
min_date = request.args.get('min_date', type=convert_str_to_date)
@@ -339,6 +353,7 @@ def get_stats():
return render_template('partials/stats.html', stats=stats, refresh_url=request.full_path)
@app.route("/graphs", methods=['GET'])
@cache.cached(timeout=300, query_string=True)
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)