fix Redis JSON cache issues
This commit is contained in:
parent
dbff4005fc
commit
b44c4a7597
10
app.py
10
app.py
@ -10,13 +10,17 @@ app.config.from_prefixed_env()
|
|||||||
app.secret_key = app.config["THERAPY_SECRET"]
|
app.secret_key = app.config["THERAPY_SECRET"]
|
||||||
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
|
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
|
||||||
app.config["CACHE_TYPE"] = "redis"
|
app.config["CACHE_TYPE"] = "redis"
|
||||||
app.config["CACHE_REDIS_HOST"] = "localhost"
|
app.config["CACHE_REDIS_HOST"] = "redis"
|
||||||
app.config["CACHE_REDIS_PORT"] = 6379
|
app.config["CACHE_REDIS_PORT"] = 6379
|
||||||
app.config["CACHE_REDIS_DB"] = 0
|
app.config["CACHE_REDIS_DB"] = 0
|
||||||
|
|
||||||
cache = Cache(app=app)
|
cache = Cache(app=app)
|
||||||
cache.init_app(app)
|
cache.init_app(app)
|
||||||
redis_client = redis.Redis(host='localhost', port=6379, db=0)
|
redis_client = redis.Redis(
|
||||||
|
host=app.config["CACHE_REDIS_HOST"],
|
||||||
|
port=app.config["CACHE_REDIS_PORT"],
|
||||||
|
db=app.config["CACHE_REDIS_DB"]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
@ -50,7 +54,7 @@ def search_for_doctors_with_params():
|
|||||||
return redirect("/")
|
return redirect("/")
|
||||||
|
|
||||||
# Create an APIHandler to process the given data by gathering the desired phone times
|
# Create an APIHandler to process the given data by gathering the desired phone times
|
||||||
api_handler = APIHandler()
|
api_handler = APIHandler(redis_client)
|
||||||
# Get a list of locations
|
# Get a list of locations
|
||||||
locations = api_handler.get_lat_lon_location_list(location)
|
locations = api_handler.get_lat_lon_location_list(location)
|
||||||
# Location not found at Arztsuche API
|
# Location not found at Arztsuche API
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import json
|
import json
|
||||||
|
import sys
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
@ -6,8 +7,7 @@ from requests import JSONDecodeError
|
|||||||
import base64
|
import base64
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from app import redis_client
|
from arztapi.ArztPraxisDatas import ArztPraxisDatas, ArztPraxisData
|
||||||
from arztapi.ArztPraxisDatas import ArztPraxisDatas
|
|
||||||
from arztapi.DoctorInformation import DoctorInformation, PhoneTime
|
from arztapi.DoctorInformation import DoctorInformation, PhoneTime
|
||||||
from arztapi.DoctorPhoneTime import DoctorPhoneTime
|
from arztapi.DoctorPhoneTime import DoctorPhoneTime
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ class APIHandler:
|
|||||||
Class for accessing and handling the Arztsuche API -> Get necessary data and filter it for theraPy
|
Class for accessing and handling the Arztsuche API -> Get necessary data and filter it for theraPy
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, redis_client):
|
||||||
# Base URL as given by the base website
|
# Base URL as given by the base website
|
||||||
self.base_api_url = "https://arztsuche.116117.de/api/"
|
self.base_api_url = "https://arztsuche.116117.de/api/"
|
||||||
self.json_data = {}
|
self.json_data = {}
|
||||||
@ -25,6 +25,7 @@ class APIHandler:
|
|||||||
self.phone_times = []
|
self.phone_times = []
|
||||||
self.general_information = []
|
self.general_information = []
|
||||||
self.processed_doctor_phone_times = []
|
self.processed_doctor_phone_times = []
|
||||||
|
self.redis_client = redis_client
|
||||||
|
|
||||||
def get_lat_lon_location_list(self, location):
|
def get_lat_lon_location_list(self, location):
|
||||||
"""
|
"""
|
||||||
@ -161,18 +162,22 @@ class APIHandler:
|
|||||||
return self.phone_times
|
return self.phone_times
|
||||||
|
|
||||||
def get_current_doctor_information_data_in_cache_with_time_check(self, amount_of_days):
|
def get_current_doctor_information_data_in_cache_with_time_check(self, amount_of_days):
|
||||||
cached_data = redis_client.get(str(self.json_data))
|
cached_data = self.redis_client.get(str(self.json_data))
|
||||||
if cached_data:
|
if cached_data:
|
||||||
cached_data = json.loads(cached_data)
|
cached_data = json.loads(cached_data)
|
||||||
cache_timestamp = cached_data["timestamp"]
|
cache_timestamp = datetime.fromisoformat(cached_data["timestamp"])
|
||||||
current_date = datetime.now()
|
current_date = datetime.now()
|
||||||
time_difference = current_date - cache_timestamp
|
time_difference = current_date - cache_timestamp
|
||||||
if time_difference.days <= amount_of_days:
|
if time_difference.days <= amount_of_days:
|
||||||
return cached_data["data"]
|
data = [ArztPraxisData.model_validate(json.loads(item)) for item in cached_data["data"]]
|
||||||
|
data = ArztPraxisDatas(arztPraxisDatas=data)
|
||||||
|
return data
|
||||||
|
|
||||||
def set_current_doctor_information_data_in_cache(self):
|
def set_current_doctor_information_data_in_cache(self):
|
||||||
current_date = datetime.now()
|
current_date = datetime.now()
|
||||||
redis_client.set(str(self.json_data), json.dumps({"timestamp": current_date, "data": self.phone_times}))
|
serialized_data = [item.json() for item in self.phone_times.arztPraxisDatas]
|
||||||
|
self.redis_client.set(str(self.json_data), json.dumps({"timestamp": current_date.isoformat(),
|
||||||
|
"data": serialized_data}))
|
||||||
|
|
||||||
def filter_for_therapy_types(self, therapy_types):
|
def filter_for_therapy_types(self, therapy_types):
|
||||||
"""
|
"""
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
annotated-types==0.7.0
|
annotated-types==0.7.0
|
||||||
blinker==1.8.2
|
blinker==1.8.2
|
||||||
|
cachelib==0.9.0
|
||||||
certifi==2024.7.4
|
certifi==2024.7.4
|
||||||
charset-normalizer==3.3.2
|
charset-normalizer==3.3.2
|
||||||
click==8.1.7
|
click==8.1.7
|
||||||
dnspython==2.6.1
|
dnspython==2.6.1
|
||||||
email_validator==2.2.0
|
email_validator==2.2.0
|
||||||
Flask==3.0.3
|
Flask==3.0.3
|
||||||
|
Flask-Caching==2.3.0
|
||||||
gunicorn==23.0.0
|
gunicorn==23.0.0
|
||||||
idna==3.7
|
idna==3.7
|
||||||
itsdangerous==2.2.0
|
itsdangerous==2.2.0
|
||||||
@ -18,5 +20,6 @@ redis==5.2.0
|
|||||||
requests==2.32.3
|
requests==2.32.3
|
||||||
typing_extensions==4.12.2
|
typing_extensions==4.12.2
|
||||||
urllib3==2.2.2
|
urllib3==2.2.2
|
||||||
|
waitress==3.0.0
|
||||||
Werkzeug==3.0.3
|
Werkzeug==3.0.3
|
||||||
WTForms==3.1.2
|
WTForms==3.1.2
|
||||||
|
Loading…
Reference in New Issue
Block a user