refactor major

This commit is contained in:
www
2020-12-02 00:04:39 +00:00
parent 58be5c779a
commit 894a99cdef
110 changed files with 20639 additions and 155 deletions

2
misc/__init__.py Normal file
View File

@@ -0,0 +1,2 @@
from .utils import SaveFileMapping, SaveFileObject

70
misc/utils.py Normal file
View File

@@ -0,0 +1,70 @@
import yaml
from collections.abc import Mapping
from dataclasses import asdict
class SaveFileObject():
#def __init__(self,d={},**kwargs):
# self.data=d
# self.data.update(kwargs)
#def asdict(self):
# return self.data
def asdict(self):
return asdict(self)
def update(self, new):
for key, value in new.items():
if hasattr(self, key):
setattr(self, key, value)
#def __getattr__(self, key):
# return self.data.get(key,None)
#def __setattr__(self, key,value):
# if not key in ["data"]:
# self.data[key]=value
# else:
# super().__setattr__(key,value)
class SaveFileMapping(Mapping):
__file =None
def __init__(self, file=None):
self.data=dict()
self.__file=file
def asdict(self):
return {k: self[k].asdict() for k in self}
def from_dict(self,d):
pass
def to_file(self,fn=None):
if fn is None: fn=self.__file
with open(fn,'w') as f:
f.write(yaml.dump(self.asdict()))
def from_file(self,fn=None):
if fn is None: fn = self.__file
try:
with open(fn,'r') as f:
d=yaml.load(f,Loader=yaml.Loader)
except FileNotFoundError as e:
with open(fn,'w') as f:
f.write("")
self.from_dict(d)
def __getitem__(self,key):
return self.data.get(key,None)
def __setitem__(self,key,data):
if not isinstance(data,SaveFileObject):
raise TypeError("data elements should be derived from SaveFileObject")
if not callable(getattr(data,"asdict",None)):
raise TypeError("Dataelements need a method to_dict that returns a dict")
#if not callable(getattr(data.__class__,"from_dict",None)):
# raise TypeError("Dataelements need a method to_dict that returns a dict")
self.data[key]= data
return self.data[key]
def __iter__(self):
return iter(self.data)
def __len__(self):
return len(self.data)