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