Files
aupi/cache.py
2024-10-19 14:43:21 +02:00

71 lines
2.2 KiB
Python

from datetime import datetime, timedelta
import os.path
from pathlib import Path
import time
import json
from models.location import JsonEncoder
from utils.helperutils import log
cache = {}
class Cache():
def get(key, notOlderThanHours = 24):
#print('get key ' + key)
if key in cache:
cacheobj = cache[key]
if(not cache):
return None
if(cacheobj.isOlderThanHours(notOlderThanHours)):
log('removing cacheobject ' + key)
del cache[key]
return None
# log( 'returning cacheobject ' + key)
return cacheobj.obj
def add(key, obj):
log('adding cacheobject ' + key)
cacheobj = CacheObj(key, obj)
cache[key] = cacheobj
class CacheObj:
def __init__(self, key, obj):
self.key = key
self.obj = obj
self.time=datetime.now()
def isOlderThanHours(self, hours):
# log('checking time cacheobject ' + self.key + ': ' + str(self.time) + " < " + str(datetime.now() - timedelta(hours=hours)))
return self.time < datetime.now() - timedelta(hours=hours)
class FileCache():
def get(key, notOlderThanHours = None):
filepath = "./filecache/" + key + ".json"
cachefile = Path(filepath)
if cachefile.is_file():
ti_m = os.path.getmtime(filepath)
if(notOlderThanHours is not None):
#checks last modified age of file, and removes it if it is too old
log('checking time cachefile ' + filepath + ': ' + str(ti_m) + " < " + str(time.time() - (3600 * notOlderThanHours)))
if( ti_m < time.time() - (3600 * notOlderThanHours)):
log('removing old filecache')
os.remove(filepath)
return None
with open(filepath) as json_file:
json_data = json.load(json_file)
log('returning json data from cachefile: ' + key)
return json_data
return None
def add(key, obj):
log('adding filecacheobject ' + key)
json_data = JsonEncoder().encode(obj)
with open("./filecache/" + key + ".json", 'w+') as f:
f.write(json_data)