Store setup
This commit is contained in:
parent
d4c593208a
commit
eeb063f307
@ -42,7 +42,6 @@ class CommandLine:
|
||||
def do_quit(self):
|
||||
print('byebye!')
|
||||
self.stopping = True
|
||||
|
||||
|
||||
def do_reload(self):
|
||||
self.reloading = True
|
||||
|
@ -10,7 +10,14 @@ class Commander(CommandLine):
|
||||
|
||||
def do_foo(self):
|
||||
self.store.foo()
|
||||
self.store.flush()
|
||||
|
||||
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()
|
||||
main(args)
|
||||
|
@ -1,9 +1,18 @@
|
||||
from copy import deepcopy
|
||||
|
||||
class Base:
|
||||
symbol: str
|
||||
|
||||
def __init__(self, symbol, store):
|
||||
self.symbol = symbol
|
||||
self.store = store
|
||||
self.dirty = True
|
||||
|
||||
def dict(self):
|
||||
r = deepcopy(self.__dict__)
|
||||
del r['store']
|
||||
del r['dirty']
|
||||
return r
|
||||
|
||||
def path(self):
|
||||
raise NotImplementedError('path')
|
||||
|
@ -5,3 +5,7 @@ from .base import Base
|
||||
class System(Base):
|
||||
def ext(self):
|
||||
return 'stm'
|
||||
|
||||
def path(self):
|
||||
sector, symbol = self.symbol.split('-')
|
||||
return f'atlas/{sector}/{symbol}.{self.ext()}'
|
||||
|
45
store.py
45
store.py
@ -3,12 +3,47 @@ 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, fil):
|
||||
pass
|
||||
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):
|
||||
w = Waypoint('jdjdj', self)
|
||||
print(w.__dict__)
|
||||
|
||||
s = self.get(System, 'dez-hq14')
|
||||
print(s)
|
||||
|
Loading…
Reference in New Issue
Block a user