Store setup
This commit is contained in:
parent
d4c593208a
commit
eeb063f307
@ -43,7 +43,6 @@ class CommandLine:
|
|||||||
print('byebye!')
|
print('byebye!')
|
||||||
self.stopping = True
|
self.stopping = True
|
||||||
|
|
||||||
|
|
||||||
def do_reload(self):
|
def do_reload(self):
|
||||||
self.reloading = True
|
self.reloading = True
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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')
|
||||||
|
@ -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()}'
|
||||||
|
45
store.py
45
store.py
@ -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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user