Replace werkzeug.contrib.SimpleCache with cachetools (#7, fixes #12)

This commit is contained in:
f4lco
2020-04-23 12:55:16 +02:00
parent 5960dd2ebd
commit d2837df10b
3 changed files with 20 additions and 14 deletions
+1
View File
@@ -2,6 +2,7 @@
requests = "*" requests = "*"
pyopenmensa = "*" pyopenmensa = "*"
flask = "*" flask = "*"
cachetools = "*"
[dev-packages] [dev-packages]
pytest = "*" pytest = "*"
Generated
+9 -1
View File
@@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "4c66b42d8352700feffd46dae3c934f746212df7e897b570715bd799c3c5f121" "sha256": "475551fbc4e977aa1a4edffb7f8549bf4046075e632ac6908f73e3a7a6e0d6bf"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
@@ -16,6 +16,14 @@
] ]
}, },
"default": { "default": {
"cachetools": {
"hashes": [
"sha256:1d057645db16ca7fe1f3bd953558897603d6f0b9c51ed9d11eb4d071ec4e2aab",
"sha256:de5d88f87781602201cde465d3afe837546663b168e8b39df67411b0bf10cefc"
],
"index": "pypi",
"version": "==4.1.0"
},
"certifi": { "certifi": {
"hashes": [ "hashes": [
"sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", "sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304",
+10 -13
View File
@@ -3,9 +3,10 @@
import os import os
import urllib.parse import urllib.parse
import cachetools as ct
from flask import Flask, jsonify, make_response, url_for from flask import Flask, jsonify, make_response, url_for
from flask.logging import create_logger from flask.logging import create_logger
from werkzeug.contrib.cache import SimpleCache
from stw_potsdam import feed from stw_potsdam import feed
from stw_potsdam.config import read_canteen_config from stw_potsdam.config import read_canteen_config
@@ -29,7 +30,7 @@ if 'BASE_URL' in os.environ: # pragma: no cover
if base_url.path: if base_url.path:
app.config['APPLICATION_ROOT'] = base_url.path app.config['APPLICATION_ROOT'] = base_url.path
cache = SimpleCache() cache = ct.ttl.TTLCache(maxsize=30, ttl=CACHE_TIMEOUT)
def canteen_not_found(config, canteen_name): def canteen_not_found(config, canteen_name):
@@ -40,19 +41,15 @@ def canteen_not_found(config, canteen_name):
return make_response(message, 404) return make_response(message, 404)
def get_menu_cached(canteen): def _menu_params(canteen):
params = MenuParams(canteen_id=canteen.id, chash=canteen.chash) return MenuParams(canteen_id=canteen.id, chash=canteen.chash)
menu = cache.get(params)
if menu:
log.info('Using cached menu for %s', canteen)
return menu or get_menu(canteen, params)
def get_menu(canteen, params): @ct.cached(cache=cache, key=_menu_params)
def get_menu(canteen):
log.info('Downloading menu for %s', canteen) log.info('Downloading menu for %s', canteen)
menu = download_menu(params) params = _menu_params(canteen)
cache.set(params, menu, timeout=CACHE_TIMEOUT) return download_menu(params)
return menu
def _canteen_feed_xml(xml): def _canteen_feed_xml(xml):
@@ -94,7 +91,7 @@ def canteen_menu_feed(canteen_name):
return canteen_not_found(config, canteen_name) return canteen_not_found(config, canteen_name)
canteen = config[canteen_name] canteen = config[canteen_name]
menu = get_menu_cached(canteen) menu = get_menu(canteen)
return canteen_menu_feed_xml(menu) return canteen_menu_feed_xml(menu)