From 18bd51a1cba3735476a88af1b30f88b3ad3d73e1 Mon Sep 17 00:00:00 2001 From: Lazlo Westerhof Date: Fri, 25 Oct 2024 13:27:45 +0200 Subject: [PATCH] PoC with response caching --- app.py | 4 ++++ cache_config.py | 15 +++++++++++++++ general/general.py | 3 +++ group_manager/group_manager.py | 2 ++ requirements.txt | 1 + setup.cfg | 2 +- 6 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 cache_config.py diff --git a/app.py b/app.py index a2154adc..1c91d886 100644 --- a/app.py +++ b/app.py @@ -14,6 +14,7 @@ from admin.admin import admin_bp, set_theme_loader from api import api_bp +from cache_config import cache from datarequest.datarequest import datarequest_bp from deposit.deposit import deposit_bp from fileviewer.fileviewer import fileviewer_bp @@ -128,6 +129,9 @@ def load_admin_setting() -> Dict[str, Any]: # Start Flask-Session Session(app) +# Initialize the cache. +cache.init_app(app) + # Start monitoring thread for extracting tech support information # Monitor signal file can be set to empty to completely disable monitor thread monitor_enabled: bool = app.config.get("MONITOR_SIGNAL_FILE", "/var/www/yoda/show-tech.sig") != "" diff --git a/cache_config.py b/cache_config.py new file mode 100644 index 00000000..72f0bbde --- /dev/null +++ b/cache_config.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +__copyright__ = 'Copyright (c) 2024, Utrecht University' +__license__ = 'GPLv3, see LICENSE' + +from flask_caching import Cache + +config = { + 'CACHE_TYPE': 'FileSystemCache', + 'CACHE_DIR': '/tmp', + 'CACHE_DEFAULT_TIMEOUT': 300 +} + +# Create a Cache instance. +cache = Cache(config=config) diff --git a/general/general.py b/general/general.py index 20cad295..cd9e370f 100644 --- a/general/general.py +++ b/general/general.py @@ -6,6 +6,8 @@ from flask import Blueprint, redirect, render_template, Response, url_for from flask_wtf.csrf import CSRFError +from cache_config import cache + general_bp = Blueprint('general_bp', __name__, template_folder='templates/general', static_folder='static/general', @@ -13,6 +15,7 @@ @general_bp.route('/') +@cache.cached(timeout=60) def index() -> Response: return render_template('index.html') diff --git a/group_manager/group_manager.py b/group_manager/group_manager.py index ec5e7132..57f6771f 100644 --- a/group_manager/group_manager.py +++ b/group_manager/group_manager.py @@ -6,6 +6,7 @@ from flask import Blueprint, make_response, render_template, request, Response import api +from cache_config import cache group_manager_bp = Blueprint('group_manager_bp', __name__, template_folder='templates', @@ -14,6 +15,7 @@ @group_manager_bp.route('/') +@cache.cached(timeout=60) def index() -> Response: response = api.call('group_data', data={}) group_hierarchy = response['data']['group_hierarchy'] diff --git a/requirements.txt b/requirements.txt index c0217f8a..0f3ea29b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ python-irodsclient==2.2.0 Flask==3.0.2 flask-session==0.6.0 Flask-WTF==1.2.1 +Flask-Caching==2.3.0 mod-wsgi==5.0.0 pyjwt[crypto]==2.8.0 requests==2.32.0 diff --git a/setup.cfg b/setup.cfg index 8f4785f7..39d7c090 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,7 +4,7 @@ import-order-style=smarkets strictness=short docstring_style=sphinx max-line-length=127 -application-import-names=admin,api,connman,errors,fileviewer,general,group_manager,monitor,research,search,open_search,stats,user,vault,deposit,intake,datarequest,util +application-import-names=admin,api,cache_config,connman,errors,fileviewer,general,group_manager,monitor,research,search,open_search,stats,user,vault,deposit,intake,datarequest,util exclude=venv [mypy]