Store setup

This commit is contained in:
Richard Bronkhorst 2023-06-09 22:20:46 +02:00
parent d4c593208a
commit eeb063f307
5 changed files with 60 additions and 6 deletions

View File

@ -42,7 +42,6 @@ class CommandLine:
def do_quit(self): def do_quit(self):
print('byebye!') print('byebye!')
self.stopping = True self.stopping = True
def do_reload(self): def do_reload(self):
self.reloading = True self.reloading = True

View File

@ -10,7 +10,14 @@ class Commander(CommandLine):
def do_foo(self): def do_foo(self):
self.store.foo() self.store.foo()
self.store.flush()
def main(args): def main(args):
c = Commander(args.store_dir)
c.run()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--store-dir', default='data')
args = parser.parse_args() args = parser.parse_args()
main(args) main(args)

View File

@ -1,9 +1,18 @@
from copy import deepcopy
class Base: class Base:
symbol: str symbol: str
def __init__(self, symbol, store): def __init__(self, symbol, store):
self.symbol = symbol self.symbol = symbol
self.store = store self.store = store
self.dirty = True
def dict(self):
r = deepcopy(self.__dict__)
del r['store']
del r['dirty']
return r
def path(self): def path(self):
raise NotImplementedError('path') raise NotImplementedError('path')

View File

@ -5,3 +5,7 @@ from .base import Base
class System(Base): class System(Base):
def ext(self): def ext(self):
return 'stm' return 'stm'
def path(self):
sector, symbol = self.symbol.split('-')
return f'atlas/{sector}/{symbol}.{self.ext()}'

View File

@ -3,12 +3,47 @@ from models.waypoint import Waypoint
from models.sector import Sector from models.sector import Sector
from models.system import System from models.system import System
from models.setting import Setting from models.setting import Setting
from os.path import isfile, dirname, isdir
import os
import json
class Store: class Store:
def __init__(self, fil): def __init__(self, data_dir):
pass 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): def foo(self):
w = Waypoint('jdjdj', self) s = self.get(System, 'dez-hq14')
print(w.__dict__) print(s)