Add files via upload
This commit is contained in:
95
windowsAgent/source/storage.py
Normal file
95
windowsAgent/source/storage.py
Normal file
@ -0,0 +1,95 @@
|
||||
from pathlib import Path
|
||||
import json, os
|
||||
|
||||
loadCache = {}
|
||||
|
||||
|
||||
class CorruptDataException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def flushLoadCache():
|
||||
loadCache = {}
|
||||
|
||||
|
||||
class AbsentRecordException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def exists(name, saveSpace="Default"):
|
||||
f = Path("data/storage/" + saveSpace + "/" + name + ".json")
|
||||
return f.is_file()
|
||||
|
||||
|
||||
def delete(name, saveSpace="Default", silent=False):
|
||||
if exists(name, saveSpace):
|
||||
os.unlink("data/storage/" + saveSpace + "/" + name + ".json")
|
||||
else:
|
||||
if not silent:
|
||||
raise AbsentRecordException("Record " + name +
|
||||
" not found in savespace " + saveSpace)
|
||||
|
||||
|
||||
def commitToDisk(name=False, Savespace=False):
|
||||
for ISaveSpace in loadCache.keys():
|
||||
if Savespace != False:
|
||||
if ISaveSpace != Savespace:
|
||||
continue
|
||||
for Iname in loadCache[ISaveSpace].keys():
|
||||
if name != False:
|
||||
if Iname != name:
|
||||
continue
|
||||
save(Iname, loadCache[ISaveSpace][Iname], ISaveSpace)
|
||||
|
||||
|
||||
def refreshFromDisk(name=False, Savespace=False):
|
||||
for ISaveSpace in loadCache.keys():
|
||||
if Savespace != False:
|
||||
if ISaveSpace != Savespace:
|
||||
continue
|
||||
for Iname in loadCache[ISaveSpace].keys():
|
||||
if name != False:
|
||||
if Iname != name:
|
||||
continue
|
||||
load(Iname, ISaveSpace, True)
|
||||
|
||||
|
||||
def save(name, value, saveSpace="Default", useCacheOnly=False):
|
||||
if saveSpace in loadCache.keys():
|
||||
if name in loadCache[saveSpace].keys():
|
||||
loadCache[saveSpace][name] = value
|
||||
if useCacheOnly:
|
||||
if saveSpace not in loadCache.keys():
|
||||
loadCache[saveSpace] = {}
|
||||
if name not in loadCache[saveSpace].keys():
|
||||
loadCache[saveSpace][name] = value
|
||||
else:
|
||||
Path("data/storage/" + saveSpace).mkdir(parents=True, exist_ok=True)
|
||||
with open("data/storage/" + saveSpace + "/" + name + ".json",
|
||||
"w+") as file:
|
||||
file.write(json.dumps(value))
|
||||
|
||||
|
||||
def load(name, saveSpace="Default", cached=False):
|
||||
if cached and saveSpace in loadCache.keys():
|
||||
if name in loadCache[saveSpace].keys():
|
||||
return loadCache[saveSpace][name]
|
||||
try:
|
||||
with open("data/storage/" + saveSpace + "/" + name + ".json",
|
||||
"r") as file:
|
||||
try:
|
||||
res = json.loads(file.read())
|
||||
if cached:
|
||||
if saveSpace not in loadCache.keys():
|
||||
loadCache[saveSpace] = {}
|
||||
if name not in loadCache[saveSpace].keys():
|
||||
loadCache[saveSpace][name] = res
|
||||
return res
|
||||
|
||||
except json.decoder.JSONDecodeError as e:
|
||||
raise CorruptDataException("Data inside " + name +
|
||||
" (savespace " + saveSpace +
|
||||
") is not valid Json")
|
||||
except FileNotFoundError as e:
|
||||
raise AbsentRecordException("Record " + name +
|
||||
" not found in savespace " + saveSpace)
|
Reference in New Issue
Block a user