From 3e81ca5dbb92034457b58711c0f0612777271e44 Mon Sep 17 00:00:00 2001
From: thomaswoehlke <thomas.woehlke@gmail.com>
Date: Tue, 18 May 2021 12:36:39 +0200
Subject: [PATCH] work

---
 requirements/dev.in                         |  1 +
 src/covid19/blueprints/app_all/all_model.py |  6 +++++-
 src/covid19/blueprints/who/who_model.py     | 14 ++++++++------
 src/database.py                             |  8 +++++---
 4 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/requirements/dev.in b/requirements/dev.in
index 4a2502f7..5531f6be 100644
--- a/requirements/dev.in
+++ b/requirements/dev.in
@@ -4,6 +4,7 @@ Flask-Cors>=3.0.10
 Flask-BS4>=4.5.3.0,<5.0
 Flask-Admin>=1.5.7
 Flask-Login>=0.5.0
+Flask-Caching>=1.10.1
 celery[redis]>=5.0.5
 PyMySQL>=1.0.2
 psycopg2-binary>=2.8.6
diff --git a/src/covid19/blueprints/app_all/all_model.py b/src/covid19/blueprints/app_all/all_model.py
index d5d78585..909779d5 100644
--- a/src/covid19/blueprints/app_all/all_model.py
+++ b/src/covid19/blueprints/app_all/all_model.py
@@ -1,5 +1,5 @@
 from datetime import date, datetime
-from database import db, ITEMS_PER_PAGE
+from database import db, cache, ITEMS_PER_PAGE
 
 
 class ApplicationDateReported(db.Model):
@@ -136,12 +136,14 @@ class ApplicationDateReported(db.Model):
             .one_or_none()
 
     @classmethod
+    @cache.memoize(50)
     def get_by_date_reported(cls, p_date_reported: str):
         return db.session.query(cls)\
             .filter(cls.date_reported_import_str == p_date_reported)\
             .one()
 
     @classmethod
+    @cache.memoize(50)
     def find_by_date_reported(cls, p_date_reported: str):
         return db.session.query(cls)\
             .filter(cls.date_reported_import_str == p_date_reported)\
@@ -206,6 +208,7 @@ class ApplicationRegion(db.Model):
         return regions
 
     @classmethod
+    @cache.memoize(50)
     def get_by_id(cls, other_id: int):
         return db.session.query(cls)\
             .filter(cls.id == other_id)\
@@ -218,6 +221,7 @@ class ApplicationRegion(db.Model):
             .one_or_none()
 
     @classmethod
+    @cache.memoize(50)
     def get_by_region(cls, i_region: str):
         return db.session.query(cls)\
             .filter(cls.region == i_region)\
diff --git a/src/covid19/blueprints/who/who_model.py b/src/covid19/blueprints/who/who_model.py
index 6340ab3f..35afafce 100644
--- a/src/covid19/blueprints/who/who_model.py
+++ b/src/covid19/blueprints/who/who_model.py
@@ -1,7 +1,7 @@
 from sqlalchemy import and_
 from datetime import date
 from sqlalchemy.orm import joinedload, subqueryload
-from database import db, ITEMS_PER_PAGE
+from database import db, cache, ITEMS_PER_PAGE
 from covid19.blueprints.app_all.all_model import ApplicationDateReported, ApplicationRegion
 
 
@@ -139,6 +139,7 @@ class WhoCountry(db.Model):
         ).one_or_none()
 
     @classmethod
+    @cache.memoize(50)
     def get_by_country_code(cls, i_country_code):
         return db.session.query(cls).filter(
             cls.country_code == i_country_code
@@ -150,13 +151,14 @@ class WhoCountry(db.Model):
             cls.country == i_country
         ).one_or_none()
 
-    @classmethod
-    def get_by_country_code(cls, i_country_code):
-        return db.session.query(cls).filter(
-            cls.country_code == i_country_code
-        ).one()
+    # @classmethod
+    # def get_by_country_code(cls, i_country_code):
+    #    return db.session.query(cls).filter(
+    #        cls.country_code == i_country_code
+    #    ).one()
 
     @classmethod
+    @cache.memoize(50)
     def get_by_country(cls, i_country):
         return db.session.query(cls).filter(
             cls.country == i_country
diff --git a/src/database.py b/src/database.py
index 1970a40c..1553a35d 100644
--- a/src/database.py
+++ b/src/database.py
@@ -1,6 +1,6 @@
 # TODO: #210 database.py: logging for Celery on Windows
 from flask import Flask, logging
-# from flask_caching import Cache
+from flask_caching import Cache
 from flask_cors import CORS
 from flask_bs4 import Bootstrap
 from flask_sqlalchemy import SQLAlchemy
@@ -11,7 +11,9 @@ from celery import Celery
 # TODO: #210 database.py: logging for Celery on Windows
 from celery.utils.log import LoggingProxy
 
-# cache = Cache(config={"CACHE_TYPE": "simple"})
+# https://flask-caching.readthedocs.io/en/latest/
+
+cache = Cache(config={"CACHE_TYPE": "simple"})
 app_cors = CORS()
 app_bootstrap = Bootstrap()
 login_manager = LoginManager()
@@ -32,7 +34,7 @@ def create_app():
     my_app.config['SQLALCHEMY_DATABASE_URI'] = my_db_url
     my_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # silence the deprecation warning
     my_app.config['FLASK_ADMIN_SWATCH'] = 'superhero'
-    # cache.init_app(app)
+    cache.init_app(my_app)
     return my_app
 
 
-- 
GitLab