Add brotli complression, cache graph requests for 5mins and add pagination for person overview
This commit is contained in:
33
app.py
33
app.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user