from datetime import datetime, timedelta import os 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) # json_data = json.dumps(obj, cls=JsonEncoder, indent=2) # Ensure the filecache directory exists os.makedirs("./filecache", exist_ok=True) with open("./filecache/" + key + ".json", 'w+') as f: f.write(json_data)