Some checks failed
Ik ben Henk python api ftp deploy / Deploy Python api (push) Has been cancelled
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
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)
|