0ptr/store.py
Richard Bronkhorst eeb063f307 Store setup
2023-06-09 22:20:46 +02:00

50 lines
1.1 KiB
Python

from models.base import Base
from models.waypoint import Waypoint
from models.sector import Sector
from models.system import System
from models.setting import Setting
from os.path import isfile, dirname, isdir
import os
import json
class Store:
def __init__(self, data_dir):
self.data_dir = data_dir
self.data = {}
def path(self, obj):
return os.path.join(self.data_dir, obj.path())
def load(self, obj):
path = self.path(obj)
if not isfile(path):
return obj
with open(path) as f:
data = json.load(f)
data['store'] = self
obj.__dict__ = data
def store(self, obj):
path = self.path(obj)
path_dir = dirname(path)
data = obj.dict()
if not isdir(path_dir):
os.makedirs(path_dir, exist_ok=True)
with open(path, 'w') as f:
json.dump(data, f, indent=2)
obj.dirty = False
def get(self, typ, symbol):
obj = typ(symbol, self)
self.load(obj)
self.data[symbol] = obj
return obj
def flush(self):
for obj in self.data.values():
self.store(obj)
def foo(self):
s = self.get(System, 'dez-hq14')
print(s)